1
Fork 0
lua-benchmarks/vararg-iteration/run.lua
Lucas Schwiderski 33ff43c859
refactor: Use a more representative code style
Removing global indexing takes off quite a bit of run time.
2022-10-11 23:13:55 +02:00

67 lines
1.4 KiB
Lua

local function v51_unpack(t)
return table.remove(t, 1), unpack(t)
end
local function try(fnc, n, ...)
local start = os.clock()
for _ = 1, n do
fnc(...)
end
print(os.clock()-start)
end
local unpack = table.unpack or v51_unpack
for i = 1, 8 do
local values = {}
local n = 2^i
print(("Number of elements: %i"):format(n))
for j =1, n*2 do
values[#values+1] = j
end
n = 2^22 / n
print(("Number of iterations: %i"):format(n))
print("---- STARTING TEST ----")
io.write "numeric for: "
try(function(...)
local args = {...}
for j = 1, #args do
local _ = args[j]
end
end, n, unpack(values))
io.write "ipairs{...}: "
try(function(...)
local args = {...}
for _, value in ipairs(args) do
local _ = value
end
end, n, unpack(values))
io.write "select : "
try(function(...)
for j = 1,select("#",...) do
local _ = select(j,...)
end
end, n, unpack(values))
---[[
io.write "combination: "
try(function(...)
local n_args = select("#",...)
if n_args <= 16 then
for j = 1, n_args do
local _ = select(j,...)
end
else
local args = {...}
for _, value in ipairs(args) do
local _ = value
end
end
end, n, unpack(values))
--]]
print()
end