summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-rational/test/rational.rb
blob: a65926bfb0aa2e943bf16c62c5ddd24487463006 (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
104
105
106
107
108
109
def assert_rational(real, exp)
  assert_float real.numerator,   exp.numerator
  assert_float real.denominator, exp.denominator
end

def assert_equal_rational(exp, r1, r2)
  if exp
    assert_operator(r1, :==, r2)
    assert_not_operator(r1, :!=, r2)
  else
    assert_not_operator(r1, :==, r2)
    assert_operator(r1, :!=, r2)
  end
end

assert 'Rational' do
  r = 5r
  assert_equal Rational, r.class
  assert_equal [r.numerator, r.denominator], [5, 1]
end

assert 'Rational#to_f' do
  assert_float Rational(2).to_f, 2.0
  assert_float Rational(9, 4).to_f, 2.25
  assert_float Rational(-3, 4).to_f, -0.75
  assert_float Rational(20, 3).to_f, 6.666666666666667
end

assert 'Rational#to_i' do
  assert_equal Rational(2, 3).to_i, 0
  assert_equal Rational(3).to_i, 3
  assert_equal Rational(300.6).to_i, 300
  assert_equal Rational(98, 71).to_i, 1
  assert_equal Rational(-30, 2).to_i, -15
end

assert 'Rational#*' do
  assert_rational Rational(2, 3)  * Rational(2, 3),  Rational(4, 9)
  assert_rational Rational(900)   * Rational(1),     Rational(900, 1)
  assert_rational Rational(-2, 9) * Rational(-9, 2), Rational(1, 1)
  assert_rational Rational(9, 8)  * 4,               Rational(9, 2)
  assert_float    Rational(20, 9) * 9.8,             21.77777777777778
end

assert 'Rational#+' do
  assert_rational Rational(2, 3)  + Rational(2, 3),  Rational(4, 3)
  assert_rational Rational(900)   + Rational(1),     Rational(901, 1)
  assert_rational Rational(-2, 9) + Rational(-9, 2), Rational(-85, 18)
  assert_rational Rational(9, 8)  + 4,               Rational(41, 8)
  assert_float    Rational(20, 9) + 9.8,             12.022222222222222
end

assert 'Rational#-' do
  assert_rational Rational(2, 3)  - Rational(2, 3),  Rational(0, 1)
  assert_rational Rational(900)   - Rational(1),     Rational(899, 1)
  assert_rational Rational(-2, 9) - Rational(-9, 2), Rational(77, 18)
  assert_rational Rational(9, 8)  - 4,               Rational(-23, 8)
  assert_float    Rational(20, 9) - 9.8,             -7.577777777777778
end

assert 'Rational#/' do
  assert_rational Rational(2, 3)  / Rational(2, 3),  Rational(1, 1)
  assert_rational Rational(900)   / Rational(1),     Rational(900, 1)
  assert_rational Rational(-2, 9) / Rational(-9, 2), Rational(4, 81)
  assert_rational Rational(9, 8)  / 4,               Rational(9, 32)
  assert_float    Rational(20, 9) / 9.8,             0.22675736961451246
end

assert 'Rational#==, Rational#!=' do
  assert_equal_rational(true, Rational(1,1), Rational(1))
  assert_equal_rational(true, Rational(-1,1), -1r)
  assert_equal_rational(true, Rational(13,4), 3.25)
  assert_equal_rational(true, Rational(13,3.25), Rational(4,1))
  assert_equal_rational(true, Rational(-3,-4), Rational(3,4))
  assert_equal_rational(true, Rational(-4,5), Rational(4,-5))
  assert_equal_rational(true, Rational(4,2), 2)
  assert_equal_rational(true, Rational(-4,2), -2)
  assert_equal_rational(true, Rational(4,-2), -2)
  assert_equal_rational(true, Rational(4,2), 2.0)
  assert_equal_rational(true, Rational(-4,2), -2.0)
  assert_equal_rational(true, Rational(4,-2), -2.0)
  assert_equal_rational(true, Rational(8,6), Rational(4,3))
  assert_equal_rational(false, Rational(13,4), 3)
  assert_equal_rational(false, Rational(13,4), 3.3)
  assert_equal_rational(false, Rational(2,1), 1r)
  assert_equal_rational(false, Rational(1), nil)
  assert_equal_rational(false, Rational(1), '')
end

assert 'Fixnum#==(Rational), Fixnum#!=(Rational)' do
  assert_equal_rational(true, 2, Rational(4,2))
  assert_equal_rational(true, -2, Rational(-4,2))
  assert_equal_rational(true, -2, Rational(4,-2))
  assert_equal_rational(false, 3, Rational(13,4))
end

assert 'Float#==(Rational), Float#!=(Rational)' do
  assert_equal_rational(true, 2.0, Rational(4,2))
  assert_equal_rational(true, -2.0, Rational(-4,2))
  assert_equal_rational(true, -2.0, Rational(4,-2))
  assert_equal_rational(false, 3.3, Rational(13,4))
end

assert 'Rational#negative?' do
  assert_predicate(Rational(-2,3), :negative?)
  assert_predicate(Rational(2,-3), :negative?)
  assert_not_predicate(Rational(2,3), :negative?)
  assert_not_predicate(Rational(0), :negative?)
end