aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-17 17:05:31 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-17 17:05:31 +0000
commit7fc9c4a4a0660b05edcfa1f92fef416bc3dcb49d (patch)
tree0ac51273ad261916de64e100abe15d09470c39bf
parent7785612a384d7582dedbf4419917c821ad30ed95 (diff)
downloadruby-7fc9c4a4a0660b05edcfa1f92fef416bc3dcb49d.tar.gz
* numeric.c (flo_cmp): Infinity is greater than any bignum
number. [ruby-dev:38672] * bignum.c (rb_big_cmp): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@23730 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--bignum.c10
-rw-r--r--numeric.c4
-rw-r--r--test/ruby/test_float.rb5
4 files changed, 25 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index a244e1c625..0af30b4672 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Jun 18 01:35:51 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * numeric.c (flo_cmp): Infinity is greater than any bignum
+ number. [ruby-dev:38672]
+
+ * bignum.c (rb_big_cmp): ditto.
+
Thu Jun 18 01:29:16 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* file.c (file_expand_path): drive letter is ascii only.
diff --git a/bignum.c b/bignum.c
index cba4210946..bb6430c19d 100644
--- a/bignum.c
+++ b/bignum.c
@@ -1280,7 +1280,15 @@ rb_big_cmp(VALUE x, VALUE y)
break;
case T_FLOAT:
- return rb_dbl_cmp(rb_big2dbl(x), RFLOAT_VALUE(y));
+ {
+ double a = RFLOAT_VALUE(y);
+
+ if (isinf(a)) {
+ if (a > 0.0) return INT2FIX(-1);
+ else return INT2FIX(1);
+ }
+ return rb_dbl_cmp(rb_big2dbl(x), a);
+ }
default:
return rb_num_coerce_cmp(x, y, rb_intern("<=>"));
diff --git a/numeric.c b/numeric.c
index a4ccd01b5b..74061fc690 100644
--- a/numeric.c
+++ b/numeric.c
@@ -943,6 +943,10 @@ flo_cmp(VALUE x, VALUE y)
break;
case T_BIGNUM:
+ if (isinf(a)) {
+ if (a > 0.0) return INT2FIX(1);
+ else return INT2FIX(-1);
+ }
b = rb_big2dbl(y);
break;
diff --git a/test/ruby/test_float.rb b/test/ruby/test_float.rb
index 96fd354aba..15e17ad92a 100644
--- a/test/ruby/test_float.rb
+++ b/test/ruby/test_float.rb
@@ -215,6 +215,11 @@ class TestFloat < Test::Unit::TestCase
assert_equal(-1, 1.0 <=> 2**32)
+ assert_equal(1, inf <=> (Float::MAX.to_i*2))
+ assert_equal(-1, -inf <=> (-Float::MAX.to_i*2))
+ assert_equal(-1, (Float::MAX.to_i*2) <=> inf)
+ assert_equal(1, (-Float::MAX.to_i*2) <=> -inf)
+
assert_raise(ArgumentError) { 1.0 > nil }
assert_raise(ArgumentError) { 1.0 >= nil }
assert_raise(ArgumentError) { 1.0 < nil }