// RUN: %target-run-simple-swift // REQUIRES: executable_test // REQUIRES: rdar50301438 // REQUIRES: objc_interop // UNSUPPORTED: OS=watchos import StdlibUnittest import Accelerate var AccelerateTests_vDSPConversion = TestSuite("Accelerate_vDSPConversion") //===----------------------------------------------------------------------===// // // vDSP polar / rectangular conversion // //===----------------------------------------------------------------------===// if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) { AccelerateTests_vDSPConversion.test("vDSP/SinglePrecisionRectToPolar") { let source: [Float] = [2, 4, -10, -20, 100, -300] let n = vDSP_Length(source.count) var result = [Float](repeating: 0, count: source.count) vDSP.convert(rectangularCoordinates: source, toPolarCoordinates: &result) var legacyResult = [Float](repeating: -1, count: source.count) vDSP_polar(source, 2, &legacyResult, 2, n / 2) let returnedResult = vDSP.rectangularToPolar(source) expectTrue(returnedResult.elementsEqual(legacyResult)) } AccelerateTests_vDSPConversion.test("vDSP/SinglePrecisionPolarToRect") { let source: [Float] = [2, 4, -10, -20, 100, -300] let n = vDSP_Length(source.count) var result = [Float](repeating: 0, count: source.count) vDSP.convert(polarCoordinates: source, toRectangularCoordinates: &result) var legacyResult = [Float](repeating: -1, count: source.count) vDSP_rect(source, 2, &legacyResult, 2, n / 2) let returnedResult = vDSP.polarToRectangular(source) expectTrue(returnedResult.elementsEqual(legacyResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoublePrecisionRectToPolar") { let source: [Double] = [2, 4, -10, -20, 100, -300] let n = vDSP_Length(source.count) var result = [Double](repeating: 0, count: source.count) vDSP.convert(rectangularCoordinates: source, toPolarCoordinates: &result) var legacyResult = [Double](repeating: -1, count: source.count) vDSP_polarD(source, 2, &legacyResult, 2, n / 2) let returnedResult = vDSP.rectangularToPolar(source) expectTrue(returnedResult.elementsEqual(legacyResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoublePrecisionRectToPolar") { let source: [Double] = [2, 4, -10, -20, 100, -300] let n = vDSP_Length(source.count) var result = [Double](repeating: 0, count: source.count) vDSP.convert(polarCoordinates: source, toRectangularCoordinates: &result) var legacyResult = [Double](repeating: -1, count: source.count) vDSP_rectD(source, 2, &legacyResult, 2, n / 2) let returnedResult = vDSP.polarToRectangular(source) expectTrue(returnedResult.elementsEqual(legacyResult)) } } //===----------------------------------------------------------------------===// // // vDSP type-conversion tests // //===----------------------------------------------------------------------===// if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) { let n = vDSP_Length(10) let floatingPointValues: [Float] = [-10.9, -20.1, 32.99, 14.001, -16.5, 90.5, 0, -0, -0.00001, 0.000001] let floatingPointValuesD: [Double] = [-10.9, -20.1, 32.99, 14.001, -16.5, 90.5, 0, -0, -0.00001, 0.000001] let unsignedIntValues = [5, 250, 0, 99, 127, 65, 78, 1, 33, 10] let signedIntValues = [5, -126, 0, -99, 125, -65, 78, -1, 33, -10] AccelerateTests_vDSPConversion.test("vDSP/FloatToDouble") { let source = floatingPointValues var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vspdp(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatToDouble(source) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToFloat") { let source = floatingPointValuesD var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vdpsp(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.doubleToFloat(source) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/UInt8_to_Float") { let source = unsignedIntValues.map{ return UInt8($0) } var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vfltu8(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Float.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/UInt8_to_Double") { let source = unsignedIntValues.map{ return UInt8($0) } var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vfltu8D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Double.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/UInt16_to_Float") { let source = unsignedIntValues.map{ return UInt16($0) } var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vfltu16(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Float.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/UInt16_to_Double") { let source = unsignedIntValues.map{ return UInt16($0) } var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vfltu16D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Double.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/UInt32_to_Float") { let source = unsignedIntValues.map{ return UInt32($0) } var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vfltu32(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Float.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/UInt32_to_Double") { let source = unsignedIntValues.map{ return UInt32($0) } var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vfltu32D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Double.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/Int8_to_Float") { let source = signedIntValues.map{ return Int8($0) } var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vflt8(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Float.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/Int8_to_Double") { let source = signedIntValues.map{ return Int8($0) } var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vflt8D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Double.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/Int16_to_Float") { let source = signedIntValues.map{ return Int16($0) } var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vflt16(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Float.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/Int16_to_Double") { let source = signedIntValues.map{ return Int16($0) } var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vflt16D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Double.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/Int32_to_Float") { let source = signedIntValues.map{ return Int32($0) } var result = [Float](repeating: 0, count: source.count) var legacyResult = [Float](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vflt32(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Float.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/Int32_to_Double") { let source = signedIntValues.map{ return Int32($0) } var result = [Double](repeating: 0, count: source.count) var legacyResult = [Double](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result) vDSP_vflt32D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.integerToFloatingPoint(source, floatingPointType: Double.self) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToInt32towardZero") { let source = floatingPointValues var result = [Int32](repeating: 0, count: source.count) var legacyResult = [Int32](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfix32(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int32.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToInt32towardNearest") { let source = floatingPointValues var result = [Int32](repeating: 0, count: source.count) var legacyResult = [Int32](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixr32(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int32.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToInt32towardZero") { let source = floatingPointValuesD var result = [Int32](repeating: 0, count: source.count) var legacyResult = [Int32](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfix32D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int32.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToInt32towardNearest") { let source = floatingPointValuesD var result = [Int32](repeating: 0, count: source.count) var legacyResult = [Int32](repeating: -1, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixr32D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int32.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToUInt16towardZero") { let source = floatingPointValues var result = [UInt16](repeating: 0, count: source.count) var legacyResult = [UInt16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfixu16(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt16.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToUInt16towardNearest") { let source = floatingPointValues var result = [UInt16](repeating: 0, count: source.count) var legacyResult = [UInt16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixru16(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt16.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToUInt16towardZero") { let source = floatingPointValuesD var result = [UInt16](repeating: 0, count: source.count) var legacyResult = [UInt16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfixu16D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt16.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToUInt16towardNearest") { let source = floatingPointValuesD var result = [UInt16](repeating: 0, count: source.count) var legacyResult = [UInt16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixru16D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt16.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToUInt32towardZero") { let source = floatingPointValues var result = [UInt32](repeating: 0, count: source.count) var legacyResult = [UInt32](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfixu32(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt32.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToUInt32towardNearest") { let source = floatingPointValues var result = [UInt32](repeating: 0, count: source.count) var legacyResult = [UInt32](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixru32(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt32.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToUInt32towardZero") { let source = floatingPointValuesD var result = [UInt32](repeating: 0, count: source.count) var legacyResult = [UInt32](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfixu32D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt32.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToUInt32towardNearest") { let source = floatingPointValuesD var result = [UInt32](repeating: 0, count: source.count) var legacyResult = [UInt32](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixru32D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt32.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToInt16towardZero") { let source = floatingPointValues var result = [Int16](repeating: 0, count: source.count) var legacyResult = [Int16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfix16(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int16.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToInt16towardNearest") { let source = floatingPointValues var result = [Int16](repeating: 0, count: source.count) var legacyResult = [Int16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixr16(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int16.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToInt16towardZero") { let source = floatingPointValuesD var result = [Int16](repeating: 0, count: source.count) var legacyResult = [Int16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfix16D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int16.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToInt16towardNearest") { let source = floatingPointValuesD var result = [Int16](repeating: 0, count: source.count) var legacyResult = [Int16](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixr16D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int16.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToInt8towardZero") { let source = floatingPointValues var result = [Int8](repeating: 0, count: source.count) var legacyResult = [Int8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfix8(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int8.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToInt8towardNearest") { let source = floatingPointValues var result = [Int8](repeating: 0, count: source.count) var legacyResult = [Int8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixr8(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int8.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToInt8towardZero") { let source = floatingPointValuesD var result = [Int8](repeating: 0, count: source.count) var legacyResult = [Int8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfix8D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int8.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToInt8towardNearest") { let source = floatingPointValuesD var result = [Int8](repeating: 0, count: source.count) var legacyResult = [Int8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixr8D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: Int8.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToUInt8towardZero") { let source = floatingPointValues var result = [UInt8](repeating: 0, count: source.count) var legacyResult = [UInt8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfixu8(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt8.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/FloatToUInt8towardNearest") { let source = floatingPointValues var result = [UInt8](repeating: 0, count: source.count) var legacyResult = [UInt8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixru8(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt8.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubleToUInt8towardZero") { let source = floatingPointValuesD var result = [UInt8](repeating: 0, count: source.count) var legacyResult = [UInt8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardZero) vDSP_vfixu8D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt8.self, rounding: .towardZero) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } AccelerateTests_vDSPConversion.test("vDSP/DoubletoUInt8towardNearest") { let source = floatingPointValuesD var result = [UInt8](repeating: 0, count: source.count) var legacyResult = [UInt8](repeating: 99, count: source.count) vDSP.convertElements(of: source, to: &result, rounding: .towardNearestInteger) vDSP_vfixru8D(source, 1, &legacyResult, 1, n) let returnedResult = vDSP.floatingPointToInteger(source, integerType: UInt8.self, rounding: .towardNearestInteger) expectTrue(result.elementsEqual(legacyResult)) expectTrue(result.elementsEqual(returnedResult)) } } //===----------------------------------------------------------------------===// // // vDSP decibel conversion // //===----------------------------------------------------------------------===// if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) { AccelerateTests_vDSPConversion.test("vDSP/PowerToDecibelsSinglePrecision") { let source: [Float] = [1, 10, 100, 2, 4, 8, 16, 101, 27, 13, 11, 44, 0.5, 99, 0.125] let zeroReference = Float(7) let n = source.count var result = [Float](repeating: 0, count: n) vDSP.convert(power: source, toDecibels: &result, zeroReference: zeroReference) var legacyResult = [Float](repeating: -1, count: n) vDSP_vdbcon(source, 1, [zeroReference], &legacyResult, 1, vDSP_Length(n), 0) let returnedResult = vDSP.powerToDecibels(source, zeroReference: zeroReference) } AccelerateTests_vDSPConversion.test("vDSP/AmplitudeToDecibelsSinglePrecision") { let source: [Float] = [1, 10, 100, 2, 4, 8, 16, 101, 27, 13, 11, 44, 0.5, 99, 0.125] let zeroReference = Float(7) let n = source.count var result = [Float](repeating: 0, count: n) vDSP.convert(amplitude: source, toDecibels: &result, zeroReference: zeroReference) var legacyResult = [Float](repeating: -1, count: n) vDSP_vdbcon(source, 1, [zeroReference], &legacyResult, 1, vDSP_Length(n), 1) let returnedResult = vDSP.amplitudeToDecibels(source, zeroReference: zeroReference) } AccelerateTests_vDSPConversion.test("vDSP/PowerToDecibelsDoublePrecision") { let source: [Double] = [1, 10, 100, 2, 4, 8, 16, 101, 27, 13, 11, 44, 0.5, 99, 0.125] let zeroReference = Double(7) let n = source.count var result = [Double](repeating: 0, count: n) vDSP.convert(power: source, toDecibels: &result, zeroReference: zeroReference) var legacyResult = [Double](repeating: -1, count: n) vDSP_vdbconD(source, 1, [zeroReference], &legacyResult, 1, vDSP_Length(n), 0) let returnedResult = vDSP.powerToDecibels(source, zeroReference: zeroReference) } AccelerateTests_vDSPConversion.test("vDSP/AmplitudeToDecibelsDoublePrecision") { let source: [Double] = [1, 10, 100, 2, 4, 8, 16, 101, 27, 13, 11, 44, 0.5, 99, 0.125] let zeroReference = Double(7) let n = source.count var result = [Double](repeating: 0, count: n) vDSP.convert(amplitude: source, toDecibels: &result, zeroReference: zeroReference) var legacyResult = [Double](repeating: -1, count: n) vDSP_vdbconD(source, 1, [zeroReference], &legacyResult, 1, vDSP_Length(n), 1) let returnedResult = vDSP.amplitudeToDecibels(source, zeroReference: zeroReference) } } //===----------------------------------------------------------------------===// // // vDSP complex format conversion // //===----------------------------------------------------------------------===// if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) { AccelerateTests_vDSPConversion.test("vDSP/ComplexFormatConversionSinglePrecision") { var real: [Float] = [4, 5, 6] var imag: [Float] = [1, 2, 3] let src = DSPSplitComplex(realp: &real, imagp: &imag) var dest = [DSPComplex](repeating: DSPComplex(), count: 3) vDSP.convert(splitComplexVector: src, toInterleavedComplexVector: &dest) var realResult: [Float] = [0, 0, 0] var imagResult: [Float] = [0, 0, 0] var result = DSPSplitComplex(realp: &realResult, imagp: &imagResult) vDSP.convert(interleavedComplexVector: dest, toSplitComplexVector: &result) expectTrue(real.elementsEqual(realResult)) expectTrue(imag.elementsEqual(imagResult)) } AccelerateTests_vDSPConversion.test("vDSP/ComplexFormatConversionDoublePrecision") { var real: [Double] = [4, 5, 6] var imag: [Double] = [1, 2, 3] let src = DSPDoubleSplitComplex(realp: &real, imagp: &imag) var dest = [DSPDoubleComplex](repeating: DSPDoubleComplex(), count: 3) vDSP.convert(splitComplexVector: src, toInterleavedComplexVector: &dest) var realResult: [Double] = [0, 0, 0] var imagResult: [Double] = [0, 0, 0] var result = DSPDoubleSplitComplex(realp: &realResult, imagp: &imagResult) vDSP.convert(interleavedComplexVector: dest, toSplitComplexVector: &result) expectTrue(real.elementsEqual(realResult)) expectTrue(imag.elementsEqual(imagResult)) } } runAllTests()