Update tests for exponentiation operator

This commit is contained in:
Xiaodi Wu 2017-08-27 00:31:00 -05:00
parent a4a9ac7368
commit 743e0d86e3
3 changed files with 32 additions and 29 deletions

View File

@ -1579,7 +1579,7 @@ class ComplexTests : XCTestCase {
XCTAssertEqual(b.real, 42, accuracy: 0.00000000000001) XCTAssertEqual(b.real, 42, accuracy: 0.00000000000001)
let i: Complex128 = .i let i: Complex128 = .i
let actual = Complex.pow(i, i) let actual = i ** i
XCTAssertEqual(actual.real, Double.exp(-Double.pi / 2)) XCTAssertEqual(actual.real, Double.exp(-Double.pi / 2))
XCTAssertEqual(actual.imaginary, 0) XCTAssertEqual(actual.imaginary, 0)
@ -1813,7 +1813,7 @@ class ComplexTests : XCTestCase {
let g: Complex128 = 1 + .i let g: Complex128 = 1 + .i
let h: Complex128 = let h: Complex128 =
Complex.log(g + Complex.pow(-1, 1 / 4) * Complex.sqrt(2 + .i)) Complex.log(g + (-1 ** (1 / 4)) * Complex.sqrt(2 + .i))
XCTAssertEqual(Complex.acosh(g).real, h.real) XCTAssertEqual(Complex.acosh(g).real, h.real)
XCTAssertEqual(Complex.acosh(g).imaginary, h.imaginary) XCTAssertEqual(Complex.acosh(g).imaginary, h.imaginary)

View File

@ -6,13 +6,12 @@ class ExponentiationTests : XCTestCase {
for i in -21...21 { for i in -21...21 {
for j in -7...7 { for j in -7...7 {
if i == 0 && j < 0 { if i == 0 && j < 0 {
// In this case, Int.pow(i, j) causes a division-by-zero error. // In this case, i ** j causes a division-by-zero error.
// Likewise, Double.pow(Double(i), Double(j)) also causes the same // Likewise, Double(i) ** Double(j) also causes the same error.
// error.
continue continue
} }
let actual = Int.pow(i, j) let actual = i ** j
let expected = Int(Double.pow(Double(i), Double(j))) let expected = Int(Double(i) ** Double(j))
XCTAssertEqual(actual, expected) XCTAssertEqual(actual, expected)
} }
} }
@ -21,8 +20,8 @@ class ExponentiationTests : XCTestCase {
func testUIntPow() { func testUIntPow() {
for i in (0 as UInt)...21 { for i in (0 as UInt)...21 {
for j in (0 as UInt)...7 { for j in (0 as UInt)...7 {
let actual = UInt.pow(i, j) let actual = i ** j
let expected = UInt(Double.pow(Double(i), Double(j))) let expected = UInt(Double(i) ** Double(j))
XCTAssertEqual(actual, expected) XCTAssertEqual(actual, expected)
} }
} }

View File

@ -241,8 +241,12 @@ extension MockReal : FloatingPoint {
} }
extension MockReal : Real { extension MockReal : Real {
static func pow(_ base: MockReal, _ exponent: MockReal) -> MockReal { static func ** (lhs: MockReal, rhs: MockReal) -> MockReal {
return MockReal(Double.pow(base._value, exponent._value)) return MockReal(lhs._value ** rhs._value)
}
static func **= (lhs: inout MockReal, rhs: MockReal) {
lhs = lhs ** rhs
} }
func naturalExponential() -> MockReal { func naturalExponential() -> MockReal {
@ -469,15 +473,15 @@ class RealTests: XCTestCase {
} }
func testFloat() { func testFloat() {
XCTAssertEqual(Float.pow(-2, -3), -0.125) XCTAssertEqual(((-2 as Float) ** -3), -0.125)
XCTAssertTrue(Float.pow(0, 42).isZero) XCTAssertTrue(((0 as Float) ** 42).isZero)
XCTAssertTrue(Float.pow(0, 42).sign == .plus) XCTAssertTrue(((0 as Float) ** 42).sign == .plus)
XCTAssertTrue(Float.pow(-0.0, 42).isZero) XCTAssertTrue(((-0.0 as Float) ** 42).isZero)
XCTAssertTrue(Float.pow(-0.0, 42).sign == .plus) XCTAssertTrue(((-0.0 as Float) ** 42).sign == .plus)
XCTAssertTrue(Float.pow(0, 43).isZero) XCTAssertTrue(((0 as Float) ** 43).isZero)
XCTAssertTrue(Float.pow(0, 43).sign == .plus) XCTAssertTrue(((0 as Float) ** 43).sign == .plus)
XCTAssertTrue(Float.pow(-0.0, 43).isZero) XCTAssertTrue(((-0.0 as Float) ** 43).isZero)
XCTAssertTrue(Float.pow(-0.0, 43).sign == .minus) XCTAssertTrue(((-0.0 as Float) ** 43).sign == .minus)
XCTAssertEqual(Float.cbrt(64), 4) XCTAssertEqual(Float.cbrt(64), 4)
XCTAssertEqual(Float.cbrt(-64), -4) XCTAssertEqual(Float.cbrt(-64), -4)
@ -606,15 +610,15 @@ class RealTests: XCTestCase {
} }
func testDouble() { func testDouble() {
XCTAssertEqual(Double.pow(-2, -3), -0.125) XCTAssertEqual(((-2 as Double) ** -3), -0.125)
XCTAssertTrue(Double.pow(0, 42).isZero) XCTAssertTrue(((0 as Double) ** 42).isZero)
XCTAssertTrue(Double.pow(0, 42).sign == .plus) XCTAssertTrue(((0 as Double) ** 42).sign == .plus)
XCTAssertTrue(Double.pow(-0.0, 42).isZero) XCTAssertTrue(((-0.0 as Double) ** 42).isZero)
XCTAssertTrue(Double.pow(-0.0, 42).sign == .plus) XCTAssertTrue(((-0.0 as Double) ** 42).sign == .plus)
XCTAssertTrue(Double.pow(0, 43).isZero) XCTAssertTrue(((0 as Double) ** 43).isZero)
XCTAssertTrue(Double.pow(0, 43).sign == .plus) XCTAssertTrue(((0 as Double) ** 43).sign == .plus)
XCTAssertTrue(Double.pow(-0.0, 43).isZero) XCTAssertTrue(((-0.0 as Double) ** 43).isZero)
XCTAssertTrue(Double.pow(-0.0, 43).sign == .minus) XCTAssertTrue(((-0.0 as Double) ** 43).sign == .minus)
XCTAssertEqual(Double.cbrt(64), 4) XCTAssertEqual(Double.cbrt(64), 4)
XCTAssertEqual(Double.cbrt(-64), -4) XCTAssertEqual(Double.cbrt(-64), -4)