Now preserving distinction between ints and floats
This commit is contained in:
@@ -226,7 +226,11 @@ json_number(Number) -->
|
|||||||
json_integer(Integer),
|
json_integer(Integer),
|
||||||
json_fraction(Fraction),
|
json_fraction(Fraction),
|
||||||
json_exponent(Exponent),
|
json_exponent(Exponent),
|
||||||
{ Number is Sign * (Integer + Fraction) * 10.0 ^ Exponent }.
|
{ ( Exponent >= 0 ->
|
||||||
|
Base = 10
|
||||||
|
; Base = 10.0
|
||||||
|
),
|
||||||
|
Number is Sign * (Integer + Fraction) * Base ^ Exponent }.
|
||||||
|
|
||||||
json_integer(Digit) --> json_digit(Digit).
|
json_integer(Digit) --> json_digit(Digit).
|
||||||
json_integer(TotalValue) -->
|
json_integer(TotalValue) -->
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42.0,true,false,null,{"":23456789011999997000000000000000000000000000000000000000000000000000000000000.0," s p a c e d ":[1.0,2.0,3.0,4.0,5.0,6.0,7.0],"# -- --> *\/":" ","\/\\\"쫾몾ꮘﳞ볚\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","E":12345678900000000000000000000000000.0,"address":"50 St. James Street","alpha":"abcdefghijklmnopqrstuvwyz","array":[],"backslash":"\\","comment":"\/\/ \/* <!-- --","compact":[1.0,2.0,3.0,4.0,5.0,6.0,7.0],"controls":"\b\f\n\r\t","digit":"0123456789","e":0.000000000000123456789,"false":false,"hex":"ģ䕧覫\u0001췯ꯍ\u001a","integer":1234567890.0,"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","null":null,"object":{},"one":1.0,"quote":"\"","quotes":"" \" %22 0x22 034 "","real":-9876.54321,"slash":"\/ & \/","space":" ","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","true":true,"url":"http:\/\/www.JSON.org\/","zero":0.0},0.5,98.6,99.44,1066.0,"rosebud"]
|
["JSON Test Pattern pass1",{"object with 1 member":["array with 1 element"]},{},[],-42,true,false,null,{"":23456789012000000000000000000000000000000000000000000000000000000000000000000," s p a c e d ":[1,2,3,4,5,6,7],"# -- --> *\/":" ","\/\\\"쫾몾ꮘﳞ볚\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',.\/<>?":"A key can be any string","ALPHA":"ABCDEFGHIJKLMNOPQRSTUVWYZ","E":12345678900000000000000000000000000.0,"address":"50 St. James Street","alpha":"abcdefghijklmnopqrstuvwyz","array":[],"backslash":"\\","comment":"\/\/ \/* <!-- --","compact":[1,2,3,4,5,6,7],"controls":"\b\f\n\r\t","digit":"0123456789","e":0.000000000000123456789,"false":false,"hex":"ģ䕧覫\u0001췯ꯍ\u001a","integer":1234567890,"jsontext":"{\"object with 1 member\":[\"array with 1 element\"]}","null":null,"object":{},"one":1,"quote":"\"","quotes":"" \" %22 0x22 034 "","real":-9876.54321,"slash":"\/ & \/","space":" ","special":"`1~!@#$%^&*()_+-={':[,]}|;.<\/>?","true":true,"url":"http:\/\/www.JSON.org\/","zero":0},0.5,98.6,99.44,1066,"rosebud"]
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
:- module(test_json, [test_json_read/0, test_json_minify/0]).
|
:- module(test_json, [test_json/0]).
|
||||||
|
|
||||||
:- use_module(library(charsio)).
|
:- use_module(library(charsio)).
|
||||||
:- use_module(library(dcgs)).
|
:- use_module(library(dcgs)).
|
||||||
@@ -36,3 +36,20 @@ test_json_minify :-
|
|||||||
name_parse("pass_everything.json", Json),
|
name_parse("pass_everything.json", Json),
|
||||||
time(once(phrase(json_chars(Json), MinChars))),
|
time(once(phrase(json_chars(Json), MinChars))),
|
||||||
RefChars = MinChars.
|
RefChars = MinChars.
|
||||||
|
|
||||||
|
test_json_int_float :-
|
||||||
|
once(phrase(json_chars(number(ZeroInt)), "0")),
|
||||||
|
integer(ZeroInt),
|
||||||
|
once(phrase(json_chars(number(ZeroFloat)), "0.0")),
|
||||||
|
\+ integer(ZeroFloat),
|
||||||
|
once(phrase(json_chars(number(BigInt)), "32E5")),
|
||||||
|
integer(BigInt),
|
||||||
|
once(phrase(json_chars(number(BigFloat)), "32.2E5")),
|
||||||
|
\+ integer(BigFloat),
|
||||||
|
once(phrase(json_chars(number(SmallFloat)), "32E-5")),
|
||||||
|
\+ integer(SmallFloat).
|
||||||
|
|
||||||
|
test_json :-
|
||||||
|
test_json_read,
|
||||||
|
test_json_minify,
|
||||||
|
test_json_int_float.
|
||||||
|
|||||||
Reference in New Issue
Block a user