Removed redundancies from ‘SurgeTests/ArithmeticTests.swift’

This commit is contained in:
Vincent Esche 2019-09-24 21:48:45 +02:00
parent c217280e14
commit f22fdf5afb
1 changed files with 66 additions and 53 deletions

View File

@ -26,15 +26,28 @@ import XCTest
// swiftlint:disable nesting type_body_length
class ArithmeticTests: XCTestCase {
let n = 1_000
static let n = 1_000
func monotonic<Scalar>(count: Int = ArithmeticTests.n) -> [Scalar] where Scalar: FloatingPoint {
return (1...count).map { Scalar($0) }
}
func monotonicNormalized<Scalar>(count: Int = ArithmeticTests.n) -> [Scalar] where Scalar: FloatingPoint {
let scalarCount = Scalar(count)
return (1...count).map { Scalar($0) / scalarCount }
}
func constant<Scalar>(_ value: Scalar, count: Int = ArithmeticTests.n) -> [Scalar] where Scalar: FloatingPoint {
return Array(repeating: value, count: count)
}
// MARK: - Addition: In Place
func test_add_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.addInPlace(&actual, rhs)
@ -47,8 +60,8 @@ class ArithmeticTests: XCTestCase {
func test_add_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.addInPlace(&actual, rhs)
@ -63,8 +76,8 @@ class ArithmeticTests: XCTestCase {
func test_sub_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.subInPlace(&actual, rhs)
@ -77,8 +90,8 @@ class ArithmeticTests: XCTestCase {
func test_sub_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.subInPlace(&actual, rhs)
@ -93,8 +106,8 @@ class ArithmeticTests: XCTestCase {
func test_mul_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.mulInPlace(&actual, rhs)
@ -107,8 +120,8 @@ class ArithmeticTests: XCTestCase {
func test_mul_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.mulInPlace(&actual, rhs)
@ -123,8 +136,8 @@ class ArithmeticTests: XCTestCase {
func test_div_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.divInPlace(&actual, rhs)
@ -137,8 +150,8 @@ class ArithmeticTests: XCTestCase {
func test_div_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.divInPlace(&actual, rhs)
@ -153,8 +166,8 @@ class ArithmeticTests: XCTestCase {
func test_mod_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) }
let rhs: [Scalar] = Array(repeating: 42, count: n)
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = constant(2.0)
var actual: [Scalar] = lhs
Surge.modInPlace(&actual, rhs)
@ -167,8 +180,8 @@ class ArithmeticTests: XCTestCase {
func test_mod_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) }
let rhs: [Scalar] = Array(repeating: 42, count: n)
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = constant(2.0)
var actual: [Scalar] = lhs
Surge.modInPlace(&actual, rhs)
@ -183,8 +196,8 @@ class ArithmeticTests: XCTestCase {
func test_remainder_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) }
let rhs: [Scalar] = Array(repeating: -42, count: n)
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = constant(-2.0)
var actual: [Scalar] = lhs
Surge.remainderInPlace(&actual, rhs)
@ -197,8 +210,8 @@ class ArithmeticTests: XCTestCase {
func test_remainder_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) }
let rhs: [Scalar] = Array(repeating: -42, count: n)
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = constant(-2.0)
var actual: [Scalar] = lhs
Surge.remainderInPlace(&actual, rhs)
@ -213,7 +226,7 @@ class ArithmeticTests: XCTestCase {
func test_exp_in_place_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.expInPlace(&actual)
@ -226,7 +239,7 @@ class ArithmeticTests: XCTestCase {
func test_exp_in_place_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.expInPlace(&actual)
@ -241,7 +254,7 @@ class ArithmeticTests: XCTestCase {
func test_exp2_in_place_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.exp2InPlace(&actual)
@ -254,7 +267,7 @@ class ArithmeticTests: XCTestCase {
func test_exp2_in_place_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.exp2InPlace(&actual)
@ -269,8 +282,8 @@ class ArithmeticTests: XCTestCase {
func test_pow_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = Array(repeating: 2.0, count: n)
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = constant(2.0)
var actual: [Scalar] = lhs
Surge.powInPlace(&actual, rhs)
@ -283,8 +296,8 @@ class ArithmeticTests: XCTestCase {
func test_pow_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = Array(repeating: 2.0, count: n)
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = constant(2.0)
var actual: [Scalar] = lhs
Surge.powInPlace(&actual, rhs)
@ -297,7 +310,7 @@ class ArithmeticTests: XCTestCase {
func test_pow_in_place_array_scalar_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: Scalar = 2.0
var actual: [Scalar] = lhs
@ -311,7 +324,7 @@ class ArithmeticTests: XCTestCase {
func test_pow_in_place_array_scalar_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: Scalar = 2.0
var actual: [Scalar] = lhs
@ -327,7 +340,7 @@ class ArithmeticTests: XCTestCase {
func test_sq_in_place_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.sqInPlace(&actual)
@ -340,7 +353,7 @@ class ArithmeticTests: XCTestCase {
func test_sq_in_place_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.sqInPlace(&actual)
@ -355,7 +368,7 @@ class ArithmeticTests: XCTestCase {
func test_sqrt_in_place_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.sqrtInPlace(&actual)
@ -368,7 +381,7 @@ class ArithmeticTests: XCTestCase {
func test_sqrt_in_place_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) }
let lhs: [Scalar] = monotonicNormalized()
var actual: [Scalar] = lhs
Surge.sqrtInPlace(&actual)
@ -383,8 +396,8 @@ class ArithmeticTests: XCTestCase {
func test_dot_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.dot(lhs, rhs)
@ -396,8 +409,8 @@ class ArithmeticTests: XCTestCase {
func test_dot_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.dot(lhs, rhs)
@ -411,7 +424,7 @@ class ArithmeticTests: XCTestCase {
func test_sum_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.sum(lhs)
@ -423,7 +436,7 @@ class ArithmeticTests: XCTestCase {
func test_sum_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.sum(lhs)
@ -437,8 +450,8 @@ class ArithmeticTests: XCTestCase {
func test_dist_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.dist(lhs, rhs)
@ -450,8 +463,8 @@ class ArithmeticTests: XCTestCase {
func test_dist_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.dist(lhs, rhs)
@ -465,8 +478,8 @@ class ArithmeticTests: XCTestCase {
func test_distsq_array_array_float() {
typealias Scalar = Float
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.distSq(lhs, rhs)
@ -480,8 +493,8 @@ class ArithmeticTests: XCTestCase {
func test_distsq_array_array_double() {
typealias Scalar = Double
let lhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let rhs: [Scalar] = (1...n).map { Scalar($0) / Scalar(n) }
let lhs: [Scalar] = monotonicNormalized()
let rhs: [Scalar] = monotonicNormalized()
let actual: Scalar = Surge.distSq(lhs, rhs)