diff options
| author | Mark Pulford <mark@kyne.com.au> | 2011-05-29 22:26:12 +0930 |
|---|---|---|
| committer | Mark Pulford <mark@kyne.com.au> | 2011-05-29 22:26:12 +0930 |
| commit | 7e95a594465453f77b7c9449a3a486771e174111 (patch) | |
| tree | 0143ccdd4ea67f36fc71a3655e8d88c5bac9224d | |
| parent | 4b81736946201d61c611f4100d562d618243c9bf (diff) | |
| download | lua-cjson-7e95a594465453f77b7c9449a3a486771e174111.tar.gz lua-cjson-7e95a594465453f77b7c9449a3a486771e174111.tar.bz2 lua-cjson-7e95a594465453f77b7c9449a3a486771e174111.zip | |
Use a benchmark duration, not interation count
Roughly calculate the number of iterations required to run the benchmark
for the chosen duration.
| -rwxr-xr-x | tests/bench.lua | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/tests/bench.lua b/tests/bench.lua index 0e2a75c..fdd0bb0 100755 --- a/tests/bench.lua +++ b/tests/bench.lua | |||
| @@ -8,9 +8,10 @@ | |||
| 8 | 8 | ||
| 9 | require "common" | 9 | require "common" |
| 10 | require "socket" | 10 | require "socket" |
| 11 | |||
| 11 | local json = require "cjson" | 12 | local json = require "cjson" |
| 12 | 13 | ||
| 13 | function benchmark(tests, iter, rep) | 14 | function benchmark(tests, seconds, rep) |
| 14 | local function bench(func, iter) | 15 | local function bench(func, iter) |
| 15 | -- collectgarbage("stop") | 16 | -- collectgarbage("stop") |
| 16 | collectgarbage("collect") | 17 | collectgarbage("collect") |
| @@ -23,6 +24,14 @@ function benchmark(tests, iter, rep) | |||
| 23 | return (iter / t) | 24 | return (iter / t) |
| 24 | end | 25 | end |
| 25 | 26 | ||
| 27 | -- Roughly calculate the number of interations required | ||
| 28 | -- to obtain a particular time period. | ||
| 29 | local function calc_iter(func, seconds) | ||
| 30 | local base_iter = 10 | ||
| 31 | local rate = (bench(func, base_iter) + bench(func, base_iter)) / 2 | ||
| 32 | return math.ceil(seconds * rate) | ||
| 33 | end | ||
| 34 | |||
| 26 | local test_results = {} | 35 | local test_results = {} |
| 27 | for name, func in pairs(tests) do | 36 | for name, func in pairs(tests) do |
| 28 | -- k(number), v(string) | 37 | -- k(number), v(string) |
| @@ -32,6 +41,7 @@ function benchmark(tests, iter, rep) | |||
| 32 | name = func | 41 | name = func |
| 33 | func = _G[name] | 42 | func = _G[name] |
| 34 | end | 43 | end |
| 44 | local iter = calc_iter(func, seconds) | ||
| 35 | local result = {} | 45 | local result = {} |
| 36 | for i = 1, rep do | 46 | for i = 1, rep do |
| 37 | result[i] = bench(func, iter) | 47 | result[i] = bench(func, iter) |
| @@ -59,7 +69,7 @@ function bench_file(filename) | |||
| 59 | decode = test_decode | 69 | decode = test_decode |
| 60 | } | 70 | } |
| 61 | 71 | ||
| 62 | return benchmark(tests, 5000, 5) | 72 | return benchmark(tests, 0.1, 5) |
| 63 | end | 73 | end |
| 64 | 74 | ||
| 65 | cjson.encode_keep_buffer(true) | 75 | cjson.encode_keep_buffer(true) |
