summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon <lordnynex@gmail.com>2015-11-01 01:51:30 -0700
committerYichun Zhang (agentzh) <agentzh@gmail.com>2015-11-04 22:37:29 +0800
commitf79aa68af865ae84b36c7e794beedd87fef2ed54 (patch)
tree882359f4bca0651aff399cb18c1779e65a3cc7a1
parentfab1440c3268fa415d098ff37bf0f929eeb53844 (diff)
downloadlua-cjson-2.1.0.3.tar.gz
lua-cjson-2.1.0.3.tar.bz2
lua-cjson-2.1.0.3.zip
feature: now we allow up to 16 decimal places in JSON number encoding via cjson.encode_number_precision().2.1.0.3
thanks lordnynex for the patch in #4. Test cases for changing precision
-rw-r--r--lua_cjson.c2
-rw-r--r--tests/agentzh.t15
-rwxr-xr-xtests/test.lua2
3 files changed, 17 insertions, 2 deletions
diff --git a/lua_cjson.c b/lua_cjson.c
index 97f2350..5ff3bf7 100644
--- a/lua_cjson.c
+++ b/lua_cjson.c
@@ -299,7 +299,7 @@ static int json_cfg_encode_number_precision(lua_State *l)
299{ 299{
300 json_config_t *cfg = json_arg_init(l, 1); 300 json_config_t *cfg = json_arg_init(l, 1);
301 301
302 return json_integer_option(l, 1, &cfg->encode_number_precision, 1, 14); 302 return json_integer_option(l, 1, &cfg->encode_number_precision, 1, 16);
303} 303}
304 304
305/* Configures how to treat empty table when encode lua table */ 305/* Configures how to treat empty table when encode lua table */
diff --git a/tests/agentzh.t b/tests/agentzh.t
index e65288f..0b546ff 100644
--- a/tests/agentzh.t
+++ b/tests/agentzh.t
@@ -50,3 +50,18 @@ print(cjson.encode(b))
50--- out 50--- out
51["a=1&b=2"] 51["a=1&b=2"]
52 52
53
54
55=== TEST 5: default and max precision
56--- lua
57local math = require "math"
58local cjson = require "cjson"
59local double = math.pow(2, 53)
60print(cjson.encode(double))
61cjson.encode_number_precision(16)
62print(cjson.encode(double))
63print(string.format("%16.0f", cjson.decode("9007199254740992")))
64--- out
659.007199254741e+15
669007199254740992
679007199254740992
diff --git a/tests/test.lua b/tests/test.lua
index b8fce84..c96dd3d 100755
--- a/tests/test.lua
+++ b/tests/test.lua
@@ -361,7 +361,7 @@ local cjson_tests = {
361 -- Function is listed as '?' due to pcall 361 -- Function is listed as '?' due to pcall
362 { "Set encode_number_precision(0) [throw error]", 362 { "Set encode_number_precision(0) [throw error]",
363 json.encode_number_precision, { 0 }, 363 json.encode_number_precision, { 0 },
364 false, { "bad argument #1 to '?' (expected integer between 1 and 14)" } }, 364 false, { "bad argument #1 to '?' (expected integer between 1 and 16)" } },
365 { "Set encode_number_precision(\"five\") [throw error]", 365 { "Set encode_number_precision(\"five\") [throw error]",
366 json.encode_number_precision, { "five" }, 366 json.encode_number_precision, { "five" },
367 false, { "bad argument #1 to '?' (number expected, got string)" } }, 367 false, { "bad argument #1 to '?' (number expected, got string)" } },