blob: 66ee215df45c3589ecbc7b1316d072d4a77aa455 [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 Accelerate_vDSPFillClearGenerateTests = TestSuite("Accelerate_vDSPFillClearGenerate")
//===----------------------------------------------------------------------===//
//
// vDSP vector fill, clear, and generation tests
//
//===----------------------------------------------------------------------===//
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) {
let count = 256
let n = vDSP_Length(256)
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionFill") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.fill(&result,
with: 999)
vDSP_vfill([999],
&legacyResult, 1,
n)
expectTrue(result.elementsEqual(legacyResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionClear") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.clear(&result)
vDSP_vclr(&legacyResult, 1,
n)
expectTrue(result.elementsEqual(legacyResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionFill") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.fill(&result,
with: 999)
vDSP_vfillD([999],
&legacyResult, 1,
n)
expectTrue(result.elementsEqual(legacyResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionClear") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.clear(&result)
vDSP_vclrD(&legacyResult, 1,
n)
expectTrue(result.elementsEqual(legacyResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionHanningNormalized") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningNormalized,
result: &result,
isHalfWindow: false)
vDSP_hann_window(&legacyResult,
n,
Int32(vDSP_HANN_NORM))
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .hanningNormalized,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionHanningNormalizedHalf") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningNormalized,
result: &result,
isHalfWindow: true)
vDSP_hann_window(&legacyResult,
n,
Int32(vDSP_HANN_NORM | vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .hanningNormalized,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionHanningDenormalized") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningDenormalized,
result: &result,
isHalfWindow: false)
vDSP_hann_window(&legacyResult,
n,
Int32(vDSP_HANN_DENORM))
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .hanningDenormalized,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionHanningDenormalizedHalf") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningDenormalized,
result: &result,
isHalfWindow: true)
vDSP_hann_window(&legacyResult,
n,
Int32(vDSP_HANN_DENORM | vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .hanningDenormalized,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionHamming") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hamming,
result: &result,
isHalfWindow: false)
vDSP_hamm_window(&legacyResult,
n,
0)
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .hamming,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionHammingHalf") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hamming,
result: &result,
isHalfWindow: true)
vDSP_hamm_window(&legacyResult,
n,
Int32(vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .hamming,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionBlackman") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .blackman,
result: &result,
isHalfWindow: false)
vDSP_blkman_window(&legacyResult,
n,
0)
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .blackman,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionBlackmanHalf") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .blackman,
result: &result,
isHalfWindow: true)
vDSP_blkman_window(&legacyResult,
n,
Int32(vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Float.self,
usingSequence: .blackman,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionHanningNormalized") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningNormalized,
result: &result,
isHalfWindow: false)
vDSP_hann_windowD(&legacyResult,
n,
Int32(vDSP_HANN_NORM))
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .hanningNormalized,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionHanningNormalizedHalf") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningNormalized,
result: &result,
isHalfWindow: true)
vDSP_hann_windowD(&legacyResult,
n,
Int32(vDSP_HANN_NORM | vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .hanningNormalized,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionHanningDenormalized") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningDenormalized,
result: &result,
isHalfWindow: false)
vDSP_hann_windowD(&legacyResult,
n,
Int32(vDSP_HANN_DENORM))
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .hanningDenormalized,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionHanningDenormalizedHalf") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hanningDenormalized,
result: &result,
isHalfWindow: true)
vDSP_hann_windowD(&legacyResult,
n,
Int32(vDSP_HANN_DENORM | vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .hanningDenormalized,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionHamming") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hamming,
result: &result,
isHalfWindow: false)
vDSP_hamm_windowD(&legacyResult,
n,
0)
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .hamming,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionHammingHalf") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .hamming,
result: &result,
isHalfWindow: true)
vDSP_hamm_windowD(&legacyResult,
n,
Int32(vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .hamming,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionBlackman") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .blackman,
result: &result,
isHalfWindow: false)
vDSP_blkman_windowD(&legacyResult,
n,
0)
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .blackman,
count: count,
isHalfWindow: false)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionBlackmanHalf") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formWindow(usingSequence: .blackman,
result: &result,
isHalfWindow: true)
vDSP_blkman_windowD(&legacyResult,
n,
Int32(vDSP_HALF_WINDOW))
let returnedResult = vDSP.window(ofType: Double.self,
usingSequence: .blackman,
count: count,
isHalfWindow: true)
expectTrue(result[0 ..< count / 2].elementsEqual(legacyResult[0 ..< count / 2]))
expectTrue(result[0 ..< count / 2].elementsEqual(returnedResult[0 ..< count / 2]))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionWithRange") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formRamp(in: 0 ... 100,
result: &result)
vDSP_vgen([0],
[100],
&legacyResult, 1,
n)
let returnedResult = vDSP.ramp(in: Float(0) ... Float(100),
count: count)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionRampWithIncrement") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
vDSP.formRamp(withInitialValue: 0,
increment: 0.1,
result: &result)
vDSP_vramp([0],
[0.1],
&legacyResult, 1,
n)
let returnedResult = vDSP.ramp(withInitialValue: Float(0),
increment: Float(0.1),
count: count)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/SinglePrecisionRampWithMultiplier") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
let multiplier = (0 ..< n).map{ i in
return sin(Float(i) * 0.05)
}
var start = Float(10)
vDSP.formRamp(withInitialValue: &start,
multiplyingBy: multiplier,
increment: 1,
result: &result)
var legacyStart = Float(10)
vDSP_vrampmul(multiplier, 1,
&legacyStart,
[1],
&legacyResult, 1,
n)
var start2 = Float(10)
let returnedResult = vDSP.ramp(withInitialValue: &start2,
multiplyingBy: multiplier,
increment: 1)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
expectEqual(start, legacyStart)
expectEqual(start, start2)
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/StereoSinglePrecisionRampWithMultiplier") {
var result = [Float](repeating: 1, count: count)
var legacyResult = [Float](repeating: -1, count: count)
let multiplierOne = (0 ..< n).map{ i in
return sin(Float(i) * 0.05)
}
let multiplierTwo = (0 ..< n).map{ i in
return sin(Float(i) * 0.0125)
}
var start = Float(10)
var resultTwo = [Float](repeating: 2, count: result.count)
vDSP.formStereoRamp(withInitialValue: &start,
multiplyingBy: multiplierOne, multiplierTwo,
increment: 1,
results: &result, &resultTwo)
var legacyStart = Float(10)
var legacyResultTwo = [Float](repeating: -2, count: legacyResult.count)
vDSP_vrampmul2(multiplierOne, multiplierTwo, 1,
&legacyStart,
[1],
&legacyResult, &legacyResultTwo, 1,
n)
var start2 = Float(10)
let returnedResult = vDSP.stereoRamp(withInitialValue: &start2,
multiplyingBy: multiplierOne, multiplierTwo,
increment: 1)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(resultTwo.elementsEqual(legacyResultTwo))
expectEqual(start, legacyStart)
expectTrue(result.elementsEqual(returnedResult.firstOutput))
expectTrue(resultTwo.elementsEqual(returnedResult.secondOutput))
expectEqual(start, start2)
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionRampWithRange") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formRamp(in: 0 ... 100,
result: &result)
vDSP_vgenD([0],
[100],
&legacyResult, 1,
n)
let returnedResult = vDSP.ramp(in: Double(0) ... Double(100),
count: count)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionRampWithRange") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
vDSP.formRamp(withInitialValue: 0,
increment: 0.1,
result: &result)
vDSP_vrampD([0],
[0.1],
&legacyResult, 1,
n)
let returnedResult = vDSP.ramp(withInitialValue: 0,
increment: 0.1,
count: count)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/DoublePrecisionRampWithMultiplier") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
let multiplier = (0 ..< n).map{ i in
return sin(Double(i) * 0.05)
}
var start = Double(10)
vDSP.formRamp(withInitialValue: &start,
multiplyingBy: multiplier,
increment: 1,
result: &result)
var legacyStart = Double(10)
vDSP_vrampmulD(multiplier, 1,
&legacyStart,
[1],
&legacyResult, 1,
n)
var start2 = Double(10)
let returnedResult = vDSP.ramp(withInitialValue: &start2,
multiplyingBy: multiplier,
increment: 1)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(result.elementsEqual(returnedResult))
expectEqual(start, legacyStart)
expectEqual(start, start2)
}
Accelerate_vDSPFillClearGenerateTests.test("vDSP/StereoDoublePrecisionRampWithMultiplier") {
var result = [Double](repeating: 1, count: count)
var legacyResult = [Double](repeating: -1, count: count)
let multiplierOne = (0 ..< n).map{ i in
return sin(Double(i) * 0.05)
}
let multiplierTwo = (0 ..< n).map{ i in
return sin(Double(i) * 0.0125)
}
var start = Double(10)
var resultTwo = [Double](repeating: 2, count: result.count)
vDSP.formStereoRamp(withInitialValue: &start,
multiplyingBy: multiplierOne, multiplierTwo,
increment: 1,
results: &result, &resultTwo)
var legacyStart = Double(10)
var legacyResultTwo = [Double](repeating: -2, count: legacyResult.count)
vDSP_vrampmul2D(multiplierOne, multiplierTwo, 1,
&legacyStart,
[1],
&legacyResult, &legacyResultTwo, 1,
n)
var start2 = Double(10)
let returnedResult = vDSP.stereoRamp(withInitialValue: &start2,
multiplyingBy: multiplierOne, multiplierTwo,
increment: 1)
expectTrue(result.elementsEqual(legacyResult))
expectTrue(resultTwo.elementsEqual(legacyResultTwo))
expectEqual(start, legacyStart)
expectTrue(result.elementsEqual(returnedResult.firstOutput))
expectTrue(resultTwo.elementsEqual(returnedResult.secondOutput))
expectEqual(start, start2)
}
}
runAllTests()