Skip to content

Commit

Permalink
Save split group membership
Browse files Browse the repository at this point in the history
  • Loading branch information
ctews committed May 10, 2016
1 parent 953ba3b commit 4292081
Showing 1 changed file with 52 additions and 2 deletions.
54 changes: 52 additions & 2 deletions CTSplitTest/CTSplitTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,30 +10,80 @@ import Foundation

struct CTSplitTest {

// Typealias
typealias SplitGroup = () -> Void

func runABTest(distribution:[Double]=[0.5,0.5], groupA:ReferralGroup?, groupB:ReferralGroup?) {
let rnd = self._randomNumber(probabilities: distribution)
// Constants
let kSplitGroupKey = "splitGroup"
let kGroupA = "groupA"
let kGroupB = "groupB"
let kGroupC = "groupC"

func runABTest(distribution:[Double]=[0.5,0.5], groupA:SplitGroup?, groupB:SplitGroup?) {
let membership = _getGroupMembership()

guard membership == nil else {
if membership == kGroupA {
groupA?()
} else {
groupB?()
}

return
}

let rnd = self._randomNumber(probabilities: distribution)
if rnd == 0 {
_saveGroupMembership(kGroupA)
groupA?()
} else {
_saveGroupMembership(kGroupB)
groupB?()
}
}

func runABCTest(groupA groupA:SplitGroup?, groupB:SplitGroup?, groupC:SplitGroup?) {
let membership = _getGroupMembership()
guard membership == nil else {
if membership == kGroupA {
groupA?()
} else if membership == kGroupB {
groupB?()
} else {
groupC?()
}

return
}

let rnd = self._randomNumber(probabilities: [0.33, 0.33, 0,33])

if rnd == 0 {
_saveGroupMembership(kGroupA)
groupA?()
} else if rnd == 1 {
_saveGroupMembership(kGroupB)
groupB?()
} else {
_saveGroupMembership(kGroupC)
groupC?()
}
}

private func _getGroupMembership() -> String? {
let defaults = NSUserDefaults.standardUserDefaults()
let membership = defaults.objectForKey(kSplitGroupKey) as? String

return membership
}

private func _saveGroupMembership(group:String) {
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(group, forKey: kSplitGroupKey)
defaults.synchronize()
}


/**
* Create a random number with distribution
* E.g. randomNumber([0.5,0.5]) generate a 0 or 1 with 50-50 split
Expand Down

0 comments on commit 4292081

Please sign in to comment.