summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--tests/stdlib/tjson.nim11
-rw-r--r--tests/stdlib/tjsonutils.nim11
2 files changed, 22 insertions, 0 deletions
diff --git a/tests/stdlib/tjson.nim b/tests/stdlib/tjson.nim
index e757e6c7e..289ef9d05 100644
--- a/tests/stdlib/tjson.nim
+++ b/tests/stdlib/tjson.nim
@@ -11,6 +11,8 @@ import std/[json,parsejson,strutils]
 from std/math import isNaN
 when not defined(js):
   import std/streams
+import stdtest/testutils
+from std/fenv import epsilon
 
 proc testRoundtrip[T](t: T, expected: string) =
   # checks that `T => json => T2 => json2` is such that json2 = json
@@ -325,6 +327,15 @@ block: # bug #18007
   let a = parseJson($(%NaN)).to(float)
   doAssert a.isNaN
 
+  whenRuntimeJs: discard # refs bug #18009
+  do:
+    testRoundtripVal(0.0): "0.0"
+    testRoundtripVal(-0.0): "-0.0"
+
+block: # bug #15397, bug #13196
+  testRoundtripVal(1.0 + epsilon(float64)): "1.0000000000000002"
+  testRoundtripVal(0.12345678901234567890123456789): "0.12345678901234568"
+
 block:
   let a = "18446744073709551615"
   let b = a.parseJson
diff --git a/tests/stdlib/tjsonutils.nim b/tests/stdlib/tjsonutils.nim
index 88c05facf..31ec4316f 100644
--- a/tests/stdlib/tjsonutils.nim
+++ b/tests/stdlib/tjsonutils.nim
@@ -5,6 +5,7 @@ discard """
 import std/jsonutils
 import std/json
 from std/math import isNaN, signbit
+from std/fenv import epsilon
 from stdtest/testutils import whenRuntimeJs
 
 proc testRoundtrip[T](t: T, expected: string) =
@@ -160,6 +161,16 @@ template fn() =
     doAssert b[2].signbit
     doAssert not b[3].signbit
 
+  block: # bug #15397, bug #13196
+    let a = 0.1
+    let x = 0.12345678901234567890123456789
+    let b = (a + 0.2, 0.3, x)
+    testRoundtripVal(b): "[0.30000000000000004,0.3,0.12345678901234568]"
+
+    testRoundtripVal(0.12345678901234567890123456789): "0.12345678901234568"
+    testRoundtripVal(epsilon(float64)): "2.220446049250313e-16"
+    testRoundtripVal(1.0 + epsilon(float64)): "1.0000000000000002"
+
   block: # case object
     type Foo = object
       x0: float