Created
June 16, 2016 05:39
-
-
Save andersio/1c7a08b77075acc188ac3f62a13ee8fc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct LargeStruct { | |
var a: Int = 0 | |
var b: Int = 1 | |
var c: Int = 2 | |
var d: Int = 3 | |
var e: Int = 4 | |
var f: Int = 5 | |
var g: Int = 6 | |
var h: Int = 7 | |
mutating func mutate() { | |
a += 1 | |
b += 1 | |
c += 1 | |
d += 1 | |
e += 1 | |
f += 1 | |
g += 1 | |
h += 1 | |
} | |
} | |
class AtomicSpeedTestCase: XCTestCase { | |
func test_withValueReturnBeforeChange_10000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
/// 100 itrs | |
for _ in 1 ... 10000 { | |
let _: LargeStruct = number._prev_withValue { | |
var copy = $0 | |
copy.mutate() | |
return copy | |
} | |
} | |
} | |
} | |
func test_withValueReturnBeforeChange_500000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
/// 100 itrs | |
for _ in 1 ... 500000 { | |
let _: LargeStruct = number._prev_withValue { | |
var copy = $0 | |
copy.mutate() | |
return copy | |
} | |
} | |
} | |
} | |
func test_withValueReturnBeforeChange_5000000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
/// 100 itrs | |
for _ in 1 ... 5000000 { | |
let _: LargeStruct = number._prev_withValue { | |
var copy = $0 | |
copy.mutate() | |
return copy | |
} | |
} | |
} | |
} | |
func test_withValueReturnAfterChange_10000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
/// 100 itrs | |
for _ in 1 ... 10000 { | |
let _: LargeStruct = number.withValue { | |
var copy = $0 | |
copy.mutate() | |
return copy | |
} | |
} | |
} | |
} | |
func test_withValueReturnAfterChange_500000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
/// 100 itrs | |
for _ in 1 ... 500000 { | |
let _: LargeStruct = number.withValue { | |
var copy = $0 | |
copy.mutate() | |
return copy | |
} | |
} | |
} | |
} | |
func test_withValueReturnAfterChange_5000000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
/// 100 itrs | |
for _ in 1 ... 5000000 { | |
let _: LargeStruct = number.withValue { | |
var copy = $0 | |
copy.mutate() | |
return copy | |
} | |
} | |
} | |
} | |
func test_withValueAfterChange_10000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
for _ in 1 ... 10000 { | |
number.withValue { $0.mutate() } | |
} | |
} | |
} | |
func test_withValueAfterChange_500000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
for _ in 1 ... 500000 { | |
number.withValue { $0.mutate() } | |
} | |
} | |
} | |
func test_withValueAfterChange_5000000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
for _ in 1 ... 5000000 { | |
number.withValue { $0.mutate() } | |
} | |
} | |
} | |
func test_modify_10000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
for _ in 1 ... 10000 { | |
number.modify { $0.mutate() } | |
} | |
} | |
} | |
func test_modify_500000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
for _ in 1 ... 500000 { | |
number.modify { $0.mutate() } | |
} | |
} | |
} | |
func test_modify_5000000() { | |
let number = Atomic(LargeStruct()) | |
measureBlock { | |
for _ in 1 ... 5000000 { | |
number.modify { $0.mutate() } | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment