spec を書くときに float の誤差を無視したりしなかったり
先週気づいていればもっと楽にできたのに。軽くはまったところの解決法はすでに本家ドキュメントにありましたよ。すみません>ボス
context "循環小数 (1 / 3.0) のspecを書く場合" do specify "0.33 に近く、誤差は 0.004 以下であること" do ( 1 / 3.0 ).should_be_close 0.33, 0.004 end end context "浮動小数点の誤差を含む計算への spec を書く場合、0.1を10回足しあわせた値は" do setup do @ret = 0.0 10.times { @ret += 0.1 } end specify "1.0に近く、誤差は0.1以下であること" do @ret.should_be_close 1.0, 0.1 end specify "1.0と*同じ*ではないこと" do @ret.should_not_eql 1.0 @ret.should_not_equal 1.0 end end
:!spec -fs -c /private/tmp/float_spec.rb
循環小数 (1 / 3.0) のspecを書く場合 - 0.33 に近く、誤差は 0.004 以下であること 浮動小数点の誤差を含む計算への spec を書く場合、0.1を10回足しあわせた値は - 1.0に近く、誤差は0.1以下であること - 1.0と*同じ*ではないこと Finished in 0.00174 seconds 3 specifications, 0 failures