From 0776e3f4d4adb054e3a0ef1f7af40ed36df48167 Mon Sep 17 00:00:00 2001 From: yugui Date: Sun, 21 Jun 2009 10:34:46 +0000 Subject: merges r23730 from trunk into ruby_1_9_1. -- * numeric.c (flo_cmp): Infinity is greater than any bignum number. [ruby-dev:38672] * bignum.c (rb_big_cmp): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_9_1@23798 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 7 +++++++ bignum.c | 10 +++++++++- numeric.c | 4 ++++ test/ruby/test_float.rb | 5 +++++ version.h | 2 +- 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index d9833f846..2531d224c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Jun 18 01:35:51 2009 Yukihiro Matsumoto + + * 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 * file.c (file_expand_path): drive letter is ascii only. diff --git a/bignum.c b/bignum.c index eb021b801..0d7fe2bcd 100644 --- a/bignum.c +++ b/bignum.c @@ -1260,7 +1260,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 4fe06d2d4..9c32c92f4 100644 --- a/numeric.c +++ b/numeric.c @@ -932,6 +932,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 feef52ccc..c46170455 100644 --- a/test/ruby/test_float.rb +++ b/test/ruby/test_float.rb @@ -217,6 +217,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 } diff --git a/version.h b/version.h index 38ebbf3d9..4969b88ec 100644 --- a/version.h +++ b/version.h @@ -1,6 +1,6 @@ #define RUBY_VERSION "1.9.1" #define RUBY_RELEASE_DATE "2009-05-22" -#define RUBY_PATCHLEVEL 188 +#define RUBY_PATCHLEVEL 189 #define RUBY_VERSION_MAJOR 1 #define RUBY_VERSION_MINOR 9 #define RUBY_VERSION_TEENY 1 -- cgit