Hello, thanks for the patch! See my comments. Sergey On 10/24/25 13:50, Sergey Kaplun wrote: > 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 please add more whitespaces. Here and below. > 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", typo: s/meteror/meteor/ > + 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()