Add basic timing library
This commit is contained in:
@@ -1,25 +1,27 @@
|
||||
if (...) ~= nil and (...).type == "group" then return end -- prevent recursive harness call
|
||||
|
||||
local ok = pcall(require, "lb:task")
|
||||
if not ok then error("lua test harness requires lb:task module") end
|
||||
if not ok then error("lua test harness requires 'lb:task'") end
|
||||
local ok, time = pcall(require, "lb:time")
|
||||
if not ok then error("lua test harness requires 'lb:time'") end
|
||||
local ok, fs = pcall(require, "lb:fs")
|
||||
if not ok then error("lua test harness requires lb:fs module") end
|
||||
if not ok then error("lua test harness requires 'lb:fs'") end
|
||||
|
||||
local global = _G
|
||||
local colors = {
|
||||
local color = {
|
||||
reset = "\x1b[0m",
|
||||
pass = "\x1b[32;1m", -- green
|
||||
fail = "\x1b[31;1m", -- red
|
||||
}
|
||||
|
||||
local icons = {
|
||||
local icon = {
|
||||
check = "\u{2713}",
|
||||
cross = "\u{00d7}",
|
||||
chevron = "\u{203a}",
|
||||
}
|
||||
|
||||
local function style(name, s)
|
||||
return ("%s%s%s"):format(colors[name], s, colors.reset)
|
||||
return ("%s%s%s"):format(color[name], s, color.reset)
|
||||
end
|
||||
|
||||
local function create_test(name, f, group)
|
||||
@@ -54,7 +56,7 @@ local function name_test(test)
|
||||
local name = test.name
|
||||
local group = test.group
|
||||
while group ~= nil do
|
||||
if group.name ~= "" then name = ("%s %s %s"):format(group.name, icons.chevron, name) end
|
||||
if group.name ~= "" then name = ("%s %s %s"):format(group.name, icon.chevron, name) end
|
||||
group = group.parent
|
||||
end
|
||||
return name
|
||||
@@ -106,7 +108,7 @@ end
|
||||
|
||||
local function main(item)
|
||||
local cx = { tasks = {} }
|
||||
local time, pass, fail = os.clock(), 0, 0
|
||||
local time, pass, fail = time.instant(), 0, 0
|
||||
start(cx, item)
|
||||
for _, task in ipairs(cx.tasks) do
|
||||
if task:await().state == "pass" then
|
||||
@@ -115,21 +117,25 @@ local function main(item)
|
||||
fail = fail + 1
|
||||
end
|
||||
end
|
||||
local time = (os.clock() - time) * 1000
|
||||
local elapsed = time:elapsed()
|
||||
local code = 1
|
||||
if fail == 0 then
|
||||
print("", style("pass", ("%s %d tests passed"):format(icons.check, pass)))
|
||||
print("", style("pass", ("%s %d tests passed"):format(icon.check, pass)))
|
||||
code = 0
|
||||
else
|
||||
print(
|
||||
"",
|
||||
("%s, %s"):format(
|
||||
style("pass", ("%s %d tests passed"):format(icons.check, pass)),
|
||||
style("fail", ("%s %d tests failed"):format(icons.cross, fail))
|
||||
style("pass", ("%s %d tests passed"):format(icon.check, pass)),
|
||||
style("fail", ("%s %d tests failed"):format(icon.cross, fail))
|
||||
)
|
||||
)
|
||||
end
|
||||
print("", ("%s completed in %d ms"):format(icons.chevron, time))
|
||||
if elapsed < 1000 then
|
||||
print("", ("%s completed in %.2f ms"):format(icon.chevron, elapsed * 1000))
|
||||
else
|
||||
print("", ("%s completed in %.2f s"):format(icon.chevron, elapsed))
|
||||
end
|
||||
cx = nil
|
||||
collectgarbage()
|
||||
check_refs()
|
||||
|
||||
Reference in New Issue
Block a user