Hi, Sergey! thanks for the patch! LGTM Sergey On 12/26/25 12:17, 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 | 84 +++++++++++++++++++++++---------- > 1 file changed, 59 insertions(+), 25 deletions(-) > > diff --git a/perf/LuaJIT-benches/revcomp.lua b/perf/LuaJIT-benches/revcomp.lua > index 34fe347b..6e8a7049 100644 > --- a/perf/LuaJIT-benches/revcomp.lua > +++ b/perf/LuaJIT-benches/revcomp.lua > @@ -1,3 +1,14 @@ > +-- The benchmark to check the performance of hash table lookups by > +-- constant keys, string manipulations, and read/write > +-- operations. > +-- This benchmark reads the line-by-line a redirected FASTA format > +-- file from stdin, which is generated by the > +-- benchmark, and writes the id, description, and the > +-- reverse-complement sequence in FASTA format to stdout. > +-- For the details see: > +--https://benchmarksgame-team.pages.debian.net/benchmarksgame/description/revcomp.html > + > +local bench = require("bench").new(arg) > > local sub = string.sub > iubc = setmetatable({ > @@ -9,29 +20,52 @@ 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() > + > +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 > + ]=] could you also apply the patch below with formatting? diff --git a/perf/LuaJIT-benches/revcomp.lua b/perf/LuaJIT-benches/revcomp.lua index 6e8a7049..9050110e 100644 --- a/perf/LuaJIT-benches/revcomp.lua +++ b/perf/LuaJIT-benches/revcomp.lua @@ -38,9 +38,9 @@ bench:add({        for i = #s - 59, 1, -60 do          write(]=]      for i = 59, 3, -4 do -      wcode = wcode.."iubc[sub(s, i + "..(i - 3)..", i + "..i..")], " +      wcode = wcode .. "iubc[sub(s, i + " .. (i - 3) .. ", i + " .. i .. ")], "      end -    wcode = wcode..[=["\n") +    wcode = wcode .. [=["\n")        end        local r = #s % 60        if r ~= 0 then @@ -54,7 +54,10 @@ bench:add({      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 +      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) > + 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, > +}) > > -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:run_and_report()