lua-json/bench/util/bench.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