summaryrefslogtreecommitdiffhomepage
path: root/test/t/math.rb
blob: 0f42e7d49295379c58304eea2a68ef90518f9c95 (plain)
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
##
# Math Test

MATH_TOLERANCE = 1E-12
def check(a,b)
  a = a.to_f
  b = b.to_f
  if a.finite? and b.finite?
    (a-b).abs < MATH_TOLERANCE
  else
    true
  end
end


assert('Math.sin 0') do
  check(Math.sin(0), 0)
end

assert('Math.sin PI/2') do
  check(Math.sin(Math::PI / 2), 1)
end


assert('Fundamental trig identities') do  
  result = true
  N = 15
  N.times do |i|
    a = Math::PI / N * i
    s = Math.sin(a)
    c = Math.cos(a)
    t = Math.tan(a)
    result &= check(s, Math.cos(Math::PI / 2 - a))
    result &= check(t, 1 / Math.tan(Math::PI / 2 - a))
    result &= check(s ** 2 + c ** 2, 1)
    result &= check(t ** 2 + 1, (1/c) ** 2)
    result &= check((1/t) ** 2 + 1, (1/s) ** 2)
  end
  result
end  

assert('Math.erf 0') do
  check(Math.erf(0), 0)
end

assert('Math.exp 0') do
  check(Math.exp(0), 1.0)
end

assert('Math.exp 1') do
  check(Math.exp(1), 2.718281828459045)
end

assert('Math.exp 1.5') do
  check(Math.exp(1.5), 4.4816890703380645)
end

assert('Math.log 1') do
  check(Math.log(1), 0)
end

assert('Math.log E') do
  check(Math.log(Math::E), 1.0)
end

assert('Math.log E**3') do
  check(Math.log(Math::E**3), 3.0)
end

assert('Math.log2 1') do
  check(Math.log2(1), 0.0)
end

assert('Math.log2 2') do
  check(Math.log2(2), 1.0)
end

assert('Math.log10 1') do
  check(Math.log10(1), 0.0)
end

assert('Math.log10 10') do
  check(Math.log10(10), 1.0)
end

assert('Math.log10 10**100') do
  check(Math.log10(10**100), 100.0)
end

assert('Math.cbrt') do
  num = [-2.0, -1.0, 0.0, 1.0, 2.0]
  cub = [-8, -1, 0, 1, 8]
  result = true
  cub.each_with_index do |v,i|
    result &= check(Math.cbrt(v), num[i])
  end
  result
end

assert('Math.hypot') do
  check(Math.hypot(3, 4), 5.0)
end