[Tarantool-patches] [PATCH v1 luajit 16/41] perf: adjust meteor in LuaJIT-benches
Sergey Kaplun
skaplun at tarantool.org
Fri Oct 24 13:50:20 MSK 2025
This patch adjusts the aforementioned test to use the benchmark
framework introduced before. The arguments to the script still can be
provided in the command line run. However, the values greater than the
maximum possible solutions found do not affect the time of execution for
this benchmark. Hence, the number of items to proceed is considered
constant as the maximum possible number of solutions.
---
perf/LuaJIT-benches/meteor.lua | 46 ++++++++++++++++++++++++++--------
1 file changed, 36 insertions(+), 10 deletions(-)
diff --git a/perf/LuaJIT-benches/meteor.lua b/perf/LuaJIT-benches/meteor.lua
index 80588ab5..f3962820 100644
--- a/perf/LuaJIT-benches/meteor.lua
+++ b/perf/LuaJIT-benches/meteor.lua
@@ -1,3 +1,4 @@
+local bench = require("bench").new(arg)
-- Generate a decision tree based solver for the meteor puzzle.
local function generatesolver(countinit)
@@ -118,6 +119,10 @@ local function printresult()
printboard(smax)
end
+local function getresult()
+ return countinit-count, smin, smax
+end
+
-- Generate piece lookup array from the order of use.
local function genp()
local p = pcs
@@ -141,7 +146,7 @@ local function f91(k)
local s = p[b0] ]]
for p=2,99 do if ok[p] then s = s.."..p[b"..p.."]" end end
s = s..[[
- -- Remember min/max boards, dito for the symmetric board.
+ -- Remember min/max boards, ditto for the symmetric board.
if not smin then smin = s; smax = s
elseif s < smin then smin = s elseif s > smax then smax = s end
s = reverse(s)
@@ -206,15 +211,36 @@ local f93 = f91
end
-- Compile and return solver function and result getter.
- return loadstring(s.."return f0, printresult\n", "solver")(countinit)
+ return loadstring(s.."return f0, printresult, getresult\n", "solver")(countinit)
end
--- Generate the solver function hierarchy.
-local solver, printresult = generatesolver(tonumber(arg and arg[1]) or 10000)
-
--- The optimizer for LuaJIT 1.1.x is not helpful here, so turn it off.
-if jit and jit.opt and jit.version_num < 10200 then jit.opt.start(0) end
+local N = tonumber(arg and arg[1]) or 10000
+
+bench:add({
+ name = "meteror",
+ setup = function()
+ -- The optimizer for LuaJIT 1.1.x is not helpful here, so turn it off.
+ if jit and jit.opt and jit.version_num < 10200 then jit.opt.start(0) end
+ end,
+ payload = function()
+ -- Generate the solver function hierarchy.
+ local solver, printresult, getresult = generatesolver(N)
+
+ -- Run the solver protected to get partial results (max count or ctrl-c).
+ pcall(solver, 0)
+
+ local n, smin, smax = getresult()
+ return {n = n, smin = smin, smax = smax}
+ end,
+ checker = function(res)
+ if N >= 2097 then
+ assert(res.n == 2098, "Incorrect solutions number")
+ assert(res.smin == "00001222012661126155865558633348893448934747977799")
+ assert(res.smax == "99998966856688568255777257472014220144031400311333")
+ end
+ return true
+ end,
+ items = 2098,
+})
--- Run the solver protected to get partial results (max count or ctrl-c).
-pcall(solver, 0)
-printresult()
+bench:run_and_report()
--
2.51.0
More information about the Tarantool-patches
mailing list