// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: rdar50301438 // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos import StdlibUnittest import Accelerate var Accelerate_vForceTests = TestSuite("Accelerate_vForce") //===----------------------------------------------------------------------===// // // vForce single-precision tests // //===----------------------------------------------------------------------===// if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) { var result = [Float]() var legacyResult = [Float]() let x: [Float] = [2, 4, -6.876, 10.9, -100.3, 100] let y: [Float] = [-10, -20, 40, 60, -80, -300] let z: [Float] = [-0.6, 0.2, -0.1, 0.9, -0.1, 0.1] let count = 6 var n: Int32 = 6 Accelerate_vForceTests.test("vForce/SinglePrecisionCeiling") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.ceil(x, result: &result) vvceilf(&legacyResult, x, &n) let returnedResult = vForce.ceil(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionFloor") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.floor(x, result: &result) vvfloorf(&legacyResult, x, &n) let returnedResult = vForce.floor(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionCopySign") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.copysign(magnitudes: x, signs: y, result: &result) vvcopysignf(&legacyResult, x, y, &n) let returnedResult = vForce.copysign(magnitudes: x, signs: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionModulus") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.truncatingRemainder(dividends: x, divisors: y, result: &result) vvfmodf(&legacyResult, x, y, &n) let returnedResult = vForce.truncatingRemainder(dividends: x, divisors: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionModulusParameters") { var scalarResult = [Float.nan] let scalarNumerator = [Float(20)] let scalarDenominator = [Float(6)] vForce.truncatingRemainder(dividends: scalarNumerator, divisors: scalarDenominator, result: &scalarResult) expectEqual(Int(scalarResult.first!), 2) } Accelerate_vForceTests.test("vForce/SinglePrecisionRemainder") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.remainder(dividends: x, divisors: y, result: &result) vvremainderf(&legacyResult, x, y, &n) let returnedResult = vForce.remainder(dividends: x, divisors: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionRemainderParameters") { var scalarResult = [Float.nan] let scalarNumerator = [Float(20)] let scalarDenominator = [Float(6)] vForce.remainder(dividends: scalarNumerator, divisors: scalarDenominator, result: &scalarResult) expectEqual(Int(scalarResult.first!), 2) } Accelerate_vForceTests.test("vForce/SinglePrecisionIntegerTruncation") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.trunc(x, result: &result) vvintf(&legacyResult, x, &n) let returnedResult = vForce.trunc(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionNearestInteger") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.nearestInteger(x, result: &result) vvnintf(&legacyResult, x, &n) let returnedResult = vForce.nearestInteger(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionrsqrt") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.rsqrt(x, result: &result) vvrsqrtf(&legacyResult, x, &n) let returnedResult = vForce.rsqrt(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/SinglePrecisionsqrt") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.sqrt(x, result: &result) vvsqrtf(&legacyResult, x, &n) let returnedResult = vForce.sqrt(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/SinglePrecisionReciprocal") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.reciprocal(x, result: &result) vvrecf(&legacyResult, x, &n) let returnedResult = vForce.reciprocal(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionExp") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.exp(x, result: &result) vvexpf(&legacyResult, x, &n) let returnedResult = vForce.exp(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionExpm1") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.expm1(x, result: &result) vvexpm1f(&legacyResult, x, &n) let returnedResult = vForce.expm1(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionExp2") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.exp2(x, result: &result) vvexp2f(&legacyResult, x, &n) let returnedResult = vForce.exp2(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionLog2") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.log2(x, result: &result) vvlog2f(&legacyResult, x, &n) let returnedResult = vForce.log2(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/SinglePrecisionLog10") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.log10(x, result: &result) vvlog10f(&legacyResult, x, &n) let returnedResult = vForce.log10(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/SinglePrecisionUnbiasedExponent") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.logb(x, result: &result) vvlogbf(&legacyResult, x, &n) let returnedResult = vForce.logb(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionPower") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.pow(bases: x, exponents: y, result: &result) vvpowf(&legacyResult, y, x, &n) let returnedResult = vForce.pow(bases: x, exponents: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionPower") { var scalarResult = [Float.nan] let scalarBase = [Float(10)] let scalarExponent = [Float(2)] vForce.pow(bases: scalarBase, exponents: scalarExponent, result: &scalarResult) expectEqual(Int(scalarResult.first!), 100) } Accelerate_vForceTests.test("vForce/SinglePrecisionSine") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.sin(x, result: &result) vvsinf(&legacyResult, x, &n) let returnedResult = vForce.sin(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionSinPi") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.sinPi(x, result: &result) vvsinpif(&legacyResult, x, &n) let returnedResult = vForce.sinPi(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionCosine") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.cos(x, result: &result) vvcosf(&legacyResult, x, &n) let returnedResult = vForce.cos(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionCosPi") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.cosPi(x, result: &result) vvcospif(&legacyResult, x, &n) let returnedResult = vForce.cosPi(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionSinCos") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) var cosResult = [Float](repeating: .nan, count: result.count) var legacyCosResult = [Float](repeating: .nan, count: result.count) vForce.sincos(x, sinResult: &result, cosResult: &cosResult) vvsincosf(&legacyResult, &legacyCosResult, x, &n) expectTrue(result.elementsEqual(legacyResult)) expectTrue(cosResult.elementsEqual(legacyCosResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionTangent") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.tan(x, result: &result) vvtanf(&legacyResult, x, &n) let returnedResult = vForce.tan(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionTanPi") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.tanPi(x, result: &result) vvtanpif(&legacyResult, x, &n) let returnedResult = vForce.tanPi(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionArcsin") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.asin(z, result: &result) vvasinf(&legacyResult, z, &n) let returnedResult = vForce.asin(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionArccos") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.acos(z, result: &result) vvacosf(&legacyResult, z, &n) let returnedResult = vForce.acos(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionArctan") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.atan(z, result: &result) vvatanf(&legacyResult, z, &n) let returnedResult = vForce.atan(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionSinh") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.sinh(x, result: &result) vvsinhf(&legacyResult, x, &n) let returnedResult = vForce.sinh(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionCosh") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.cosh(x, result: &result) vvcoshf(&legacyResult, x, &n) let returnedResult = vForce.cosh(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionTanh") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.tanh(z, result: &result) vvtanhf(&legacyResult, z, &n) let returnedResult = vForce.tanh(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionAsinh") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.asinh(z, result: &result) vvasinhf(&legacyResult, z, &n) let returnedResult = vForce.asinh(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/SinglePrecisionAcosh") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.acosh(x, result: &result) vvacoshf(&legacyResult, x, &n) let returnedResult = vForce.acosh(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/SinglePrecisionAtan") { result = [Float](repeating: 0, count: count) legacyResult = [Float](repeating: -1, count: count) vForce.atanh(z, result: &result) vvatanhf(&legacyResult, z, &n) let returnedResult = vForce.atanh(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } } //===----------------------------------------------------------------------===// // // vForce double precision tests // //===----------------------------------------------------------------------===// if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) { var result = [Double]() var legacyResult = [Double]() let x: [Double] = [2, 4, -6.876, 10.9, -100.3, 100] let y: [Double] = [-10, -20, 40, 60, -80, -300] let z: [Double] = [-0.6, 0.2, -0.1, 0.9, -0.1, 0.1] let count = 6 var n: Int32 = 6 Accelerate_vForceTests.test("vForce/DoublePrecisionCeiling") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.ceil(x, result: &result) vvceil(&legacyResult, x, &n) let returnedResult = vForce.ceil(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionFloor") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.floor(x, result: &result) vvfloor(&legacyResult, x, &n) let returnedResult = vForce.floor(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionCopySign") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.copysign(magnitudes: x, signs: y, result: &result) vvcopysign(&legacyResult, x, y, &n) let returnedResult = vForce.copysign(magnitudes: x, signs: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionModulus") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.truncatingRemainder(dividends: x, divisors: y, result: &result) vvfmod(&legacyResult, x, y, &n) let returnedResult = vForce.truncatingRemainder(dividends: x, divisors: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionModulusParameters") { var scalarResult = [Double.nan] let scalarNumerator = [Double(20)] let scalarDenominator = [Double(6)] vForce.truncatingRemainder(dividends: scalarNumerator, divisors: scalarDenominator, result: &scalarResult) expectEqual(Int(scalarResult.first!), 2) } Accelerate_vForceTests.test("vForce/DoublePrecisionRemainder") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.remainder(dividends: x, divisors: y, result: &result) vvremainder(&legacyResult, x, y, &n) let returnedResult = vForce.remainder(dividends: x, divisors: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionRemainderParameters") { var scalarResult = [Double.nan] let scalarNumerator = [Double(20)] let scalarDenominator = [Double(6)] vForce.remainder(dividends: scalarNumerator, divisors: scalarDenominator, result: &scalarResult) expectEqual(Int(scalarResult.first!), 2) } Accelerate_vForceTests.test("vForce/DoublePrecisionIntegerTruncation") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.trunc(x, result: &result) vvint(&legacyResult, x, &n) let returnedResult = vForce.trunc(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionNearestInteger") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.nearestInteger(x, result: &result) vvnint(&legacyResult, x, &n) let returnedResult = vForce.nearestInteger(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionrsqrt") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.rsqrt(x, result: &result) vvrsqrt(&legacyResult, x, &n) let returnedResult = vForce.rsqrt(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/DoublePrecisionsqrt") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.sqrt(x, result: &result) vvsqrt(&legacyResult, x, &n) let returnedResult = vForce.sqrt(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/DoublePrecisionReciprocal") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.reciprocal(x, result: &result) vvrec(&legacyResult, x, &n) let returnedResult = vForce.reciprocal(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionExp") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.exp(x, result: &result) vvexp(&legacyResult, x, &n) let returnedResult = vForce.exp(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionExpm1") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.expm1(x, result: &result) vvexpm1(&legacyResult, x, &n) let returnedResult = vForce.expm1(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionExp2") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.exp2(x, result: &result) vvexp2(&legacyResult, x, &n) let returnedResult = vForce.exp2(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionLog2") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.log2(x, result: &result) vvlog2(&legacyResult, x, &n) let returnedResult = vForce.log2(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/DoublePrecisionLog10") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.log10(x, result: &result) vvlog10(&legacyResult, x, &n) let returnedResult = vForce.log10(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/DoublePrecisionUnbiasedExponent") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.logb(x, result: &result) vvlogb(&legacyResult, x, &n) let returnedResult = vForce.logb(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionPower") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.pow(bases: x, exponents: y, result: &result) vvpow(&legacyResult, y, x, &n) let returnedResult = vForce.pow(bases: x, exponents: y) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionPower") { var scalarResult = [Double.nan] let scalarBase = [Double(10)] let scalarExponent = [Double(2)] vForce.pow(bases: scalarBase, exponents: scalarExponent, result: &scalarResult) expectEqual(Int(scalarResult.first!), 100) } Accelerate_vForceTests.test("vForce/DoublePrecisionSine") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.sin(x, result: &result) vvsin(&legacyResult, x, &n) let returnedResult = vForce.sin(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionSinPi") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.sinPi(x, result: &result) vvsinpi(&legacyResult, x, &n) let returnedResult = vForce.sinPi(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionCosine") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.cos(x, result: &result) vvcos(&legacyResult, x, &n) let returnedResult = vForce.cos(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionCosPi") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.cosPi(x, result: &result) vvcospi(&legacyResult, x, &n) let returnedResult = vForce.cosPi(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionSinCos") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) var cosResult = [Double](repeating: .nan, count: result.count) var legacyCosResult = [Double](repeating: .nan, count: result.count) vForce.sincos(x, sinResult: &result, cosResult: &cosResult) vvsincos(&legacyResult, &legacyCosResult, x, &n) expectTrue(result.elementsEqual(legacyResult)) expectTrue(cosResult.elementsEqual(legacyCosResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionTangent") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.tan(x, result: &result) vvtan(&legacyResult, x, &n) let returnedResult = vForce.tan(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionTanPi") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.tanPi(x, result: &result) vvtanpi(&legacyResult, x, &n) let returnedResult = vForce.tanPi(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionArcsin") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.asin(z, result: &result) vvasin(&legacyResult, z, &n) let returnedResult = vForce.asin(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionArccos") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.acos(z, result: &result) vvacos(&legacyResult, z, &n) let returnedResult = vForce.acos(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionArctan") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.atan(z, result: &result) vvatan(&legacyResult, z, &n) let returnedResult = vForce.atan(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionSinh") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.sinh(x, result: &result) vvsinh(&legacyResult, x, &n) let returnedResult = vForce.sinh(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionCosh") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.cosh(x, result: &result) vvcosh(&legacyResult, x, &n) let returnedResult = vForce.cosh(x) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionTanh") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.tanh(z, result: &result) vvtanh(&legacyResult, z, &n) let returnedResult = vForce.tanh(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionAsinh") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.asinh(z, result: &result) vvasinh(&legacyResult, z, &n) let returnedResult = vForce.asinh(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } Accelerate_vForceTests.test("vForce/DoublePrecisionAcosh") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.acosh(x, result: &result) vvacosh(&legacyResult, x, &n) let returnedResult = vForce.acosh(x) expectTrue(result.filter{!$0.isNaN}.elementsEqual(legacyResult.filter{!$0.isNaN})) expectTrue(result.filter{!$0.isNaN}.elementsEqual(returnedResult.filter{!$0.isNaN})) } Accelerate_vForceTests.test("vForce/DoublePrecisionAtan") { result = [Double](repeating: 0, count: count) legacyResult = [Double](repeating: -1, count: count) vForce.atanh(z, result: &result) vvatanh(&legacyResult, z, &n) let returnedResult = vForce.atanh(z) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } } runAllTests()