From 50e4372311d452b2d811027196ac6fddc40d328a Mon Sep 17 00:00:00 2001 From: BlackMATov Date: Mon, 6 Jan 2025 05:32:46 +0700 Subject: [PATCH] fix bench basics --- develop/basics.lua | 70 +++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/develop/basics.lua b/develop/basics.lua index 63a6daa..0677c29 100644 --- a/develop/basics.lua +++ b/develop/basics.lua @@ -14,42 +14,54 @@ end)() ---@param loop fun(...): ... ---@param init? fun(): ... function basics.describe_bench(name, loop, init) + print(string.format('| %s ... |', name)) + + local state = init and __table_pack(init()) or {} + + do + local warmup_s = os.clock() + + local success, result = pcall(function() + repeat + loop(__table_unpack(state)) + until os.clock() - warmup_s > 0.1 + end) + + if not success then + print('|-- FAIL: ' .. result) + return + end + end + collectgarbage('collect') collectgarbage('stop') - print(string.format('| %s ... |', name)) + do + local iters = 0 - local iters = 0 - local state = init and __table_pack(init()) or {} + local start_s = os.clock() + local start_kb = collectgarbage('count') - pcall(function() - local warmup_s = os.clock() - repeat - loop(__table_unpack(state)) - until os.clock() - warmup_s > 0.1 - end) + local success, result = pcall(function() + repeat + iters = iters + 1 + loop(__table_unpack(state)) + until os.clock() - start_s > 0.1 + end) - local start_s = os.clock() - local start_kb = collectgarbage('count') + local finish_s = os.clock() + local finish_kb = collectgarbage('count') - local success, result = pcall(function() - repeat - iters = iters + 1 - loop(__table_unpack(state)) - until os.clock() - start_s > 0.1 - end) - - local finish_s = os.clock() - local finish_kb = collectgarbage('count') - - print(string.format(' %s | us: %.2f | op/s: %.2f | kb/i: %.2f | iters: %d', - success and 'PASS' or 'FAIL', - (finish_s - start_s) * 1e6 / iters, - iters / (finish_s - start_s), - (finish_kb - start_kb) / iters, - iters)) - - if not success then print(' ' .. result) end + if success then + print(string.format('|-- PASS | us: %.2f | op/s: %.2f | kb/i: %.2f | iters: %d', + (finish_s - start_s) * 1e6 / iters, + iters / (finish_s - start_s), + (finish_kb - start_kb) / iters, + iters)) + else + print('|-- FAIL: ' .. result) + end + end collectgarbage('restart') collectgarbage('collect')