aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorMark Pulford <mark@kyne.com.au>2012-01-04 07:57:21 +1030
committerMark Pulford <mark@kyne.com.au>2012-03-04 18:54:34 +1030
commitc7fbb8e441b6a62e0d6d016add8ed6b44d90d981 (patch)
tree945b22e73281a8885ea9ae8953fdb5f200ec57f8 /tests
parent9f85048c49caca1d1774c96681546b178cb7ca78 (diff)
downloadlua-cjson-c7fbb8e441b6a62e0d6d016add8ed6b44d90d981.tar.gz
lua-cjson-c7fbb8e441b6a62e0d6d016add8ed6b44d90d981.tar.bz2
lua-cjson-c7fbb8e441b6a62e0d6d016add8ed6b44d90d981.zip
Update bench.lua to support different JSON modules
- Select via JSON_MODULE environment variable (default "cjson") - Custom runtime configuration can be stored in bench-MODNAME.lua - Add run_script() to cjson-misc and update lua2cjson.lua
Diffstat (limited to 'tests')
-rwxr-xr-xtests/bench.lua43
-rw-r--r--tests/cjson-misc.lua26
-rwxr-xr-xtests/lua2json.lua34
3 files changed, 62 insertions, 41 deletions
diff --git a/tests/bench.lua b/tests/bench.lua
index 2b5177b..0709209 100755
--- a/tests/bench.lua
+++ b/tests/bench.lua
@@ -6,10 +6,25 @@
6-- 6--
7-- Mark Pulford <mark@kyne.com.au> 7-- Mark Pulford <mark@kyne.com.au>
8 8
9local json_module = os.getenv("JSON_MODULE") or "cjson"
10
9require "socket" 11require "socket"
10local json = require "cjson" 12local json = require(json_module)
11local misc = require "cjson-misc" 13local misc = require "cjson-misc"
12 14
15local function find_func(mod, funcnames)
16 for _, v in ipairs(funcnames) do
17 if mod[v] then
18 return mod[v]
19 end
20 end
21
22 return nil
23end
24
25local json_encode = find_func(json, { "encode", "Encode", "to_string", "stringify", "json" })
26local json_decode = find_func(json, { "decode", "Decode", "to_value", "parse" })
27
13function benchmark(tests, seconds, rep) 28function benchmark(tests, seconds, rep)
14 local function bench(func, iter) 29 local function bench(func, iter)
15 -- collectgarbage("stop") 30 -- collectgarbage("stop")
@@ -54,29 +69,33 @@ end
54 69
55function bench_file(filename) 70function bench_file(filename)
56 local data_json = misc.file_load(filename) 71 local data_json = misc.file_load(filename)
57 local data_obj = json.decode(data_json) 72 local data_obj = json_decode(data_json)
58 73
59 local function test_encode () 74 local function test_encode()
60 json.encode(data_obj) 75 json_encode(data_obj)
61 end 76 end
62 local function test_decode () 77 local function test_decode()
63 json.decode(data_json) 78 json_decode(data_json)
64 end 79 end
65 80
66 local tests = { 81 local tests = {}
67 encode = test_encode, 82 if json_encode then tests.encode = test_encode end
68 decode = test_decode 83 if json_decode then tests.decode = test_decode end
69 }
70 84
71 return benchmark(tests, 0.1, 5) 85 return benchmark(tests, 0.1, 5)
72end 86end
73 87
74json.encode_keep_buffer(true) 88-- Optionally load any custom configuration required for this module
89local success, data = pcall(misc.file_load, string.format("bench-%s.lua", json_module))
90if success then
91 misc.run_script(data, _G)
92 configure(json)
93end
75 94
76for i = 1, #arg do 95for i = 1, #arg do
77 local results = bench_file(arg[i]) 96 local results = bench_file(arg[i])
78 for k, v in pairs(results) do 97 for k, v in pairs(results) do
79 print(string.format("%s: %s: %d", arg[i], k, v)) 98 print(string.format("%s\t%s\t%d", arg[i], k, v))
80 end 99 end
81end 100end
82 101
diff --git a/tests/cjson-misc.lua b/tests/cjson-misc.lua
index d8bfe5e..c4462ca 100644
--- a/tests/cjson-misc.lua
+++ b/tests/cjson-misc.lua
@@ -239,6 +239,29 @@ local function run_test_group(testgroup, tests)
239 end 239 end
240end 240end
241 241
242-- Run a Lua script in a separate environment
243local function run_script(script, env)
244 local env = env or {}
245 local func
246
247 -- Use setfenv() if it exists, otherwise assume Lua 5.2 load() exists
248 if _G.setfenv then
249 func = loadstring(script)
250 if func then
251 setfenv(func, env)
252 end
253 else
254 func = load(script, nil, nil, env)
255 end
256
257 if func == nil then
258 error("Invalid syntax.")
259 end
260 func()
261
262 return env
263end
264
242-- Export functions 265-- Export functions
243return { 266return {
244 serialise_value = serialise_value, 267 serialise_value = serialise_value,
@@ -247,7 +270,8 @@ return {
247 compare_values = compare_values, 270 compare_values = compare_values,
248 run_test_summary = run_test_summary, 271 run_test_summary = run_test_summary,
249 run_test = run_test, 272 run_test = run_test,
250 run_test_group = run_test_group 273 run_test_group = run_test_group,
274 run_script = run_script
251} 275}
252 276
253-- vi:ai et sw=4 ts=4: 277-- vi:ai et sw=4 ts=4:
diff --git a/tests/lua2json.lua b/tests/lua2json.lua
index ebe7380..2a9ddf9 100755
--- a/tests/lua2json.lua
+++ b/tests/lua2json.lua
@@ -9,34 +9,12 @@
9local json = require "cjson" 9local json = require "cjson"
10local misc = require "cjson-misc" 10local misc = require "cjson-misc"
11 11
12function get_lua_table(s) 12local env = {
13 local env = {} 13 json = { null = json.null },
14 local func 14 null = json.null
15}
15 16
16 env.json = {} 17local t = misc.run_script("data = " .. misc.file_load(arg[1]), env)
17 env.json.null = json.null 18print(json.encode(t.data))
18 env.null = json.null
19 s = "data = " .. s
20
21 -- Use setfenv() if it exists, otherwise assume Lua 5.2 load() exists
22 if _G.setfenv then
23 func = loadstring(s)
24 if func then
25 setfenv(func, env)
26 end
27 else
28 func = load(s, nil, nil, env)
29 end
30
31 if func == nil then
32 error("Invalid syntax. Failed to parse Lua table.")
33 end
34 func()
35
36 return env.data
37end
38
39local t = get_lua_table(misc.file_load(arg[1]))
40print(json.encode(t))
41 19
42-- vi:ai et sw=4 ts=4: 20-- vi:ai et sw=4 ts=4: