From d6169439274153754a53566c89283be49cee8daa Mon Sep 17 00:00:00 2001 From: Vincent Esche Date: Mon, 23 Sep 2019 13:10:25 +0200 Subject: [PATCH] Added benchmark measurements to `VectorTests` --- Tests/SurgeTests/VectorTests.swift | 332 ++++++++++++++++++++++------- 1 file changed, 256 insertions(+), 76 deletions(-) diff --git a/Tests/SurgeTests/VectorTests.swift b/Tests/SurgeTests/VectorTests.swift index 2c68ec7..951ac98 100644 --- a/Tests/SurgeTests/VectorTests.swift +++ b/Tests/SurgeTests/VectorTests.swift @@ -44,7 +44,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector + vector + var actual: Vector = [] + measure { + actual = vector + vector + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -55,7 +58,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector + vector + var actual: Vector = [] + measure { + actual = vector + vector + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -67,7 +73,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - let actual = vector + scalar + var actual: Vector = [] + measure { + actual = vector + scalar + } let expected: Vector = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -79,7 +88,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - let actual = vector + scalar + var actual: Vector = [] + measure { + actual = vector + scalar + } let expected: Vector = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -88,11 +100,17 @@ class VectorTests: XCTestCase { func test_add_in_place_vector_vector_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector += vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual += vector + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -101,11 +119,17 @@ class VectorTests: XCTestCase { func test_add_in_place_vector_vector_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector += vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual += vector + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -114,12 +138,18 @@ class VectorTests: XCTestCase { func test_add_in_place_vector_scalar_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - vector += scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual += scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -128,12 +158,18 @@ class VectorTests: XCTestCase { func test_add_in_place_vector_scalar_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - vector += scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual += scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -144,7 +180,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector - vector + var actual: Vector = [] + measure { + actual = vector - vector + } let expected: Vector = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -155,7 +194,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector - vector + var actual: Vector = [] + measure { + actual = vector - vector + } let expected: Vector = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -167,7 +209,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - let actual = vector - scalar + var actual: Vector = [] + measure { + actual = vector - scalar + } let expected: Vector = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -179,7 +224,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - let actual = vector - scalar + var actual: Vector = [] + measure { + actual = vector - scalar + } let expected: Vector = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -188,11 +236,17 @@ class VectorTests: XCTestCase { func test_sub_in_place_vector_vector_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector -= vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual -= vector + stopMeasuring() + } - let actual = vector let expected: Vector = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -201,11 +255,17 @@ class VectorTests: XCTestCase { func test_sub_in_place_vector_vector_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector -= vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual -= vector + stopMeasuring() + } - let actual = vector let expected: Vector = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -214,12 +274,18 @@ class VectorTests: XCTestCase { func test_sub_in_place_vector_scalar_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - vector -= scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual -= scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -228,12 +294,18 @@ class VectorTests: XCTestCase { func test_sub_in_place_vector_scalar_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 1.0 - vector -= scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual -= scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -244,7 +316,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = 2 * vector + var actual: Vector = [] + measure { + actual = 2 * vector + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -256,7 +331,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 2.0 - let actual = scalar * vector + var actual: Vector = [] + measure { + actual = scalar * vector + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -268,7 +346,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 2.0 - let actual = vector * scalar + var actual: Vector = [] + measure { + actual = vector * scalar + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -280,7 +361,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 2.0 - let actual = vector * scalar + var actual: Vector = [] + measure { + actual = vector * scalar + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -297,7 +381,10 @@ class VectorTests: XCTestCase { [3, 6], ] - let actual = lhs * rhs + var actual: Vector = [] + measure { + actual = lhs * rhs + } let expected: Vector = [17, 38] XCTAssertEqual(actual, expected) @@ -314,7 +401,10 @@ class VectorTests: XCTestCase { [3, 6], ] - let actual = lhs * rhs + var actual: Vector = [] + measure { + actual = lhs * rhs + } let expected: Vector = [17, 38] XCTAssertEqual(actual, expected) @@ -323,12 +413,18 @@ class VectorTests: XCTestCase { func test_mul_in_place_vector_scalar_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 2.0 - vector *= scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual *= scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -337,12 +433,18 @@ class VectorTests: XCTestCase { func test_mul_in_place_vector_scalar_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 2.0 - vector *= scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual *= scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -354,7 +456,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 0.5 - let actual = vector / scalar + var actual: Vector = [] + measure { + actual = vector / scalar + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -366,7 +471,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 0.5 - let actual = vector / scalar + var actual: Vector = [] + measure { + actual = vector / scalar + } let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-5) @@ -375,12 +483,18 @@ class VectorTests: XCTestCase { func test_div_in_place_vector_scalar_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 0.5 - vector /= scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual /= scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -389,12 +503,18 @@ class VectorTests: XCTestCase { func test_div_in_place_vector_scalar_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] let scalar: Scalar = 0.5 - vector /= scalar + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual /= scalar + stopMeasuring() + } - let actual = vector let expected: Vector = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20] XCTAssertEqual(actual, expected, accuracy: 1e-5) @@ -405,7 +525,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector .* vector + var actual: Vector = [] + measure { + actual = vector .* vector + } let expected: Vector = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -416,7 +539,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector .* vector + var actual: Vector = [] + measure { + actual = vector .* vector + } let expected: Vector = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -425,11 +551,17 @@ class VectorTests: XCTestCase { func test_elmul_in_place_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector .*= vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual .*= vector + stopMeasuring() + } - let actual = vector let expected: Vector = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -438,11 +570,17 @@ class VectorTests: XCTestCase { func test_elmul_in_place_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector .*= vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual .*= vector + stopMeasuring() + } - let actual = vector let expected: Vector = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -453,7 +591,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector ./ vector + var actual: Vector = [] + measure { + actual = vector ./ vector + } let expected: Vector = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -464,7 +605,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = vector ./ vector + var actual: Vector = [] + measure { + actual = vector ./ vector + } let expected: Vector = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] XCTAssertEqual(actual, expected, accuracy: 1e-6) @@ -473,11 +617,17 @@ class VectorTests: XCTestCase { func test_eldiv_in_place_double() { typealias Scalar = Double - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector ./= vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual ./= vector + stopMeasuring() + } - let actual = vector let expected: Vector = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -486,11 +636,17 @@ class VectorTests: XCTestCase { func test_eldiv_in_place_float() { typealias Scalar = Float - var vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - vector ./= vector + var actual: Vector = [] + measureMetrics([.wallClockTime], automaticallyStartMeasuring: false) { + actual = vector + + startMeasuring() + actual ./= vector + stopMeasuring() + } - let actual = vector let expected: Vector = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] XCTAssertEqual(actual, expected, accuracy: 1e-6) @@ -501,7 +657,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = pow(vector, 2) + var actual: Vector = [] + measure { + actual = pow(vector, 2) + } let expected: Vector = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] XCTAssertEqual(actual, expected, accuracy: 1e-8) @@ -512,7 +671,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = pow(vector, 2) + var actual: Vector = [] + measure { + actual = pow(vector, 2) + } let expected: Vector = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] XCTAssertEqual(actual, expected, accuracy: 1e-5) @@ -523,7 +685,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = exp(vector) + var actual: Vector = [] + measure { + actual = exp(vector) + } let expected: Vector = [ 2.718_282, 7.389_056, 20.085_537, 54.598_150, 148.413_159, 403.428_793, 1_096.633_158, 2_980.957_987, 8_103.083_928, 22_026.465_795 @@ -537,7 +702,10 @@ class VectorTests: XCTestCase { let vector: Vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - let actual = exp(vector) + var actual: Vector = [] + measure { + actual = exp(vector) + } let expected: Vector = [ 2.718_282, 7.389_056, 20.085_537, 54.598_150, 148.413_159, 403.428_793, 1_096.633_158, 2_980.957_987, 8_103.083_928, 22_026.465_795 @@ -552,7 +720,10 @@ class VectorTests: XCTestCase { let lhs: Vector = [1, 2, 3] let rhs: Vector = [9, 8, 7] - let actual = dist(lhs, rhs) + var actual: Scalar = 0 + measure { + actual = dist(lhs, rhs) + } let expected: Scalar = sqrt(Swift.zip(lhs, rhs).map({ $0 - $1 }).map({ $0 * $0 }).reduce(0.0, +)) XCTAssertEqual(actual, expected, accuracy: 1e-6) @@ -564,7 +735,10 @@ class VectorTests: XCTestCase { let lhs: Vector = [1, 2, 3, 4] let rhs: Vector = [9, 8, 7, 6] - let actual = dist(lhs, rhs) + var actual: Scalar = 0 + measure { + actual = dist(lhs, rhs) + } let expected: Scalar = sqrt(Swift.zip(lhs, rhs).map({ $0 - $1 }).map({ $0 * $0 }).reduce(0.0, +)) XCTAssertEqual(actual, expected, accuracy: 1e-6) @@ -576,7 +750,10 @@ class VectorTests: XCTestCase { let lhs: Vector = [1, 2, 3] let rhs: Vector = [9, 8, 7] - let actual = distSq(lhs, rhs) + var actual: Scalar = 0 + measure { + actual = distSq(lhs, rhs) + } let expected: Scalar = Swift.zip(lhs, rhs).map({ $0 - $1 }).map({ $0 * $0 }).reduce(0.0, +) @@ -589,7 +766,10 @@ class VectorTests: XCTestCase { let lhs: Vector = [1, 2, 3, 4] let rhs: Vector = [9, 8, 7, 6] - let actual = distSq(lhs, rhs) + var actual: Scalar = 0 + measure { + actual = distSq(lhs, rhs) + } let expected: Scalar = Swift.zip(lhs, rhs).map({ $0 - $1 }).map({ $0 * $0 }).reduce(0.0, +) XCTAssertEqual(actual, expected, accuracy: 1e-6)