Skip to content

Instantly share code, notes, and snippets.

@andersio
Created June 16, 2016 05:39
Show Gist options
  • Save andersio/1c7a08b77075acc188ac3f62a13ee8fc to your computer and use it in GitHub Desktop.
Save andersio/1c7a08b77075acc188ac3f62a13ee8fc to your computer and use it in GitHub Desktop.
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