Skip to content

Instantly share code, notes, and snippets.

@andersio
Created April 24, 2017 20:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andersio/c4e7c2425ce2725cdf63edc3b032d024 to your computer and use it in GitHub Desktop.
Save andersio/c4e7c2425ce2725cdf63edc3b032d024 to your computer and use it in GitHub Desktop.
//
// LockTest.swift
// ReactiveSwift
//
// Created by Anders on 22/4/2017.
// Copyright © 2017 GitHub. All rights reserved.
//
import XCTest
@testable import ReactiveSwift
class LockTest: XCTestCase {
func testNSLockAbsoluteTime() {
var info = mach_timebase_info()
mach_timebase_info(&info)
let lock = NSLock()
var avg1: Double = 0
for _ in 0 ..< 5_000_000 {
let s = mach_absolute_time()
lock.lock()
lock.unlock()
let e = mach_absolute_time()
avg1 += Double(e - s) / Double(info.denom) * Double(info.numer) / Double(5_000_000)
}
print("@NSLock: \(avg1) ns")
}
func testPthreadLockAbsoluteTime() {
var info = mach_timebase_info()
mach_timebase_info(&info)
let lock = Lock.PthreadLock()
var avg1: Double = 0
for _ in 0 ..< 5_000_000 {
let s = mach_absolute_time()
lock.lock()
lock.unlock()
let e = mach_absolute_time()
avg1 += Double(e - s) / Double(info.denom) * Double(info.numer) / Double(5_000_000)
}
print("@PthreadLock: \(avg1) ns")
}
@available(macOS 10.12, *)
func testUnfairLockAbsoluteTime() {
var info = mach_timebase_info()
mach_timebase_info(&info)
let lock = Lock.UnfairLock()
var avg1: Double = 0
for _ in 0 ..< 5_000_000 {
let s = mach_absolute_time()
lock.lock()
lock.unlock()
let e = mach_absolute_time()
avg1 += Double(e - s) / Double(info.denom) * Double(info.numer) / Double(5_000_000)
}
print("@UnfairLock: \(avg1) ns")
}
func testLockAbsoluteTime() {
var info = mach_timebase_info()
mach_timebase_info(&info)
let lock = Lock.make()
var avg1: Double = 0
for _ in 0 ..< 5_000_000 {
let s = mach_absolute_time()
lock.lock()
lock.unlock()
let e = mach_absolute_time()
avg1 += Double(e - s) / Double(info.denom) * Double(info.numer) / Double(5_000_000)
}
print("@Lock: \(avg1) ns")
}
func testLockConstructionDestruction() {
self.measure {
for _ in 0 ..< 1_000_000 {
let lock = Lock.make()
}
}
}
func testPthreadLockConstructionDestruction() {
self.measure {
for _ in 0 ..< 1_000_000 {
let lock = Lock.PthreadLock()
}
}
}
@available(macOS 10.12, *)
func testUnfairLockConstructionDestruction() {
self.measure {
for _ in 0 ..< 1_000_000 {
let lock = Lock.UnfairLock()
}
}
}
func testLockLocking() {
let lock = Lock.make()
self.measure {
for _ in 0 ..< 1_000_000 {
lock.lock()
lock.unlock()
}
}
}
func testPthreadLockLocking() {
let lock = Lock.PthreadLock()
self.measure {
for _ in 0 ..< 1_000_000 {
lock.lock()
lock.unlock()
}
}
}
@available(macOS 10.12, *)
func testUnfairLockLocking() {
let lock = Lock.UnfairLock()
self.measure {
for _ in 0 ..< 1_000_000 {
lock.lock()
lock.unlock()
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment