mirror of https://github.com/rxi/json.lua.git
67 lines
1.3 KiB
Lua
67 lines
1.3 KiB
Lua
local bench = {}
|
|
|
|
local unpack = unpack or table.unpack
|
|
local fmt = string.format
|
|
|
|
|
|
function bench.run(name, count, func)
|
|
-- Ensure all garbage is collected
|
|
for _ = 1, 10 do -- cycles
|
|
collectgarbage()
|
|
end
|
|
-- Run bench
|
|
local res = {}
|
|
for i = 1, count do
|
|
local start_time = os.clock()
|
|
func()
|
|
table.insert(res, (os.clock() - start_time))
|
|
end
|
|
-- Calculate average
|
|
local avg = 0
|
|
for i, v in ipairs(res) do
|
|
avg = avg + v
|
|
end
|
|
avg = avg / #res
|
|
-- Build and return result table
|
|
return {
|
|
name = name,
|
|
avg = avg,
|
|
min = math.min(unpack(res)),
|
|
max = math.max(unpack(res)),
|
|
all = res,
|
|
}
|
|
end
|
|
|
|
|
|
function bench.get_cpu_name()
|
|
local fp = io.open("/proc/cpuinfo", "rb")
|
|
if not fp then
|
|
return "unknown"
|
|
end
|
|
local text = fp:read("*a")
|
|
return text:match("model name%s*:%s*(.-)\n")
|
|
end
|
|
|
|
|
|
function bench.print_system_info()
|
|
print( fmt("Lua version : %s", jit and jit.version or _VERSION) )
|
|
print( fmt("CPU name : %s", bench.get_cpu_name()) )
|
|
end
|
|
|
|
|
|
function bench.print_results(results)
|
|
-- Find best average
|
|
local best = math.huge
|
|
for i, v in ipairs(results) do
|
|
best = math.min(best, v.avg)
|
|
end
|
|
-- Print results
|
|
for i, v in ipairs(results) do
|
|
print( fmt("%-13s : %.03gs [x%1.3g] (min: %.03gs, max %.03gs)",
|
|
v.name, v.avg, v.avg / best, v.min, v.max) )
|
|
end
|
|
end
|
|
|
|
|
|
return bench
|