rational.rb: add test for arithmetic operators.

Tests for (`Float` or `Integer`) `op` `Rational`.
parent 6d890476
...@@ -49,6 +49,16 @@ def assert_cmp(exp, o1, o2) ...@@ -49,6 +49,16 @@ def assert_cmp(exp, o1, o2)
end end
end end
def assert_complex(real, imag)
if Object.const_defined?(:Complex)
assert "assert_complex" do
c = yield
assert_float(real, c.real)
assert_float(imag, c.imaginary)
end
end
end
assert 'Rational' do assert 'Rational' do
r = 5r r = 5r
assert_equal(Rational, r.class) assert_equal(Rational, r.class)
...@@ -89,6 +99,9 @@ assert 'Rational#*' do ...@@ -89,6 +99,9 @@ assert 'Rational#*' do
assert_rational(Rational(1, 1), Rational(-2, 9) * Rational(-9, 2)) assert_rational(Rational(1, 1), Rational(-2, 9) * Rational(-9, 2))
assert_rational(Rational(9, 2), Rational(9, 8) * 4) assert_rational(Rational(9, 2), Rational(9, 8) * 4)
assert_float( 21.77777777777778, Rational(20, 9) * 9.8) assert_float( 21.77777777777778, Rational(20, 9) * 9.8)
assert_float( 21.77777777777778, 9.8 * Rational(20, 9))
assert_complex(5.2, 2.6) {Rational(13,5)*(2.0+1i)}
assert_complex(5.2, 2.6) {(2.0+1i)*Rational(13,5)}
end end
assert 'Rational#+' do assert 'Rational#+' do
...@@ -96,15 +109,22 @@ assert 'Rational#+' do ...@@ -96,15 +109,22 @@ assert 'Rational#+' do
assert_rational(Rational(901, 1), Rational(900) + Rational(1)) assert_rational(Rational(901, 1), Rational(900) + Rational(1))
assert_rational(Rational(-85, 18), Rational(-2, 9) + Rational(-9, 2)) assert_rational(Rational(-85, 18), Rational(-2, 9) + Rational(-9, 2))
assert_rational(Rational(41, 8), Rational(9, 8) + 4) assert_rational(Rational(41, 8), Rational(9, 8) + 4)
assert_rational(Rational(41, 8), 4 + Rational(9, 8))
assert_float( 12.022222222222222, Rational(20, 9) + 9.8) assert_float( 12.022222222222222, Rational(20, 9) + 9.8)
assert_float( 12.022222222222222, 9.8 + Rational(20, 9))
assert_complex(24.0, 0) {Rational(24,2)+(12.0+0i)}
assert_complex(24.0, 0) {(12.0+0i)+Rational(24,2)}
end end
assert 'Rational#-' do assert 'Rational#-' do
assert_rational(Rational(0, 1), Rational(2, 3) - Rational(2, 3)) assert_rational(Rational(0, 1), Rational(2, 3) - Rational(2, 3))
assert_rational(Rational(899, 1), Rational(900) - Rational(1)) assert_rational(Rational(899, 1), Rational(900) - Rational(1))
assert_rational(Rational(77, 18), Rational(-2, 9) - Rational(-9, 2)) assert_rational(Rational(77, 18), Rational(-2, 9) - Rational(-9, 2))
assert_rational(Rational(-23, 8), Rational(9, 8) - 4) assert_rational(Rational(23, 8), 4 - Rational(9, 8))
assert_float( -7.577777777777778, Rational(20, 9) - 9.8) assert_float( -7.577777777777778, Rational(20, 9) - 9.8)
assert_float( 7.577777777777778, 9.8 - Rational(20, 9))
assert_complex(2.0, 0) {Rational(24,2)-(10.0+0i)}
assert_complex(2.0, 0) {(14.0+0i)-Rational(24,2)}
end end
assert 'Rational#/' do assert 'Rational#/' do
...@@ -112,7 +132,11 @@ assert 'Rational#/' do ...@@ -112,7 +132,11 @@ assert 'Rational#/' do
assert_rational(Rational(900, 1), Rational(900) / Rational(1)) assert_rational(Rational(900, 1), Rational(900) / Rational(1))
assert_rational(Rational(4, 81), Rational(-2, 9) / Rational(-9, 2)) assert_rational(Rational(4, 81), Rational(-2, 9) / Rational(-9, 2))
assert_rational(Rational(9, 32), Rational(9, 8) / 4) assert_rational(Rational(9, 32), Rational(9, 8) / 4)
assert_rational(Rational(32, 9), 4 / Rational(9, 8))
assert_float( 0.22675736961451246, Rational(20, 9) / 9.8) assert_float( 0.22675736961451246, Rational(20, 9) / 9.8)
assert_float( 4.41, 9.8 / Rational(20, 9))
assert_complex(1.92, 1.44) {Rational(24,2)/(4.0+3i)}
assert_complex(0.25, 0.25) {(3.0+3i)/Rational(24,2)}
end end
assert 'Rational#==, Rational#!=' do assert 'Rational#==, Rational#!=' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment