aboutsummaryrefslogtreecommitdiff
path: root/tests/bench.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tests/bench.lua')
-rwxr-xr-xtests/bench.lua34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/bench.lua b/tests/bench.lua
index 847365b..c1808cf 100755
--- a/tests/bench.lua
+++ b/tests/bench.lua
@@ -7,8 +7,40 @@
7-- Mark Pulford <mark@kyne.com.au> 7-- Mark Pulford <mark@kyne.com.au>
8 8
9require "common" 9require "common"
10require "socket"
10local json = require "cjson" 11local json = require "cjson"
11 12
13function benchmark(tests, iter, rep)
14 local function bench(func, iter)
15 collectgarbage("collect")
16 local t = socket.gettime()
17 for i = 1, iter do
18 func(i)
19 end
20 t = socket.gettime() - t
21 return (iter / t)
22 end
23
24 local test_results = {}
25 for name, func in pairs(tests) do
26 -- k(number), v(string)
27 -- k(string), v(function)
28 -- k(number), v(function)
29 if type(func) == "string" then
30 name = func
31 func = _G[name]
32 end
33 local result = {}
34 for i = 1, rep do
35 result[i] = bench(func, iter)
36 end
37 table.sort(result)
38 test_results[name] = result[rep]
39 end
40
41 return test_results
42end
43
12function bench_file(filename) 44function bench_file(filename)
13 local data_json = file_load(filename) 45 local data_json = file_load(filename)
14 local data_obj = json.decode(data_json) 46 local data_obj = json.decode(data_json)
@@ -28,6 +60,8 @@ function bench_file(filename)
28 return benchmark(tests, 5000, 5) 60 return benchmark(tests, 5000, 5)
29end 61end
30 62
63cjson.encode_keep_buffer(true)
64
31for i = 1, #arg do 65for i = 1, #arg do
32 local results = bench_file(arg[i]) 66 local results = bench_file(arg[i])
33 for k, v in pairs(results) do 67 for k, v in pairs(results) do