1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
|
//===--- ApproximateEqualityTests.swift -----------------------*- swift -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2020 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
import Numerics
import XCTest
final class ApproximateEqualityTests: XCTestCase {
func testSpecials<T: Real>(absolute tol: T) {
let zero = Complex<T>.zero
let inf = Complex<T>.infinity
XCTAssertTrue(zero.isApproximatelyEqual(to: zero, absoluteTolerance: tol))
XCTAssertTrue(zero.isApproximatelyEqual(to:-zero, absoluteTolerance: tol))
XCTAssertTrue((-zero).isApproximatelyEqual(to: zero, absoluteTolerance: tol))
XCTAssertTrue((-zero).isApproximatelyEqual(to:-zero, absoluteTolerance: tol))
// Complex has a single point at infinity.
XCTAssertTrue(inf.isApproximatelyEqual(to: inf, absoluteTolerance: tol))
XCTAssertTrue(inf.isApproximatelyEqual(to:-inf, absoluteTolerance: tol))
XCTAssertTrue((-inf).isApproximatelyEqual(to: inf, absoluteTolerance: tol))
XCTAssertTrue((-inf).isApproximatelyEqual(to:-inf, absoluteTolerance: tol))
}
func testSpecials<T: Real>(relative tol: T) {
let zero = Complex<T>.zero
let inf = Complex<T>.infinity
XCTAssertTrue(zero.isApproximatelyEqual(to: zero, relativeTolerance: tol))
XCTAssertTrue(zero.isApproximatelyEqual(to:-zero, relativeTolerance: tol))
XCTAssertTrue((-zero).isApproximatelyEqual(to: zero, relativeTolerance: tol))
XCTAssertTrue((-zero).isApproximatelyEqual(to:-zero, relativeTolerance: tol))
// Complex has a single point at infinity.
XCTAssertTrue(inf.isApproximatelyEqual(to: inf, relativeTolerance: tol))
XCTAssertTrue(inf.isApproximatelyEqual(to:-inf, relativeTolerance: tol))
XCTAssertTrue((-inf).isApproximatelyEqual(to: inf, relativeTolerance: tol))
XCTAssertTrue((-inf).isApproximatelyEqual(to:-inf, relativeTolerance: tol))
}
func testSpecials<T: Real>(_ type: T.Type) {
XCTAssertTrue(Complex<T>.zero.isApproximatelyEqual(to: .zero))
XCTAssertTrue(Complex<T>.zero.isApproximatelyEqual(to:-.zero))
testSpecials(absolute: T.zero)
testSpecials(absolute: T.greatestFiniteMagnitude)
testSpecials(relative: T.ulpOfOne)
testSpecials(relative: T(1))
}
func testFloat() {
testSpecials(Float.self)
}
func testDouble() {
testSpecials(Double.self)
}
#if (arch(i386) || arch(x86_64)) && !os(Windows) && !os(Android)
func testFloat80() {
testSpecials(Float80.self)
}
#endif
}
|