Skip to content

Commit 5a9a8ba

Browse files
authored
Fix exponent writer (#111)
The exponent writer failed to produce correct exponent sign.
1 parent 89335e4 commit 5a9a8ba

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

json_serialization/writer.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ proc writeNumber*[F,T](w: var JsonWriter[F], value: JsonNumber[T]) =
239239

240240
writeExp:
241241
append 'e'
242-
if value.sign == JsonSign.Neg:
242+
if value.expSign == JsonSign.Neg:
243243
append '-'
244244
when T is uint64:
245245
w.stream.writeText value.exponent

tests/test_writer.nim

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ proc writeValue*(w: var JsonWriter, val: OWOF)
5454
w.writeField("b", val.b)
5555
w.writeField("c", val.c)
5656

57+
func toReader(input: string): JsonReader[DefaultFlavor] =
58+
var stream = unsafeMemoryInput(input)
59+
JsonReader[DefaultFlavor].init(stream)
60+
5761
suite "Test writer":
5862
test "stdlib option top level some YourJson":
5963
var val = some(123)
@@ -272,3 +276,17 @@ suite "Test writer":
272276
# configuration: MyJson.configureJsonSerialization(Drawer, EnumAsString)
273277
let v = MyJson.encode(One)
274278
check v == "\"One\""
279+
280+
test "float writer":
281+
template checkExp(src, res) =
282+
var x = toReader(src)
283+
let y = x.readValue(JsonNumber[uint64])
284+
let z = Json.encode(y)
285+
check z == res
286+
287+
checkExp("0.0E-1", "0.0e-1")
288+
checkExp("+0.1e-2", "0.1e-2")
289+
checkExp("-0.2e-9", "-0.2e-9")
290+
checkExp("0.0E+1", "0.0e1")
291+
checkExp("+0.1e+2", "0.1e2")
292+
checkExp("-0.2e+9", "-0.2e9")

0 commit comments

Comments
 (0)