From 230b845fa218a9c22013e752efc5d01943831159 Mon Sep 17 00:00:00 2001 From: nobu Date: Sun, 14 Sep 2014 23:13:36 +0000 Subject: sprintf.c: improve rational 'f' format * sprintf.c (rb_str_format): rational 'f' format works for more values. [fix GH-717] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47588 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_sprintf.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'test/ruby/test_sprintf.rb') diff --git a/test/ruby/test_sprintf.rb b/test/ruby/test_sprintf.rb index 0b6bfb0c08..9292155c6b 100644 --- a/test/ruby/test_sprintf.rb +++ b/test/ruby/test_sprintf.rb @@ -150,8 +150,22 @@ class TestSprintf < Test::Unit::TestCase def test_rational assert_match(/\A0\.10+\z/, sprintf("%.60f", 0.1r)) + assert_match(/\A0\.010+\z/, sprintf("%.60f", 0.01r)) + assert_match(/\A0\.0010+\z/, sprintf("%.60f", 0.001r)) assert_match(/\A0\.3+\z/, sprintf("%.60f", 1/3r)) assert_match(/\A1\.20+\z/, sprintf("%.60f", 1.2r)) + + 0.upto(9) do |len| + -1.upto(9) do |prec| + ['', '+', '-', ' ', '0', '+0', '-0', ' 0', '+ ', '- ', '+ 0', '- 0'].each do |flags| + fmt = "%#{flags}#{len > 0 ? len : ''}#{prec >= 0 ? ".#{prec}" : ''}f" + [0, 0.1, 0.01, 0.001, 1.001, 100.0, 100.001, 10000000000.0, 0.00000000001, 1/3r, 2/3r, 1.2r, 10r].each do |num| + assert_equal(sprintf(fmt, num.to_f), sprintf(fmt, num.to_r), "sprintf(#{fmt.inspect}, #{num.inspect}.to_r)") + assert_equal(sprintf(fmt, -num.to_f), sprintf(fmt, -num.to_r), "sprintf(#{fmt.inspect}, #{(-num).inspect}.to_r)") if num > 0 + end + end + end + end end def test_hash -- cgit v1.2.3