1require_relative "testbase" 2require "bigdecimal/math" 3 4class TestBigMath < Test::Unit::TestCase 5 include TestBigDecimalBase 6 include BigMath 7 N = 20 8 PINF = BigDecimal("+Infinity") 9 MINF = BigDecimal("-Infinity") 10 NAN = BigDecimal("NaN") 11 12 def test_const 13 assert_in_delta(Math::PI, PI(N)) 14 assert_in_delta(Math::E, E(N)) 15 end 16 17 def test_sqrt 18 assert_in_delta(2**0.5, sqrt(BigDecimal("2"), N)) 19 assert_equal(10, sqrt(BigDecimal("100"), N)) 20 assert_equal(0.0, sqrt(BigDecimal("0"), N)) 21 assert_equal(0.0, sqrt(BigDecimal("-0"), N)) 22 assert_raise(FloatDomainError) {sqrt(BigDecimal("-1.0"), N)} 23 assert_raise(FloatDomainError) {sqrt(NAN, N)} 24 assert_raise(FloatDomainError) {sqrt(PINF, N)} 25 end 26 27 def test_sin 28 assert_in_delta(0.0, sin(BigDecimal("0.0"), N)) 29 assert_in_delta(Math.sqrt(2.0) / 2, sin(PI(N) / 4, N)) 30 assert_in_delta(1.0, sin(PI(N) / 2, N)) 31 assert_in_delta(0.0, sin(PI(N) * 2, N)) 32 assert_in_delta(0.0, sin(PI(N), N)) 33 assert_in_delta(-1.0, sin(PI(N) / -2, N)) 34 assert_in_delta(0.0, sin(PI(N) * -2, N)) 35 assert_in_delta(0.0, sin(-PI(N), N)) 36 assert_in_delta(0.0, sin(PI(N) * 21, N)) 37 assert_in_delta(0.0, sin(PI(N) * 30, N)) 38 assert_in_delta(-1.0, sin(PI(N) * BigDecimal("301.5"), N)) 39 end 40 41 def test_cos 42 assert_in_delta(1.0, cos(BigDecimal("0.0"), N)) 43 assert_in_delta(Math.sqrt(2.0) / 2, cos(PI(N) / 4, N)) 44 assert_in_delta(0.0, cos(PI(N) / 2, N)) 45 assert_in_delta(1.0, cos(PI(N) * 2, N)) 46 assert_in_delta(-1.0, cos(PI(N), N)) 47 assert_in_delta(0.0, cos(PI(N) / -2, N)) 48 assert_in_delta(1.0, cos(PI(N) * -2, N)) 49 assert_in_delta(-1.0, cos(-PI(N), N)) 50 assert_in_delta(-1.0, cos(PI(N) * 21, N)) 51 assert_in_delta(1.0, cos(PI(N) * 30, N)) 52 assert_in_delta(0.0, cos(PI(N) * BigDecimal("301.5"), N)) 53 end 54 55 def test_atan 56 assert_equal(0.0, atan(BigDecimal("0.0"), N)) 57 assert_in_delta(Math::PI/4, atan(BigDecimal("1.0"), N)) 58 assert_in_delta(Math::PI/6, atan(sqrt(BigDecimal("3.0"), N) / 3, N)) 59 assert_in_delta(Math::PI/2, atan(PINF, N)) 60 assert_equal(BigDecimal("0.823840753418636291769355073102514088959345624027952954058347023122539489"), 61 atan(BigDecimal("1.08"), 72).round(72), '[ruby-dev:41257]') 62 end 63end 64