@@ -330,6 +330,14 @@ const
330330 }
331331}
332332
333+ """
334+
335+ jsonBigNum = """
336+ {
337+ "bignum": 9999999999999999999999999999999999999999999,
338+ "float": 124.123,
339+ "int": -12345
340+ }
333341"""
334342
335343suite " Parse to runtime dynamic structure" :
@@ -345,6 +353,7 @@ suite "Parse to runtime dynamic structure":
345353 n[" array" ][0 ].bval == true
346354 n[" array" ][1 ].fnum == 567.89
347355 n[" array" ][2 ].str == " string in array"
356+ $ n[" array" ][2 ] == " \" string in array\" " # quoted string
348357 n[" array" ][3 ].kind == JNull
349358 n[" array" ][4 ].kind == JArray
350359 n[" array" ][4 ].len == 1
@@ -358,6 +367,7 @@ suite "Parse to runtime dynamic structure":
358367 check:
359368 n[" string" ].strVal == " hello world"
360369 n[" bool" ].boolVal == true
370+ n[" int" ].numVal.integer == 789
361371 n[" array" ].len == 5
362372 n[" array" ][0 ].boolVal == true
363373 n[" array" ][2 ].strVal == " string in array"
@@ -366,14 +376,38 @@ suite "Parse to runtime dynamic structure":
366376 n[" array" ][4 ].len == 1
367377 n[" object" ][" def" ].boolVal == false
368378
379+ test " parse to json node bignum" :
380+ var r = toReader (jsonBigNum)
381+ let n = r.parseJsonNode ()
382+ check:
383+ n[" bignum" ].kind == JString
384+ n[" bignum" ].str == " 9999999999999999999999999999999999999999999"
385+ $ n[" bignum" ] == " 9999999999999999999999999999999999999999999" # unquoted raw string
386+ n[" float" ].kind == JFloat
387+ n[" float" ].fnum == 124.123
388+ n[" int" ].kind == JInt
389+ n[" int" ].num == - 12345
390+
391+ test " parseValue bignum" :
392+ var r = toReader (jsonBigNum)
393+ let n = r.parseValue (string )
394+ check:
395+ n[" bignum" ].kind == JsonValueKind .Number
396+ n[" bignum" ].numVal.integer == " 9999999999999999999999999999999999999999999"
397+
398+ test " parseValue bignum overflow" :
399+ var r = toReader (jsonBigNum)
400+ expect JsonReaderError :
401+ let n = r.parseValue (uint64 )
402+
369403 test " nim v2 regression #23233" :
370404 # Nim compiler bug #23233 will prevent
371405 # compilation if both JsonValueRef[uint64] and JsonValueRef[string]
372406 # are instantiated at together.
373407 var r1 = toReader (jsonText)
374408 let n1 = r1.parseValue (uint64 )
375- discard n1
409+ check n1[ " int " ].numVal.integer == 789
376410
377411 var r2 = toReader (jsonText)
378412 let n2 = r2.parseValue (string )
379- discard n2
413+ check n2[ " int " ].numVal.integer == " 789 "
0 commit comments