diff options
-rw-r--r-- | ChangeLog | 20 | ||||
-rw-r--r-- | ext/bigdecimal/bigdecimal.c | 6 | ||||
-rw-r--r-- | include/ruby/missing.h | 7 | ||||
-rw-r--r-- | numeric.c | 8 | ||||
-rw-r--r-- | test/bigdecimal/test_bigdecimal.rb | 12 | ||||
-rw-r--r-- | version.h | 6 |
6 files changed, 48 insertions, 11 deletions
@@ -1,3 +1,23 @@ +Sun Jun 19 04:29:13 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * include/ruby/missing.h (isfinite): move from numeric.c. + +Sun Jun 19 04:29:13 2016 NAKAMURA Usaku <usa@ruby-lang.org> + + * ext/bigdecimal/bigdecimal.c (isfinite): get rid of a warning on + cygwin. [Bug #12417][ruby-core:75691] + +Sun Jun 19 04:29:13 2016 NAKAMURA Usaku <usa@ruby-lang.org> + + * ext/bigdecimal/bigdecimal.c (isfinite): isfinite does not always + exist. fixed build error on Windows introduced at r55123. + +Sun Jun 19 04:29:13 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * ext/bigdecimal/bigdecimal.c (GetVpValueWithPrec): consider + non-finite float values not to raise FloatDomainError. + [ruby-core:75682] [Bug #12414] + Thu Jun 16 00:42:56 2016 Nobuyoshi Nakada <nobu@ruby-lang.org> * string.c (rb_str_modify_expand): check integer overflow. diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 9125e6b585..3ccad9a508 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -239,6 +239,12 @@ again: if (prec < 0) goto unable_to_coerce_without_prec; if (prec > DBL_DIG+1) goto SomeOneMayDoIt; d = RFLOAT_VALUE(v); + if (!isfinite(d)) { + pv = VpCreateRbObject(prec, NULL); + pv->sign = isnan(d) ? VP_SIGN_NaN : + d > 0 ? VP_SIGN_POSITIVE_INFINITE : VP_SIGN_NEGATIVE_FINITE; + return pv; + } if (d != 0.0) { v = rb_funcall(v, id_to_r, 0); goto again; diff --git a/include/ruby/missing.h b/include/ruby/missing.h index 97091606b0..3474ca256f 100644 --- a/include/ruby/missing.h +++ b/include/ruby/missing.h @@ -174,6 +174,13 @@ RUBY_EXTERN int isnan(double); # endif #endif +#ifndef isfinite +# ifndef HAVE_ISFINITE +# define HAVE_ISFINITE 1 +# define isfinite(x) finite(x) +# endif +#endif + #ifndef HAVE_NEXTAFTER RUBY_EXTERN double nextafter(double x, double y); #endif @@ -28,14 +28,6 @@ #include <ieeefp.h> #endif -#if !defined HAVE_ISFINITE && !defined isfinite -#if defined HAVE_FINITE && !defined finite && !defined _WIN32 -extern int finite(double); -# define HAVE_ISFINITE 1 -# define isfinite(x) finite(x) -#endif -#endif - /* use IEEE 64bit values if not defined */ #ifndef FLT_RADIX #define FLT_RADIX 2 diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index f10c50b47a..4296b50c59 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -459,6 +459,18 @@ class TestBigDecimal < Test::Unit::TestCase assert_equal(false, BigDecimal.new("NaN") > n1) end + def test_cmp_float_nan + assert_equal(nil, BigDecimal.new("1") <=> Float::NAN) + end + + def test_cmp_float_pos_inf + assert_equal(-1, BigDecimal.new("1") <=> Float::INFINITY) + end + + def test_cmp_float_neg_inf + assert_equal(+1, BigDecimal.new("1") <=> -Float::INFINITY) + end + def test_cmp_failing_coercion n1 = BigDecimal.new("1") assert_equal(nil, n1 <=> nil) @@ -1,10 +1,10 @@ #define RUBY_VERSION "2.3.2" -#define RUBY_RELEASE_DATE "2016-06-16" -#define RUBY_PATCHLEVEL 132 +#define RUBY_RELEASE_DATE "2016-06-19" +#define RUBY_PATCHLEVEL 133 #define RUBY_RELEASE_YEAR 2016 #define RUBY_RELEASE_MONTH 6 -#define RUBY_RELEASE_DAY 16 +#define RUBY_RELEASE_DAY 19 #include "ruby/version.h" |