mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
198 lines
6.6 KiB
Swift
198 lines
6.6 KiB
Swift
// RUN: %target-run-simple-swift
|
|
// REQUIRES: executable_test
|
|
|
|
// REQUIRES: rdar50301438
|
|
// REQUIRES: objc_interop
|
|
// UNSUPPORTED: OS=watchos
|
|
|
|
import StdlibUnittest
|
|
import Accelerate
|
|
|
|
var Accelerate_vDSPGeometryTests = TestSuite("Accelerate_vDSPGeometry")
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// vDSP Dot Product
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) {
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/SinglePrecisionDot") {
|
|
let a: [Float] = [ 1.2, 6.7, 0.22334, 101.9, 90.1, 100.999 ]
|
|
let b: [Float] = [99.9, 0.1, 1000.88, 23.99, 27.9, 87.0444]
|
|
|
|
let result = vDSP.dot(a, b)
|
|
|
|
var legacyResult = Float.nan
|
|
|
|
vDSP_dotpr(a, 1,
|
|
b, 1,
|
|
&legacyResult,
|
|
vDSP_Length(a.count))
|
|
|
|
expectEqual(result, legacyResult)
|
|
}
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/DoublePrecisionDot") {
|
|
let a: [Double] = [ 1.2, 6.7, 0.22334, 101.9, 90.1, 100.999 ]
|
|
let b: [Double] = [99.9, 0.1, 1000.88, 23.99, 27.9, 87.0444]
|
|
|
|
let result = vDSP.dot(a, b)
|
|
|
|
var legacyResult = Double.nan
|
|
|
|
vDSP_dotprD(a, 1,
|
|
b, 1,
|
|
&legacyResult,
|
|
vDSP_Length(a.count))
|
|
|
|
expectEqual(result, legacyResult)
|
|
}
|
|
}
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// vDSP Hypotenuse and distance squared
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) {
|
|
|
|
let xlegs = [(1, 2), (4, 5), (2, 1), (1000, 1), (-1055, 55)]
|
|
let ylegs = [(-1000, 2), (4, -50), (-25, -100), (1, 1000), (5, 1)]
|
|
|
|
let pointA = [1, 4, 1, -100, -10, 10, 99]
|
|
let pointB = [901, 14, 61, -1, -10, -1000, 27]
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/SinglePrecisionDist") {
|
|
var distResult = [Float](repeating: 0, count: xlegs.count)
|
|
|
|
let x: [Float] = xlegs.map{ return Float($0.0) - Float($0.1) }
|
|
let y: [Float] = ylegs.map{ return Float($0.0) - Float($0.1) }
|
|
|
|
vDSP.hypot(x, y,
|
|
result: &distResult)
|
|
|
|
var legacyDistResult = [Float](repeating: -1, count: xlegs.count)
|
|
|
|
vDSP_vdist(x, 1,
|
|
y, 1,
|
|
&legacyDistResult, 1,
|
|
vDSP_Length(legacyDistResult.count))
|
|
|
|
let returnedResult = vDSP.hypot(x, y)
|
|
|
|
expectTrue(distResult.elementsEqual(legacyDistResult))
|
|
expectTrue(distResult.elementsEqual(returnedResult))
|
|
}
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/SinglePrecisionPyth") {
|
|
var pythgResult = [Float](repeating: 0, count: xlegs.count)
|
|
|
|
let x0: [Float] = xlegs.map{ return Float($0.0) }
|
|
let x1: [Float] = xlegs.map{ return Float($0.1) }
|
|
let y0: [Float] = ylegs.map{ return Float($0.0) }
|
|
let y1: [Float] = ylegs.map{ return Float($0.1) }
|
|
|
|
vDSP.hypot(x0: x0, x1: x1,
|
|
y0: y0, y1: y1,
|
|
result: &pythgResult)
|
|
|
|
var legacyPythgResult = [Float](repeating: -1, count: xlegs.count)
|
|
|
|
vDSP_vpythg(x0, 1, y0, 1,
|
|
x1, 1, y1, 1,
|
|
&legacyPythgResult, 1,
|
|
vDSP_Length(legacyPythgResult.count))
|
|
|
|
let returnedResult = vDSP.hypot(x0: x0, x1: x1,
|
|
y0: y0, y1: y1)
|
|
|
|
expectTrue(pythgResult.elementsEqual(legacyPythgResult))
|
|
expectTrue(pythgResult.elementsEqual(returnedResult))
|
|
}
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/DoublePrecisionDist") {
|
|
var distResult = [Double](repeating: 0, count: xlegs.count)
|
|
|
|
let x: [Double] = xlegs.map{ return Double($0.0) - Double($0.1) }
|
|
let y: [Double] = ylegs.map{ return Double($0.0) - Double($0.1) }
|
|
|
|
vDSP.hypot(x, y,
|
|
result: &distResult)
|
|
|
|
var legacyDistResult = [Double](repeating: -1, count: xlegs.count)
|
|
|
|
vDSP_vdistD(x, 1,
|
|
y, 1,
|
|
&legacyDistResult, 1,
|
|
vDSP_Length(legacyDistResult.count))
|
|
|
|
let returnedResult = vDSP.hypot(x, y)
|
|
|
|
expectTrue(distResult.elementsEqual(legacyDistResult))
|
|
expectTrue(distResult.elementsEqual(returnedResult))
|
|
}
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/DoublePrecisionPyth") {
|
|
var pythgResult = [Double](repeating: 0, count: xlegs.count)
|
|
|
|
let x0: [Double] = xlegs.map{ return Double($0.0) }
|
|
let x1: [Double] = xlegs.map{ return Double($0.1) }
|
|
let y0: [Double] = ylegs.map{ return Double($0.0) }
|
|
let y1: [Double] = ylegs.map{ return Double($0.1) }
|
|
|
|
vDSP.hypot(x0: x0, x1: x1,
|
|
y0: y0, y1: y1,
|
|
result: &pythgResult)
|
|
|
|
var legacyPythgResult = [Double](repeating: -1, count: xlegs.count)
|
|
|
|
vDSP_vpythgD(x0, 1, y0, 1,
|
|
x1, 1, y1, 1,
|
|
&legacyPythgResult, 1,
|
|
vDSP_Length(legacyPythgResult.count))
|
|
|
|
let returnedResult = vDSP.hypot(x0: x0, x1: x1,
|
|
y0: y0, y1: y1)
|
|
|
|
expectTrue(pythgResult.elementsEqual(legacyPythgResult))
|
|
expectTrue(pythgResult.elementsEqual(returnedResult))
|
|
}
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/SinglePrecisionDistanceSquared") {
|
|
let a = pointA.map{ return Float($0) }
|
|
let b = pointB.map{ return Float($0) }
|
|
|
|
let result = vDSP.distanceSquared(a, b)
|
|
|
|
var legacyResult = Float.nan
|
|
|
|
vDSP_distancesq(a, 1,
|
|
b, 1,
|
|
&legacyResult,
|
|
vDSP_Length(a.count))
|
|
|
|
expectEqual(result, legacyResult)
|
|
}
|
|
|
|
Accelerate_vDSPGeometryTests.test("vDSP/DoublePrecisionDistanceSquared") {
|
|
let a = pointA.map{ return Double($0) }
|
|
let b = pointB.map{ return Double($0) }
|
|
|
|
let result = vDSP.distanceSquared(a, b)
|
|
|
|
var legacyResult = Double.nan
|
|
|
|
vDSP_distancesqD(a, 1,
|
|
b, 1,
|
|
&legacyResult,
|
|
vDSP_Length(a.count))
|
|
|
|
expectEqual(result, legacyResult)
|
|
}
|
|
}
|
|
|
|
runAllTests()
|