Recommended way to measure time in Swift?

macOS 10.15 has new XCTest APIs for measuring time and other performance metrics.

It makes the test method from your Improving Float.random(in:using:) post a bit simpler.

import RandomFloat
import XCTest

final class RandomFloatTests: XCTestCase {

  override class var defaultMetrics: [XCTMetric] {
    [
      XCTClockMetric(),
      XCTCPUMetric(limitingToCurrentThread: true),
      XCTMemoryMetric(),
      XCTStorageMetric(),
    ]
  }

  func test() {
    let floatsPerRun = 10_000_000
    var meanSum = 0.0
    var numRuns = 0
    var prng = WyRand()

    measure(metrics: Self.defaultMetrics) {
      var sum = 0.0
      for _ in 0 ..< floatsPerRun {
        let v = pseudorandomFloatInClosedUnitRange(using: &prng)
        sum += Double(v)
      }
      meanSum += sum
      numRuns += 1
    }

    print("Total mean float value:",
          meanSum / Double(floatsPerRun * numRuns))
  }
}
1 Like