diff options
author | Timothee Cour <timothee.cour2@gmail.com> | 2021-05-23 14:06:14 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-23 23:06:14 +0200 |
commit | d217888e5679aff063668930bd00892c4f5cb2b3 (patch) | |
tree | ca4ce94abcd4c75dd04576718fc3ea83b7be59bc /tests/stdlib | |
parent | 1421a3bf265e45cea7c26dcaf3be148ea02db5f0 (diff) | |
download | Nim-d217888e5679aff063668930bd00892c4f5cb2b3.tar.gz |
close #18009 parseJson JInt vs JFloat; preserve -0.0 as JFloat to distinguish from 0.0 (#18067)
Diffstat (limited to 'tests/stdlib')
-rw-r--r-- | tests/stdlib/tjsonutils.nim | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/tests/stdlib/tjsonutils.nim b/tests/stdlib/tjsonutils.nim index a55b0ca1d..62486b896 100644 --- a/tests/stdlib/tjsonutils.nim +++ b/tests/stdlib/tjsonutils.nim @@ -4,7 +4,8 @@ discard """ import std/jsonutils import std/json -from std/math import isNaN +from std/math import isNaN, signbit +from stdtest/testutils import whenRuntimeJs proc testRoundtrip[T](t: T, expected: string) = # checks that `T => json => T2 => json2` is such that json2 = json @@ -123,6 +124,20 @@ template fn() = testRoundtripVal((Inf, -Inf, 0.0, -0.0, 1.0)): """["inf","-inf",0.0,-0.0,1.0]""" doAssert ($NaN.toJson).parseJson.jsonTo(float).isNaN + block: # bug #18009; unfixable unless we change parseJson (which would have overhead), + # but at least we can guarantee that the distinction between 0.0 and -0.0 is preserved. + let a = (0, 0.0, -0.0, 0.5, 1, 1.0) + testRoundtripVal(a): "[0,0.0,-0.0,0.5,1,1.0]" + let a2 = $($a.toJson).parseJson + whenRuntimeJs: + doAssert a2 == "[0,0,-0.0,0.5,1,1]" + do: + doAssert a2 == "[0,0.0,-0.0,0.5,1,1.0]" + let b = a2.parseJson.jsonTo(type(a)) + doAssert not b[1].signbit + doAssert b[2].signbit + doAssert not b[3].signbit + block: # case object type Foo = object x0: float |