Hi, Sergey, 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 default arguments are adjusted > according to the file. The arguments to the script still > can be provided in the command line run. > > The benchmark input is given by redirecting the corresponding > file generated by the `libs/fasta.lua 5e6`. The output > from the benchmark is redirected to /dev/null. Checks are skipped since > the output is very huge, and it is overkill to store it in the > repository. > --- > perf/LuaJIT-benches/revcomp.lua | 72 +++++++++++++++++++++------------ > 1 file changed, 47 insertions(+), 25 deletions(-) > > diff --git a/perf/LuaJIT-benches/revcomp.lua b/perf/LuaJIT-benches/revcomp.lua > index 34fe347b..2b1ffa5c 100644 > --- a/perf/LuaJIT-benches/revcomp.lua > +++ b/perf/LuaJIT-benches/revcomp.lua > @@ -1,3 +1,4 @@ > +local bench = require("bench").new(arg) > > local sub = string.sub > iubc = setmetatable({ > @@ -9,29 +10,50 @@ iubc = setmetatable({ > }, { __index = function(t, s) > local r = t[sub(s, 2)]..t[sub(s, 1, 1)]; t[s] = r; return r end }) > > -local wcode = [=[ > -return function(t, n) > - if n == 1 then return end > - local iubc, sub, write = iubc, string.sub, io.write > - local s = table.concat(t, "", 1, n-1) > - for i=#s-59,1,-60 do > - write(]=] > -for i=59,3,-4 do wcode = wcode.."iubc[sub(s, i+"..(i-3)..", i+"..i..")], " end > -wcode = wcode..[=["\n") > - end > - local r = #s % 60 > - if r ~= 0 then > - for i=r,1,-4 do write(iubc[sub(s, i-3 < 1 and 1 or i-3, i)]) end > - write("\n") > - end > -end > -]=] > -local writerev = loadstring(wcode)() > +local stdout = io.output() > > -local t, n = {}, 1 > -for line in io.lines() do > - local c = sub(line, 1, 1) > - if c == ">" then writerev(t, n); io.write(line, "\n"); n = 1 > - elseif c ~= ";" then t[n] = line; n = n + 1 end > -end > -writerev(t, n) > +bench:add({ > + name = "revcomp", > + -- The compare with the result output file is inconvenient. > + skip_check = true, > + setup = function() > + io.output("/dev/null") > + end, > + payload = function() > + local wcode = [=[ > + return function(t, n) > + if n == 1 then return end > + local iubc, sub, write = iubc, string.sub, io.write > + local s = table.concat(t, "", 1, n-1) > + for i=#s-59,1,-60 do > + write(]=] > + for i=59,3,-4 do wcode = wcode.."iubc[sub(s, i+"..(i-3)..", i+"..i..")], " end > + wcode = wcode..[=["\n") > + end > + local r = #s % 60 > + if r ~= 0 then > + for i=r,1,-4 do write(iubc[sub(s, i-3 < 1 and 1 or i-3, i)]) end > + write("\n") > + end > + end > + ]=] > + local writerev = loadstring(wcode)() > + > + local t, n = {}, 1 > + for line in io.lines() do > + local c = sub(line, 1, 1) > + if c == ">" then writerev(t, n); io.write(line, "\n"); n = 1 > + elseif c ~= ";" then t[n] = line; n = n + 1 end > + end > + writerev(t, n) > + -- Repeat operation several times. > +io.stdin:seek("set", 0) > + end, > + teardown = function() > + io.output(stdout) > + end, > + -- Amount of symbols in the input file. > + items = 5e6, > +}) > + > +bench:run_and_report()