@@ -825,26 +825,41 @@ def test_json_generate_as_json_convert_to_proc
825825 assert_equal object . object_id . to_json , JSON . generate ( object , strict : true , as_json : :object_id )
826826 end
827827
828- def test_json_generate_float
829- values = [ -1.0 , 1.0 , 0.0 , 12.2 , 7.5 / 3.2 , 12.0 , 100.0 , 1000.0 ]
830- expecteds = [ "-1.0" , "1.0" , "0.0" , "12.2" , "2.34375" , "12.0" , "100.0" , "1000.0" ]
831-
832- if RUBY_ENGINE == "jruby"
833- values << 1746861937.7842371
834- expecteds << "1.7468619377842371E9"
835- else
836- values << 1746861937.7842371
837- expecteds << "1746861937.7842371"
838- end
839-
840- if RUBY_ENGINE == "ruby"
841- values << -2.2471348024634545e-08 << -2.2471348024634545e-09 << -2.2471348024634545e-10
842- expecteds << "-0.000000022471348024634545" << "-0.0000000022471348024634545" << "-2.2471348024634546e-10"
843- end
828+ def assert_float_roundtrip ( expected , actual )
829+ assert_equal ( expected , JSON . generate ( actual ) )
830+ assert_equal ( actual , JSON . parse ( JSON . generate ( actual ) ) , "JSON: #{ JSON . generate ( actual ) } " )
831+ end
844832
845- values . zip ( expecteds ) . each do |value , expected |
846- assert_equal expected , value . to_json
847- end
833+ def test_json_generate_float
834+ assert_float_roundtrip "-1.0" , -1.0
835+ assert_float_roundtrip "1.0" , 1.0
836+ assert_float_roundtrip "0.0" , 0.0
837+ assert_float_roundtrip "12.2" , 12.2
838+ assert_float_roundtrip "2.34375" , 7.5 / 3.2
839+ assert_float_roundtrip "12.0" , 12.0
840+ assert_float_roundtrip "100.0" , 100.0
841+ assert_float_roundtrip "1000.0" , 1000.0
842+
843+ if RUBY_ENGINE == "jruby"
844+ assert_float_roundtrip "1.7468619377842371E9" , 1746861937.7842371
845+ else
846+ assert_float_roundtrip "1746861937.7842371" , 1746861937.7842371
847+ end
848+
849+ if RUBY_ENGINE == "ruby"
850+ assert_float_roundtrip "100000000000000.0" , 100000000000000.0
851+ assert_float_roundtrip "1e+15" , 1e+15
852+ assert_float_roundtrip "-100000000000000.0" , -100000000000000.0
853+ assert_float_roundtrip "-1e+15" , -1e+15
854+ assert_float_roundtrip "1111111111111111.1" , 1111111111111111.1
855+ assert_float_roundtrip "1.1111111111111112e+16" , 11111111111111111.1
856+ assert_float_roundtrip "-1111111111111111.1" , -1111111111111111.1
857+ assert_float_roundtrip "-1.1111111111111112e+16" , -11111111111111111.1
858+
859+ assert_float_roundtrip "-0.000000022471348024634545" , -2.2471348024634545e-08
860+ assert_float_roundtrip "-0.0000000022471348024634545" , -2.2471348024634545e-09
861+ assert_float_roundtrip "-2.2471348024634546e-10" , -2.2471348024634545e-10
862+ end
848863 end
849864
850865 def test_numbers_of_various_sizes
0 commit comments