浮動小数点に関するテストコード(Swift)
浮動小数点は実際の小数とは異なり、誤差が生じます。ですので、テストで沼にハマります。
例えば、以下のテストコードは失敗します。
let value = 5.11 - 5.10
XCTAssertEqual(value, 0.01)
value
と0.01
は一致しません。エラーメッセージを眺めると、
XCTAssertEqual failed: ("0.010000000000000675") is not equal to ("0.01")
value
は、0.010000000000000675
になっているようです。コンピュータ上では、浮動小数点の計算には誤差が付きまといます。
そんな時は、XCTAssertEqual(::accuracy:_:file:line:)を利用しましょう。
例を示します。
let value = 5.11 - 5.10
let epsilon = 0.0001
XCTAssertEqual(value, 0.01, accuracy: epsilon)
accuracy
に、許容可能な最大誤差を設定します。今回は0.0001
を設定しました。ですので、テストは通ります。