aboutsummaryrefslogtreecommitdiffstats
path: root/test/-ext-/float
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-18 00:37:10 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-05-18 00:37:10 +0000
commit63fee735002b34d37598d4830ef35073202dda58 (patch)
treeb6d50c223905f199bdd237b639109d4c0dcde0f1 /test/-ext-/float
parentddd155842fb4fd96a028836d926bae7501cbd985 (diff)
downloadruby-63fee735002b34d37598d4830ef35073202dda58.tar.gz
* configure.in: Check nextafter() availability.
* include/ruby/missing.h (nextafter): New optional declaration. * missing/nextafter.c: New file. * numeric.c: Float#next_float and Float#prev_float implemented. [ruby-core:62562] [Feature #9834] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45982 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/-ext-/float')
-rw-r--r--test/-ext-/float/test_nextafter.rb57
1 files changed, 57 insertions, 0 deletions
diff --git a/test/-ext-/float/test_nextafter.rb b/test/-ext-/float/test_nextafter.rb
new file mode 100644
index 0000000000..e3a3e726c7
--- /dev/null
+++ b/test/-ext-/float/test_nextafter.rb
@@ -0,0 +1,57 @@
+require 'test/unit'
+require "-test-/float"
+
+class TestFloatExt < Test::Unit::TestCase
+ NEXTAFTER_VALUES = [
+ -Float::INFINITY,
+ -Float::MAX,
+ -100.0,
+ -1.0-Float::EPSILON,
+ -1.0,
+ -Float::EPSILON,
+ -Float::MIN/2,
+ -Math.ldexp(0.5, Float::MIN_EXP - Float::MANT_DIG + 1),
+ -0.0,
+ 0.0,
+ Math.ldexp(0.5, Float::MIN_EXP - Float::MANT_DIG + 1),
+ Float::MIN/2,
+ Float::MIN,
+ Float::EPSILON,
+ 1.0,
+ 1.0+Float::EPSILON,
+ 100.0,
+ Float::MAX,
+ Float::INFINITY,
+ Float::NAN
+ ]
+
+ test_number = 0
+ NEXTAFTER_VALUES.each {|n1|
+ NEXTAFTER_VALUES.each {|n2|
+ tag = n2.infinite? ? "ruby" : "other"
+ test_name = "test_nextafter_#{test_number}_#{tag}_#{n1}_#{n2}"
+ test_number += 1
+ define_method(test_name) {
+ v1 = Bug::Float.missing_nextafter(n1, n2)
+ v2 = Bug::Float.system_nextafter(n1, n2)
+ assert_kind_of(Float, v1)
+ assert_kind_of(Float, v2)
+ if v1.nan?
+ assert(v2.nan?, "Bug::Float.system_nextafter(#{n1}, #{n2}).nan?")
+ else
+ assert_equal(v1, v2,
+ "Bug::Float.missing_nextafter(#{'%a' % n1}, #{'%a' % n2}) = #{'%a' % v1} != " +
+ "#{'%a' % v2} = Bug::Float.system_nextafter(#{'%a' % n1}, #{'%a' % n2})")
+ if v1 == 0
+ s1 = 1.0/v1 < 0 ? "negative-zero" : "positive-zero"
+ s2 = 1.0/v2 < 0 ? "negative-zero" : "positive-zero"
+ assert_equal(s1, s2,
+ "Bug::Float.missing_nextafter(#{'%a' % n1}, #{'%a' % n2}) = #{'%a' % v1} != " +
+ "#{'%a' % v2} = Bug::Float.system_nextafter(#{'%a' % n1}, #{'%a' % n2})")
+ end
+ end
+ }
+ }
+ }
+
+end