mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-05-23 22:02:27 +00:00
Further improve json / lua serialization
This commit is contained in:
parent
9e86980191
commit
ee82cee432
10 changed files with 248 additions and 155 deletions
|
@ -20,49 +20,79 @@ assert(EncodeLua(ParseJson[[ 2.3 ]]) == '2.3')
|
|||
assert(EncodeLua(ParseJson[[ [1,3,2] ]]) == '{1, 3, 2}')
|
||||
assert(EncodeLua(ParseJson[[ {1: 2, 3: 4} ]]) == '{[1]=2, [3]=4}')
|
||||
assert(EncodeLua(ParseJson[[ {"foo": 2, "bar": 4} ]]) == '{bar=4, foo=2}')
|
||||
assert(EncodeLua(ParseJson[[ null ]]) == 'nil')
|
||||
assert(EncodeLua(ParseJson[[ -123 ]]) == '-123')
|
||||
assert(EncodeLua(ParseJson[[ 1.e6 ]]) == '1000000')
|
||||
assert(EncodeLua(ParseJson[[ 1.e-6 ]]) == '1e-06')
|
||||
assert(EncodeLua(ParseJson[[ 1e-06 ]]) == '1e-06')
|
||||
assert(EncodeLua(ParseJson[[ 9.123e6 ]]) == '9123000')
|
||||
assert(EncodeLua(ParseJson[[ 1e6 ]]) == '1000000.')
|
||||
assert(EncodeLua(ParseJson[[ 1.e-6 ]]) == '0.000001')
|
||||
assert(EncodeLua(ParseJson[[ 1e-06 ]]) == '0.000001')
|
||||
assert(EncodeLua(ParseJson[[ 9.123e6 ]]) == '9123000.')
|
||||
assert(EncodeLua(ParseJson[[ [{"heh": [1,3,2]}] ]]) == '{{heh={1, 3, 2}}}')
|
||||
assert(EncodeLua(ParseJson[[ 3.14159 ]]) == '3.14159')
|
||||
assert(EncodeLua(ParseJson[[ {3=4} ]]) == '{[3]=4}')
|
||||
assert(EncodeLua(ParseJson[[ 1e-12 ]]) == '1e-12')
|
||||
assert(EncodeJson(ParseJson[[ 1e-12 ]]) == '1e-12')
|
||||
|
||||
----------------------------------------------------------------------------------------------------
|
||||
-- benchmarks
|
||||
assert(EncodeJson(ParseJson[[ 1e-12 ]]) == '1e-12')
|
||||
assert(EncodeJson(ParseJson[[ true ]]) == 'true')
|
||||
assert(EncodeJson(ParseJson[[ false ]]) == 'false')
|
||||
assert(EncodeJson(ParseJson[[ null ]]) == 'null')
|
||||
assert(EncodeJson(ParseJson[[ [] ]]) == '[]')
|
||||
assert(EncodeJson(ParseJson[[ {} ]]) == '{}')
|
||||
|
||||
assert(ParseJson[["\f"]] == '\f') -- c0
|
||||
assert(ParseJson[["\t"]] == '\t') -- c0
|
||||
assert(ParseJson[["\n"]] == '\n') -- c0
|
||||
assert(ParseJson[["\r"]] == '\r') -- c0
|
||||
assert(ParseJson[["\\"]] == '\\') -- c0
|
||||
assert(ParseJson[["\""]] == '\"') -- c0
|
||||
assert(ParseJson[["\u0100"]] == 'Ā') -- latin-1
|
||||
assert(ParseJson[["\ud800\udf30\ud800\udf30"]] == '𐌰𐌰') -- utf-16 astral planes gothic
|
||||
assert(ParseJson[["\uD800"]] == '\\uD800') -- utf-16 invalid (keep utf-8 well-formed)
|
||||
|
||||
assert(EncodeJson(ParseJson[[ -9223372036854775808 ]]) == '-9223372036854775808') -- minimum 64-bit integer
|
||||
assert(EncodeJson(ParseJson[[ 9223372036854775807 ]]) == '9223372036854775807') -- maximum 64-bit integer
|
||||
assert(EncodeJson(ParseJson[[ 9223372036854775808 ]]) == '9223372036854776000') -- switches to double due to integer overflow
|
||||
assert(EncodeJson(ParseJson[[ -9223372036854775809 ]]) == '-9223372036854776000') -- switches to double due to integer underflow
|
||||
assert(EncodeJson(ParseJson[[ 9223372036854775807.0 ]]) == '9223372036854776000') -- switches to double due to period mark
|
||||
assert(EncodeJson(ParseJson[[ 2.7182818284590452354 ]]) == '2.718281828459045') -- euler constant w/ 17 digit precision
|
||||
assert( EncodeLua(ParseJson[[ 2.7182818284590452354 ]]) == '2.718281828459045') -- euler constant w/ 17 digit precision
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- benchmark nanos ticks
|
||||
--------------------------------------------------------------------------------
|
||||
-- JsonParseEmpty 23 72
|
||||
-- JsonParseInteger 45 142
|
||||
-- JsonParseDouble 108 335
|
||||
-- JsonParseString 106 329
|
||||
-- JsonParseArray 243 754
|
||||
-- JsonParseObject 523 1622
|
||||
|
||||
function JsonParseEmpty()
|
||||
ParseJson[[]]
|
||||
end
|
||||
|
||||
function JsonParseInt()
|
||||
ParseJson[[ 314159 ]]
|
||||
function JsonParseInteger()
|
||||
ParseJson[[ -9223372036854775808 ]]
|
||||
end
|
||||
|
||||
function JsonParseDouble()
|
||||
ParseJson[[ 3.14159 ]]
|
||||
ParseJson[[ 2.7182818284590452354 ]]
|
||||
end
|
||||
|
||||
function JsonParseString()
|
||||
ParseJson[[ "\ud800\udf30 he𐌰𐌰o \ud800\udf30" ]]
|
||||
end
|
||||
|
||||
function JsonParseArray()
|
||||
ParseJson[[ [3,1,4,1,5,9] ]]
|
||||
ParseJson[[ [123,456,789] ]]
|
||||
end
|
||||
|
||||
function JsonParseObject()
|
||||
ParseJson[[ {"3":"1","4":"1","5":"9"} ]]
|
||||
ParseJson[[ {"3":"1", "4":"1", "5":"9"} ]]
|
||||
end
|
||||
|
||||
print('JsonParseEmpty', Benchmark(JsonParseEmpty))
|
||||
print('JsonParseInt', Benchmark(JsonParseInt))
|
||||
print('JsonParseInteg', Benchmark(JsonParseInteger))
|
||||
print('JsonParseDouble', Benchmark(JsonParseDouble))
|
||||
print('JsonParseString', Benchmark(JsonParseString))
|
||||
print('JsonParseArray', Benchmark(JsonParseArray))
|
||||
print('JsonParseObject', Benchmark(JsonParseObject))
|
||||
|
||||
-- nanos ticks
|
||||
-- JsonParseEmpty 24 77 85 1
|
||||
-- JsonParseInt 31 96 82 1
|
||||
-- JsonParseDouble 64 199 82 1
|
||||
-- JsonParseArray 367 1139 80 1
|
||||
-- JsonParseObject 425 1317 79 1
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue