mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* complex.c (nucomp_s_canonicalize_internal): checks exactness of
imag only. * rational.c (nurat_s_convert): accepts non real value (Rational(a,b) as a/b). * complex.c (nucomp_s_convert): refined. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19442 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
280cbe0b1f
commit
72565402d9
5 changed files with 134 additions and 89 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
Sun Sep 21 10:19:04 2008 Tadayoshi Funaba <tadf@dotrb.org>
|
||||
|
||||
* complex.c (nucomp_s_canonicalize_internal): checks exactness of
|
||||
imag only.
|
||||
|
||||
* rational.c (nurat_s_convert): accepts non real value
|
||||
(Rational(a,b) as a/b).
|
||||
|
||||
* complex.c (nucomp_s_convert): refined.
|
||||
|
||||
Sun Sep 21 09:37:57 2008 James Edward Gray II <jeg2@ruby-lang.org>
|
||||
|
||||
* lib/csv/csv.rb: Reworked CSV's parser and generator to be m17n. Data
|
||||
|
|
25
complex.c
25
complex.c
|
@ -336,8 +336,7 @@ nucomp_s_canonicalize_internal(VALUE klass, VALUE real, VALUE imag)
|
|||
{
|
||||
#define CL_CANON
|
||||
#ifdef CL_CANON
|
||||
if (f_zero_p(imag) && f_unify_p(klass) &&
|
||||
k_exact_p(real) && k_exact_p(imag))
|
||||
if (f_zero_p(imag) && k_exact_p(imag) && f_unify_p(klass))
|
||||
return real;
|
||||
#else
|
||||
if (f_zero_p(imag) && f_unify_p(klass))
|
||||
|
@ -657,7 +656,7 @@ nucomp_fdiv(VALUE self, VALUE other)
|
|||
static VALUE
|
||||
nucomp_expt(VALUE self, VALUE other)
|
||||
{
|
||||
if (f_zero_p(other))
|
||||
if (k_exact_p(other) && f_zero_p(other))
|
||||
return f_complex_new_bang1(CLASS_OF(self), ONE);
|
||||
|
||||
if (k_rational_p(other) && f_one_p(f_denominator(other)))
|
||||
|
@ -1225,9 +1224,10 @@ string_to_c(VALUE self)
|
|||
static VALUE
|
||||
nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
|
||||
{
|
||||
int c;
|
||||
VALUE a1, a2, backref;
|
||||
|
||||
rb_scan_args(argc, argv, "02", &a1, &a2);
|
||||
c = rb_scan_args(argc, argv, "02", &a1, &a2);
|
||||
|
||||
backref = rb_backref_get();
|
||||
rb_match_busy(backref);
|
||||
|
@ -1276,14 +1276,21 @@ nucomp_s_convert(int argc, VALUE *argv, VALUE klass)
|
|||
|
||||
switch (TYPE(a1)) {
|
||||
case T_COMPLEX:
|
||||
if (NIL_P(a2) || f_zero_p(a2))
|
||||
if (c == 1 || (k_exact_p(a2) && f_zero_p(a2)))
|
||||
return a1;
|
||||
}
|
||||
|
||||
if ((k_numeric_p(a1) && !f_real_p(a1)) ||
|
||||
(k_numeric_p(a2) && !f_real_p(a2)))
|
||||
return f_add(a1,
|
||||
f_mul(a2, f_complex_new_bang2(rb_cComplex, ZERO, ONE)));
|
||||
if (c == 1) {
|
||||
if (k_numeric_p(a1) && !f_real_p(a1))
|
||||
return a1;
|
||||
}
|
||||
else {
|
||||
if ((k_numeric_p(a1) && k_numeric_p(a2)) &&
|
||||
(!f_real_p(a1) || !f_real_p(a2)))
|
||||
return f_add(a1,
|
||||
f_mul(a2,
|
||||
f_complex_new_bang2(rb_cComplex, ZERO, ONE)));
|
||||
}
|
||||
|
||||
{
|
||||
VALUE argv2[2];
|
||||
|
|
33
rational.c
33
rational.c
|
@ -1400,28 +1400,21 @@ string_to_r(VALUE self)
|
|||
static VALUE
|
||||
nurat_s_convert(int argc, VALUE *argv, VALUE klass)
|
||||
{
|
||||
int c;
|
||||
VALUE a1, a2, backref;
|
||||
|
||||
rb_scan_args(argc, argv, "02", &a1, &a2);
|
||||
c = rb_scan_args(argc, argv, "02", &a1, &a2);
|
||||
|
||||
switch (TYPE(a1)) {
|
||||
case T_COMPLEX:
|
||||
if (k_inexact_p(RCOMPLEX(a1)->imag) || !f_zero_p(RCOMPLEX(a1)->imag)) {
|
||||
VALUE s = f_to_s(a1);
|
||||
rb_raise(rb_eRangeError, "can't accept %s",
|
||||
StringValuePtr(s));
|
||||
}
|
||||
a1 = RCOMPLEX(a1)->real;
|
||||
if (k_exact_p(RCOMPLEX(a1)->imag) && f_zero_p(RCOMPLEX(a1)->imag))
|
||||
a1 = RCOMPLEX(a1)->real;
|
||||
}
|
||||
|
||||
switch (TYPE(a2)) {
|
||||
case T_COMPLEX:
|
||||
if (k_inexact_p(RCOMPLEX(a2)->imag) || !f_zero_p(RCOMPLEX(a2)->imag)) {
|
||||
VALUE s = f_to_s(a2);
|
||||
rb_raise(rb_eRangeError, "can't accept %s",
|
||||
StringValuePtr(s));
|
||||
}
|
||||
a2 = RCOMPLEX(a2)->real;
|
||||
if (k_exact_p(RCOMPLEX(a2)->imag) && f_zero_p(RCOMPLEX(a2)->imag))
|
||||
a2 = RCOMPLEX(a2)->real;
|
||||
}
|
||||
|
||||
backref = rb_backref_get();
|
||||
|
@ -1455,14 +1448,18 @@ nurat_s_convert(int argc, VALUE *argv, VALUE klass)
|
|||
|
||||
switch (TYPE(a1)) {
|
||||
case T_RATIONAL:
|
||||
if (NIL_P(a2) || f_zero_p(a2))
|
||||
if (c == 1 || (k_exact_p(a2) && f_one_p(a2)))
|
||||
return a1;
|
||||
return f_div(a1, a2);
|
||||
}
|
||||
|
||||
switch (TYPE(a2)) {
|
||||
case T_RATIONAL:
|
||||
return f_div(a1, a2);
|
||||
if (c == 1) {
|
||||
if (k_numeric_p(a1) && !f_integer_p(a1))
|
||||
return a1;
|
||||
}
|
||||
else {
|
||||
if ((k_numeric_p(a1) && k_numeric_p(a2)) &&
|
||||
(!f_integer_p(a1) || !f_integer_p(a2)))
|
||||
return f_div(a1, a2);
|
||||
}
|
||||
|
||||
{
|
||||
|
|
|
@ -4,6 +4,14 @@ class ComplexSub < Complex; end
|
|||
|
||||
class Complex_Test < Test::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@rational = defined?(Rational)
|
||||
if @rational
|
||||
@keiju = Rational.instance_variable_get('@RCS_ID')
|
||||
end
|
||||
@unify = defined?(Complex::Unify)
|
||||
end
|
||||
|
||||
def test_compsub
|
||||
c = ComplexSub.__send__(:new, 1)
|
||||
cc = ComplexSub.__send__(:convert, 1)
|
||||
|
@ -11,7 +19,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_kind_of(Numeric, c)
|
||||
assert_kind_of(Numeric, cc)
|
||||
|
||||
if defined?(ComplexSub::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, c)
|
||||
assert_instance_of(Fixnum, cc)
|
||||
else
|
||||
|
@ -42,7 +50,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(true, c.eql?(c2))
|
||||
assert_equal(false, c.eql?(c3))
|
||||
|
||||
if defined?(Complex::Unify)
|
||||
if @unify
|
||||
assert_equal(true, c.eql?(0))
|
||||
else
|
||||
assert_equal(false, c.eql?(0))
|
||||
|
@ -72,7 +80,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
def test_freeze
|
||||
c = Complex(1)
|
||||
c.freeze
|
||||
unless defined?(Complex::Unify)
|
||||
unless @unify
|
||||
assert_equal(true, c.frozen?)
|
||||
end
|
||||
assert_instance_of(String, c.to_s)
|
||||
|
@ -110,7 +118,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
|
||||
def test_new
|
||||
assert_instance_of(Complex, Complex.__send__(:new, 2,0.0))
|
||||
if defined?(Complex::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, Complex.__send__(:new, 2,0))
|
||||
else
|
||||
assert_instance_of(Complex, Complex.__send__(:new, 2,0))
|
||||
|
@ -152,20 +160,24 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(Complex.__send__(:new, -2**32,-2**32), c)
|
||||
assert_equal([-2**32,-2**32], [c.real,c.imag])
|
||||
|
||||
c = Complex(Complex(1),0)
|
||||
assert_equal(Complex.__send__(:new, 1,0), c)
|
||||
c = Complex(Complex(1,2),2)
|
||||
assert_equal(Complex.__send__(:new, 1,4), c)
|
||||
|
||||
c = Complex(0,Complex(1))
|
||||
c = Complex(2,Complex(1,2))
|
||||
assert_equal(Complex.__send__(:new, 0,1), c)
|
||||
|
||||
c = Complex(Complex(1,1),Complex(1))
|
||||
assert_equal(Complex.__send__(:new, 1,2), c)
|
||||
c = Complex(Complex(1,2),Complex(1,2))
|
||||
assert_equal(Complex.__send__(:new, -1,3), c)
|
||||
|
||||
c = Complex::I
|
||||
assert_equal(Complex.__send__(:new, 0,1), c)
|
||||
|
||||
assert_equal(Complex.__send__(:new, 1),Complex(1))
|
||||
assert_equal(Complex.__send__(:new, 1),Complex('1'))
|
||||
assert_equal(Complex.__send__(:new, 3.0,3.0),Complex('3.0','3.0'))
|
||||
if @rational && !@keiju
|
||||
assert_equal(Complex.__send__(:new, 1,1),Complex('3/3','3/3'))
|
||||
end
|
||||
assert_raise(ArgumentError){Complex(nil)}
|
||||
assert_raise(ArgumentError){Complex(Object.new)}
|
||||
assert_raise(ArgumentError){Complex()}
|
||||
|
@ -232,7 +244,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
def test_attr2
|
||||
c = Complex(1)
|
||||
|
||||
if defined?(Complex::Unify)
|
||||
if @unify
|
||||
=begin
|
||||
assert_equal(true, c.finite?)
|
||||
assert_equal(false, c.infinite?)
|
||||
|
@ -345,7 +357,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(Complex(3,2), c + 2)
|
||||
assert_equal(Complex(3.0,2), c + 2.0)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(3,1),Rational(2)), c + Rational(2))
|
||||
assert_equal(Complex(Rational(5,3),Rational(2)), c + Rational(2,3))
|
||||
end
|
||||
|
@ -360,7 +372,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(Complex(-1,2), c - 2)
|
||||
assert_equal(Complex(-1.0,2), c - 2.0)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(-1,1),Rational(2)), c - Rational(2))
|
||||
assert_equal(Complex(Rational(1,3),Rational(2)), c - Rational(2,3))
|
||||
end
|
||||
|
@ -375,7 +387,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(Complex(2,4), c * 2)
|
||||
assert_equal(Complex(2.0,4.0), c * 2.0)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(2,1),Rational(4)), c * Rational(2))
|
||||
assert_equal(Complex(Rational(2,3),Rational(4,3)), c * Rational(2,3))
|
||||
end
|
||||
|
@ -386,7 +398,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
c = Complex(1,2)
|
||||
c2 = Complex(2,3)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(8,13),Rational(1,13)), c / c2)
|
||||
else
|
||||
r = c / c2
|
||||
|
@ -404,14 +416,14 @@ class Complex_Test < Test::Unit::TestCase
|
|||
c = Complex(1,2)
|
||||
c2 = Complex(2,3)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(1,2),1), c / 2)
|
||||
else
|
||||
assert_equal(Complex(0.5,1.0), c / 2)
|
||||
end
|
||||
assert_equal(Complex(0.5,1.0), c / 2.0)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(1,2),Rational(1)), c / Rational(2))
|
||||
assert_equal(Complex(Rational(3,2),Rational(3)), c / Rational(2,3))
|
||||
end
|
||||
|
@ -421,7 +433,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
c = Complex(1,2)
|
||||
c2 = Complex(2,3)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(8,13),Rational(1,13)), c.quo(c2))
|
||||
else
|
||||
r = c.quo(c2)
|
||||
|
@ -439,14 +451,14 @@ class Complex_Test < Test::Unit::TestCase
|
|||
c = Complex(1,2)
|
||||
c2 = Complex(2,3)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(1,2),1), c.quo(2))
|
||||
else
|
||||
assert_equal(Complex(0.5,1.0), c.quo(2))
|
||||
end
|
||||
assert_equal(Complex(0.5,1.0), c.quo(2.0))
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(1,2),Rational(1)), c / Rational(2))
|
||||
assert_equal(Complex(Rational(3,2),Rational(3)), c / Rational(2,3))
|
||||
end
|
||||
|
@ -483,7 +495,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_in_delta(-0.179, r.imag, 0.001)
|
||||
|
||||
assert_equal(Complex(-3,4), c ** 2)
|
||||
if defined?(Rational) && !Rational.instance_variable_get('@RCS_ID')
|
||||
if @rational && !@keiju
|
||||
assert_equal(Complex(Rational(-3,25),Rational(-4,25)), c ** -2)
|
||||
else
|
||||
r = c ** -2
|
||||
|
@ -498,7 +510,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_in_delta(-0.12, r.real, 0.001)
|
||||
assert_in_delta(-0.16, r.imag, 0.001)
|
||||
|
||||
if defined?(Rational) && !Rational.instance_variable_get('@RCS_ID')
|
||||
if @rational && !@keiju
|
||||
assert_equal(Complex(-3,4), c ** Rational(2))
|
||||
#=begin
|
||||
assert_equal(Complex(Rational(-3,25),Rational(-4,25)),
|
||||
|
@ -541,7 +553,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_unify
|
||||
if defined?(Complex::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, Complex(1,2) + Complex(-1,-2))
|
||||
assert_instance_of(Fixnum, Complex(1,2) - Complex(1,2))
|
||||
assert_instance_of(Fixnum, Complex(1,2) * 0)
|
||||
|
@ -602,7 +614,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal('1.0-2.0i', Complex(1.0,-2.0).to_s)
|
||||
assert_equal('-1.0-2.0i', Complex(-1.0,-2.0).to_s)
|
||||
|
||||
if defined?(Rational) && !defined?(Complex::Unify) && !Rational.instance_variable_get('@RCS_ID')
|
||||
if @rational && !@unify && !@keiju
|
||||
assert_equal('0+2/1i', Complex(0,Rational(2)).to_s)
|
||||
assert_equal('0-2/1i', Complex(0,Rational(-2)).to_s)
|
||||
assert_equal('1+2/1i', Complex(1,Rational(2)).to_s)
|
||||
|
@ -638,7 +650,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(9, c2.instance_variable_get(:@ivar))
|
||||
assert_instance_of(Complex, c2)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
c = Complex(Rational(1,2),Rational(2,3))
|
||||
|
||||
s = Marshal.dump(c)
|
||||
|
@ -773,7 +785,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_raise(ArgumentError){ Complex('5+3i_')}
|
||||
assert_raise(ArgumentError){ Complex('5+3ix')}
|
||||
|
||||
if defined?(Rational) && defined?(''.to_r)
|
||||
if @rational && defined?(''.to_r)
|
||||
assert_equal(Complex(Rational(1,5)), '1/5'.to_c)
|
||||
assert_equal(Complex(Rational(-1,5)), '-1/5'.to_c)
|
||||
assert_equal(Complex(Rational(1,5),3), '1/5+3i'.to_c)
|
||||
|
@ -839,11 +851,11 @@ class Complex_Test < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_to_r
|
||||
if defined?(Rational) && !Rational.instance_variable_get('@RCS_ID')
|
||||
if @rational && !@keiju
|
||||
assert_equal(Rational(3), Complex(3).to_r)
|
||||
assert_equal(Rational(3), Rational(Complex(3)))
|
||||
assert_raise(RangeError){Complex(3,2).to_r}
|
||||
assert_raise(RangeError){Rational(Complex(3,2))}
|
||||
# assert_raise(RangeError){Rational(Complex(3,2))}
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -860,7 +872,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
c = 1.1.to_c
|
||||
assert_equal([1.1, 0], [c.real, c.imag])
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
c = Rational(1,2).to_c
|
||||
assert_equal([Rational(1,2), 0], [c.real, c.imag])
|
||||
end
|
||||
|
@ -933,14 +945,14 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(1.1, 1.1.conj)
|
||||
assert_equal(-1.1, -1.1.conj)
|
||||
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(Rational(1,2),Rational(1)), Complex(1,2).quo(2))
|
||||
else
|
||||
assert_equal(Complex(0.5,1.0), Complex(1,2).quo(2))
|
||||
end
|
||||
|
||||
=begin
|
||||
if defined?(Rational) && !Rational.instance_variable_get('@RCS_ID')
|
||||
if @rational && !@keiju
|
||||
assert_equal(Complex(Rational(1,2),Rational(1)), Complex(1,2).quo(2))
|
||||
end
|
||||
=end
|
||||
|
@ -948,7 +960,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
assert_equal(0.5, 1.fdiv(2))
|
||||
assert_equal(5000000000.0, 10000000000.fdiv(2))
|
||||
assert_equal(0.5, 1.0.fdiv(2))
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(0.25, Rational(1,2).fdiv(2))
|
||||
end
|
||||
assert_equal(Complex(0.5,1.0), Complex(1,2).quo(2))
|
||||
|
@ -958,7 +970,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
# assert_equal(true, Math.sqrt(-4.0).inexact?)
|
||||
assert_equal(Complex(0,2), Math.sqrt(-4))
|
||||
# assert_equal(true, Math.sqrt(-4).exact?)
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(0,2), Math.sqrt(Rational(-4)))
|
||||
# assert_equal(true, Math.sqrt(Rational(-4)).exact?)
|
||||
end
|
||||
|
@ -967,7 +979,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
# assert_equal(true, Math.sqrt(-9.0).inexact?)
|
||||
assert_equal(Complex(0,3), Math.sqrt(-9))
|
||||
# assert_equal(true, Math.sqrt(-9).exact?)
|
||||
if defined?(Rational)
|
||||
if @rational
|
||||
assert_equal(Complex(0,3), Math.sqrt(Rational(-9)))
|
||||
# assert_equal(true, Math.sqrt(Rational(-9)).exact?)
|
||||
end
|
||||
|
@ -1070,7 +1082,7 @@ class Complex_Test < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_fixed_bug
|
||||
if defined?(Rational) && !Rational.instance_variable_get('@RCS_ID')
|
||||
if @rational && !@keiju
|
||||
assert_equal(Complex(1), 1 ** Complex(1))
|
||||
end
|
||||
assert_equal('-1.0-0.0i', Complex(-1.0, -0.0).to_s)
|
||||
|
|
|
@ -4,6 +4,14 @@ class RationalSub < Rational; end
|
|||
|
||||
class Rational_Test < Test::Unit::TestCase
|
||||
|
||||
def setup
|
||||
@complex = defined?(Complex)
|
||||
if @complex
|
||||
@keiju = Complex.instance_variable_get('@RCS_ID')
|
||||
end
|
||||
@unify = defined?(Rational::Unify)
|
||||
end
|
||||
|
||||
def test_ratsub
|
||||
c = RationalSub.__send__(:new, 1)
|
||||
cc = RationalSub.__send__(:convert, 1)
|
||||
|
@ -11,7 +19,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_kind_of(Numeric, c)
|
||||
assert_kind_of(Numeric, cc)
|
||||
|
||||
if defined?(RationalSub::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, c)
|
||||
assert_instance_of(Fixnum, cc)
|
||||
else
|
||||
|
@ -41,7 +49,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal(true, c.eql?(c2))
|
||||
assert_equal(false, c.eql?(c3))
|
||||
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
assert_equal(true, c.eql?(0))
|
||||
else
|
||||
assert_equal(false, c.eql?(0))
|
||||
|
@ -67,7 +75,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
def test_freeze
|
||||
c = Rational(1)
|
||||
c.freeze
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_equal(true, c.frozen?)
|
||||
end
|
||||
assert_instance_of(String, c.to_s)
|
||||
|
@ -108,7 +116,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
|
||||
=begin
|
||||
def test_reduce
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, Rational.__send__(:reduce, 2,1))
|
||||
else
|
||||
assert_instance_of(Rational, Rational.__send__(:reduce, 2,1))
|
||||
|
@ -138,7 +146,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
=end
|
||||
|
||||
def test_new
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, Rational.__send__(:new, 2,1))
|
||||
else
|
||||
assert_instance_of(Rational, Rational.__send__(:new, 2,1))
|
||||
|
@ -164,7 +172,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_raise(ArgumentError){Rational.__send__(:new, nil)}
|
||||
=begin
|
||||
assert_raise(ArgumentError){Rational.__send__(:new, Rational(1))}
|
||||
if defined?(Complex)
|
||||
if @complex
|
||||
assert_raise(ArgumentError){Rational.__send__(:new, Complex(1))}
|
||||
end
|
||||
=end
|
||||
|
@ -199,6 +207,17 @@ class Rational_Test < Test::Unit::TestCase
|
|||
c = Rational(Rational(1,2),Rational(1,2))
|
||||
assert_equal(Rational.__send__(:new, 1), c)
|
||||
|
||||
if @complex && !@keiju
|
||||
c = Rational(Complex(1,2),2)
|
||||
assert_equal(Complex.__send__(:new, Rational(1,2),1), c)
|
||||
|
||||
c = Rational(2,Complex(1,2))
|
||||
assert_equal(Complex.__send__(:new, Rational(2,5),Rational(-4,5)), c)
|
||||
|
||||
c = Rational(Complex(1,2),Complex(1,2))
|
||||
assert_equal(Rational.__send__(:new, 1), c)
|
||||
end
|
||||
|
||||
assert_equal(Rational.__send__(:new, 3),Rational(3))
|
||||
assert_equal(Rational.__send__(:new, 1),Rational(3,3))
|
||||
assert_equal(3.3.to_r,Rational(3.3))
|
||||
|
@ -248,7 +267,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
def test_attr2
|
||||
c = Rational(1)
|
||||
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
=begin
|
||||
assert_equal(true, c.finite?)
|
||||
assert_equal(false, c.infinite?)
|
||||
|
@ -408,7 +427,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal(-2, (-c).div(c2))
|
||||
assert_equal(1, (-c).div(-c2))
|
||||
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
c = Rational(11)
|
||||
c2 = Rational(3)
|
||||
|
||||
|
@ -443,7 +462,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal(Rational(99,100), (-c).modulo(c2))
|
||||
assert_equal(Rational(-101,100), (-c).modulo(-c2))
|
||||
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
c = Rational(11)
|
||||
c2 = Rational(3)
|
||||
|
||||
|
@ -478,7 +497,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal([-2, Rational(99,100)], (-c).divmod(c2))
|
||||
assert_equal([1, Rational(-101,100)], (-c).divmod(-c2))
|
||||
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
c = Rational(11)
|
||||
c2 = Rational(3)
|
||||
|
||||
|
@ -514,7 +533,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal(-1, (-c).quot(c2))
|
||||
assert_equal(1, (-c).quot(-c2))
|
||||
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
c = Rational(11)
|
||||
c2 = Rational(3)
|
||||
|
||||
|
@ -550,7 +569,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal(Rational(-101,100), (-c).remainder(c2))
|
||||
assert_equal(Rational(-101,100), (-c).remainder(-c2))
|
||||
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
c = Rational(11)
|
||||
c2 = Rational(3)
|
||||
|
||||
|
@ -586,7 +605,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal([-1, Rational(-101,100)], (-c).quotrem(c2))
|
||||
assert_equal([1, Rational(-101,100)], (-c).quotrem(-c2))
|
||||
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
c = Rational(11)
|
||||
c2 = Rational(3)
|
||||
|
||||
|
@ -643,7 +662,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
# p ** p
|
||||
x = 2 ** Rational(2)
|
||||
assert_equal(Rational(4), x)
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_instance_of(Rational, x)
|
||||
end
|
||||
assert_equal(4, x.numerator)
|
||||
|
@ -651,7 +670,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
|
||||
x = Rational(2) ** 2
|
||||
assert_equal(Rational(4), x)
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_instance_of(Rational, x)
|
||||
end
|
||||
assert_equal(4, x.numerator)
|
||||
|
@ -659,7 +678,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
|
||||
x = Rational(2) ** Rational(2)
|
||||
assert_equal(Rational(4), x)
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_instance_of(Rational, x)
|
||||
end
|
||||
assert_equal(4, x.numerator)
|
||||
|
@ -668,7 +687,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
# -p ** p
|
||||
x = (-2) ** Rational(2)
|
||||
assert_equal(Rational(4), x)
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_instance_of(Rational, x)
|
||||
end
|
||||
assert_equal(4, x.numerator)
|
||||
|
@ -676,7 +695,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
|
||||
x = Rational(-2) ** 2
|
||||
assert_equal(Rational(4), x)
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_instance_of(Rational, x)
|
||||
end
|
||||
assert_equal(4, x.numerator)
|
||||
|
@ -684,7 +703,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
|
||||
x = Rational(-2) ** Rational(2)
|
||||
assert_equal(Rational(4), x)
|
||||
unless defined?(Rational::Unify)
|
||||
unless @unify
|
||||
assert_instance_of(Rational, x)
|
||||
end
|
||||
assert_equal(4, x.numerator)
|
||||
|
@ -728,7 +747,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_equal(1, x.numerator)
|
||||
assert_equal(4, x.denominator)
|
||||
|
||||
unless defined?(Rational::Unify) # maybe bug mathn
|
||||
unless @unify # maybe bug mathn
|
||||
assert_raise(ZeroDivisionError){0 ** -1}
|
||||
end
|
||||
end
|
||||
|
@ -789,7 +808,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_unify
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, Rational(1,2) + Rational(1,2))
|
||||
assert_instance_of(Fixnum, Rational(1,2) - Rational(1,2))
|
||||
assert_instance_of(Fixnum, Rational(1,2) * 2)
|
||||
|
@ -803,7 +822,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
def test_math
|
||||
assert_equal(Rational(1,2), Rational(1,2).abs)
|
||||
assert_equal(Rational(1,2), Rational(-1,2).abs)
|
||||
if defined?(Complex) && !Complex.instance_variable_get('@RCS_ID')
|
||||
if @complex && !@keiju
|
||||
assert_equal(Rational(1,2), Rational(1,2).magnitude)
|
||||
assert_equal(Rational(1,2), Rational(-1,2).magnitude)
|
||||
end
|
||||
|
@ -833,7 +852,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
assert_instance_of(String, c.to_s)
|
||||
assert_equal('1/2', c.to_s)
|
||||
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
assert_equal('0', Rational(0,2).to_s)
|
||||
assert_equal('0', Rational(0,-2).to_s)
|
||||
else
|
||||
|
@ -991,8 +1010,8 @@ class Rational_Test < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_to_c
|
||||
if defined?(Complex) && !Complex.instance_variable_get('@RCS_ID')
|
||||
if defined?(Rational::Unify)
|
||||
if @complex && !@keiju
|
||||
if @unify
|
||||
assert_equal(Rational(3,2), Rational(3,2).to_c)
|
||||
assert_equal(Rational(3,2), Complex(Rational(3,2)))
|
||||
else
|
||||
|
@ -1019,8 +1038,8 @@ class Rational_Test < Test::Unit::TestCase
|
|||
c = Rational(1,2).to_r
|
||||
assert_equal([1,2] , [c.numerator, c.denominator])
|
||||
|
||||
if defined?(Complex)
|
||||
if Complex.instance_variable_get('@RCS_ID')
|
||||
if @complex
|
||||
if @keiju
|
||||
assert_raise(NoMethodError){Complex(1,2).to_r}
|
||||
else
|
||||
assert_raise(RangeError){Complex(1,2).to_r}
|
||||
|
@ -1083,7 +1102,7 @@ class Rational_Test < Test::Unit::TestCase
|
|||
end
|
||||
|
||||
def test_fixed_bug
|
||||
if defined?(Rational::Unify)
|
||||
if @unify
|
||||
assert_instance_of(Fixnum, Rational(1,2) ** 0) # mathn's bug
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue