blob: f337322184381ee4de28b72ecf0674efc2f6160a [file] [log] [blame] [edit]
// 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()