2025-03-28 00:53:19 +00:00
< html > < head >
< link rel = "stylesheet" href = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css" >
< script src = "https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js" > < / script >
< style >
2025-03-28 01:29:50 +00:00
body { font-family: monospace; text-align: center; }
#funcTable table { margin: 0 auto; width: auto; max-width: 300px; font-size: 14px; border-collapse: collapse; }
#funcTable th, #funcTable td { padding: 2px 6px; text-align: left; white-space: nowrap; }
#funcTable th { background-color: #ddd; }
#funcTable td:nth-child(2) { text-align: right; min-width: 50px; }
2025-03-28 00:53:19 +00:00
.zero-hits { background-color: #fcc; font-weight: bold; color: red; }
.nonzero-hits { color: green; font-weight: bold; }
.low-hits { background-color: #ffe6b3; }
.high-hits { background-color: #cfc; }
2025-03-28 01:29:50 +00:00
.source-code-table { margin-left: 10px; }th, td { padding: 0px; font-size: 12px; }
2025-03-28 00:53:19 +00:00
table.table { font-size: 14px; border-collapse: collapse; }
table.table th, table.table td { padding: 1px; font-size: 12px; line-height: 1.2; }
table.table tr { height: auto; }
< / style > < / head > < body >
< h1 class = "text-center" > testkit.luau Coverage< / h1 >
2025-03-28 01:29:50 +00:00
< h2 > Total Execution Hits: 1826< / h2 >
< h2 > Function Coverage Overview: 64.52%< / h2 >
2025-03-28 00:53:19 +00:00
< button class = "btn btn-primary mb-2" type = "button" data-bs-toggle = "collapse" data-bs-target = "#funcTable" > Toggle Function Coverage< / button >
< div class = "collapse show" id = "funcTable" >
< h2 > Function Coverage:< / h2 > < table class = "table table-bordered" > < thead > < tr > < th > Function< / th > < th > Hits< / th > < / tr > < / thead > < tbody >
< tr > < td style = "padding: 1px; min-width: 22ch;" > < main > < / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > white_underline:11< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > white:15< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 24< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > green:19< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 77< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > red:23< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 146< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > yellow:27< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 76< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > red_highlight:31< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > green_highlight:35< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > gray:39< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 84< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > orange:43< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 73< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > convert_units:48< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 6< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > output_test_result:131< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 24< / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td style = "padding: 1px; min-width: 22ch;" > CASE:169< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 73< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > CHECK_EXPECT_ERR:183< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 9< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > CHECK:201< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1195< / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td style = "padding: 1px; min-width: 22ch;" > TEST:224< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 24< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > FOCUS:237< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td style = "padding: 1px; min-width: 22ch;" > FINISH:248< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1< / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td style = "padding: 1px; min-width: 22ch;" > < anonymous > :264< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > SKIP:314< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > START:330< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > BENCH:342< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 3< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > < anonymous > :354< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td style = "padding: 1px; min-width: 22ch;" > round:372< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 6< / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td style = "padding: 1px; min-width: 22ch;" > print2:396< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > tos:401< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > shallow_eq:480< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > deep_eq:500< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > test:533< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > benchmark:545< / td > < td style = "padding: 1px; color: green; font-weight: bold;" > 1< / td > < / tr >
< tr > < td style = "padding: 1px; min-width: 22ch;" > disable_formatting:549< / td > < td style = "padding: 1px; color: red; font-weight: bold;" > 0< / td > < / tr >
< / tbody > < / table > < / div >
2025-03-28 01:29:50 +00:00
< h2 > Source Code:< / h2 > < table class = "table table-bordered source-code-table " > < thead > < tr > < th > Line< / th > < th > Hits< / th > < th > Code< / th > < / tr > < / thead > < tbody >
2025-03-28 00:53:19 +00:00
< tr > < td > 1< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 2< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- testkit.luau< / td > >< / tr >
< tr > < td > 3< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- v0.7.3< / td > >< / tr >
< tr > < td > 4< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- MIT License< / td > >< / tr >
< tr > < td > 5< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- Copyright (c) 2022 centau< / td > >< / tr >
< tr > < td > 6< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 7< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 8< / td > < td > 1< / td > < td > < span class = low-hits > local disable_ansi = false< / span > < / td > < / tr >
< tr > < td > 9< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 10< / td > < td > 1< / td > < td > < span class = low-hits > local color = {< / span > < / td > < / tr >
< tr > < td > 11< / td > < td > 1< / td > < td > < span class = low-hits > white_underline = function(s: string): string< / span > < / td > < / tr >
< tr > < td > 12< / td > < td > 0< / td > < td > < span class = zero-hits > return if disable_ansi then s else `\27[1;4m{s}\27[0m`< / span > < / td > < / tr >
< tr > < td > 13< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 14< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 15< / td > < td > 1< / td > < td > < span class = low-hits > white = function(s: string): string< / span > < / td > < / tr >
< tr > < td > 16< / td > < td > 24< / td > < td > < span class = low-hits > return if disable_ansi then s else `\27[37;1m{s}\27[0m`< / span > < / td > < / tr >
< tr > < td > 17< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 18< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 19< / td > < td > 1< / td > < td > < span class = low-hits > green = function(s: string): string< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 20< / td > < td > 77< / td > < td > < span class = low-hits > return if disable_ansi then s else `\27[32;1m{s}\27[0m`< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 21< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 22< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 23< / td > < td > 1< / td > < td > < span class = low-hits > red = function(s: string): string< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 24< / td > < td > 146< / td > < td > < span class = low-hits > return if disable_ansi then s else `\27[31;1m{s}\27[0m`< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 25< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 26< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 27< / td > < td > 1< / td > < td > < span class = low-hits > yellow = function(s: string): string< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 28< / td > < td > 76< / td > < td > < span class = low-hits > return if disable_ansi then s else `\27[33;1m{s}\27[0m`< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 29< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 30< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 31< / td > < td > 1< / td > < td > < span class = low-hits > red_highlight = function(s: string): string< / span > < / td > < / tr >
< tr > < td > 32< / td > < td > 0< / td > < td > < span class = zero-hits > return if disable_ansi then s else `\27[41;1;30m{s}\27[0m`< / span > < / td > < / tr >
< tr > < td > 33< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 34< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 35< / td > < td > 1< / td > < td > < span class = low-hits > green_highlight = function(s: string): string< / span > < / td > < / tr >
< tr > < td > 36< / td > < td > 0< / td > < td > < span class = zero-hits > return if disable_ansi then s else `\27[42;1;30m{s}\27[0m`< / span > < / td > < / tr >
< tr > < td > 37< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 38< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 39< / td > < td > 1< / td > < td > < span class = low-hits > gray = function(s: string): string< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 40< / td > < td > 84< / td > < td > < span class = low-hits > return if disable_ansi then s else `\27[38;1m{s}\27[0m`< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 41< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 42< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 43< / td > < td > 1< / td > < td > < span class = low-hits > orange = function(s: string): string< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 44< / td > < td > 73< / td > < td > < span class = low-hits > return if disable_ansi then s else `\27[38;5;208m{s}\27[0m`< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 45< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 46< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 47< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 48< / td > < td > 1< / td > < td > < span class = low-hits > local function convert_units(unit: string, value: number): (number, string)< / span > < / td > < / tr >
< tr > < td > 49< / td > < td > 6< / td > < td > < span class = low-hits > local sign = math.sign(value)< / span > < / td > < / tr >
< tr > < td > 50< / td > < td > 6< / td > < td > < span class = low-hits > value = math.abs(value)< / span > < / td > < / tr >
< tr > < td > 51< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 52< / td > < td > 6< / td > < td > < span class = low-hits > local prefix_colors = {< / span > < / td > < / tr >
< tr > < td > 53< / td > < td > 6< / td > < td > < span class = low-hits > [4] = color.red,< / span > < / td > < / tr >
< tr > < td > 54< / td > < td > 6< / td > < td > < span class = low-hits > [3] = color.red,< / span > < / td > < / tr >
< tr > < td > 55< / td > < td > 6< / td > < td > < span class = low-hits > [2] = color.yellow,< / span > < / td > < / tr >
< tr > < td > 56< / td > < td > 6< / td > < td > < span class = low-hits > [1] = color.yellow,< / span > < / td > < / tr >
< tr > < td > 57< / td > < td > 6< / td > < td > < span class = low-hits > [0] = color.green,< / span > < / td > < / tr >
< tr > < td > 58< / td > < td > 6< / td > < td > < span class = low-hits > [-1] = color.red,< / span > < / td > < / tr >
< tr > < td > 59< / td > < td > 6< / td > < td > < span class = low-hits > [-2] = color.yellow,< / span > < / td > < / tr >
< tr > < td > 60< / td > < td > 6< / td > < td > < span class = low-hits > [-3] = color.green,< / span > < / td > < / tr >
< tr > < td > 61< / td > < td > 6< / td > < td > < span class = low-hits > [-4] = color.red,< / span > < / td > < / tr >
< tr > < td > 62< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 63< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 64< / td > < td > 6< / td > < td > < span class = low-hits > local prefixes = {< / span > < / td > < / tr >
< tr > < td > 65< / td > < td > 6< / td > < td > < span class = low-hits > [4] = "T",< / span > < / td > < / tr >
< tr > < td > 66< / td > < td > 6< / td > < td > < span class = low-hits > [3] = "G",< / span > < / td > < / tr >
< tr > < td > 67< / td > < td > 6< / td > < td > < span class = low-hits > [2] = "M",< / span > < / td > < / tr >
< tr > < td > 68< / td > < td > 6< / td > < td > < span class = low-hits > [1] = "k",< / span > < / td > < / tr >
< tr > < td > 69< / td > < td > 6< / td > < td > < span class = low-hits > [0] = " ",< / span > < / td > < / tr >
< tr > < td > 70< / td > < td > 6< / td > < td > < span class = low-hits > [-1] = "m",< / span > < / td > < / tr >
< tr > < td > 71< / td > < td > 6< / td > < td > < span class = low-hits > [-2] = "u",< / span > < / td > < / tr >
< tr > < td > 72< / td > < td > 6< / td > < td > < span class = low-hits > [-3] = "n",< / span > < / td > < / tr >
< tr > < td > 73< / td > < td > 6< / td > < td > < span class = low-hits > [-4] = "p",< / span > < / td > < / tr >
< tr > < td > 74< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 75< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 76< / td > < td > 6< / td > < td > < span class = low-hits > local order = 0< / span > < / td > < / tr >
< tr > < td > 77< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 78< / td > < td > 7< / td > < td > < span class = low-hits > while value >= 1000 do< / span > < / td > < / tr >
< tr > < td > 79< / td > < td > 1< / td > < td > < span class = low-hits > order += 1< / span > < / td > < / tr >
< tr > < td > 80< / td > < td > 1< / td > < td > < span class = low-hits > value /= 1000< / span > < / td > < / tr >
< tr > < td > 81< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 82< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 83< / td > < td > 11< / td > < td > < span class = low-hits > while value ~= 0 and value < 1 do < / span > < / td > < / tr >
< tr > < td > 84< / td > < td > 7< / td > < td > < span class = low-hits > order -= 1< / span > < / td > < / tr >
< tr > < td > 85< / td > < td > 7< / td > < td > < span class = low-hits > value *= 1000< / span > < / td > < / tr >
< tr > < td > 86< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 87< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 88< / td > < td > 6< / td > < td > < span class = low-hits > if value >= 100 then< / span > < / td > < / tr >
< tr > < td > 89< / td > < td > 1< / td > < td > < span class = low-hits > value = math.floor(value)< / span > < / td > < / tr >
< tr > < td > 90< / td > < td > 5< / td > < td > < span class = low-hits > elseif value >= 10 then< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 91< / td > < td > 2< / td > < td > < span class = low-hits > value = math.floor(value * 1e1) / 1e1< / span > < / td > < / tr >
< tr > < td > 92< / td > < td > 3< / td > < td > < span class = low-hits > elseif value >= 1 then< / span > < / td > < / tr >
< tr > < td > 93< / td > < td > 1< / td > < td > < span class = low-hits > value = math.floor(value * 1e2) / 1e2< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 94< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 95< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 96< / td > < td > 6< / td > < td > < span class = low-hits > return value * sign, prefix_colors[order](prefixes[order] .. unit)< / span > < / td > < / tr >
< tr > < td > 97< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 98< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 99< / td > < td > 1< / td > < td > < span class = low-hits > local WALL = color.gray("│")< / span > < / td > < / tr >
< tr > < td > 100< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 101< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 102< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- Testing< / td > >< / tr >
< tr > < td > 103< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 104< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 105< / td > < td > 0< / td > < td > < span class = zero-hits > type Test = {< / span > < / td > < / tr >
< tr > < td > 106< / td > < td > 0< / td > < td > < span class = zero-hits > name: string,< / span > < / td > < / tr >
< tr > < td > 107< / td > < td > 0< / td > < td > < span class = zero-hits > case: Case?,< / span > < / td > < / tr >
< tr > < td > 108< / td > < td > 0< / td > < td > < span class = zero-hits > cases: { Case },< / span > < / td > < / tr >
< tr > < td > 109< / td > < td > 0< / td > < td > < span class = zero-hits > duration: number,< / span > < / td > < / tr >
< tr > < td > 110< / td > < td > 0< / td > < td > < span class = zero-hits > error: {< / span > < / td > < / tr >
< tr > < td > 111< / td > < td > 0< / td > < td > < span class = zero-hits > message: string,< / span > < / td > < / tr >
< tr > < td > 112< / td > < td > 0< / td > < td > < span class = zero-hits > trace: string,< / span > < / td > < / tr >
< tr > < td > 113< / td > < td > 0< / td > < td > < span class = zero-hits > }?,< / span > < / td > < / tr >
< tr > < td > 114< / td > < td > 0< / td > < td > < span class = zero-hits > focus: boolean,< / span > < / td > < / tr >
< tr > < td > 115< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 116< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 117< / td > < td > 0< / td > < td > < span class = zero-hits > type Case = {< / span > < / td > < / tr >
< tr > < td > 118< / td > < td > 0< / td > < td > < span class = zero-hits > name: string,< / span > < / td > < / tr >
< tr > < td > 119< / td > < td > 0< / td > < td > < span class = zero-hits > result: number,< / span > < / td > < / tr >
< tr > < td > 120< / td > < td > 0< / td > < td > < span class = zero-hits > line: number?,< / span > < / td > < / tr >
< tr > < td > 121< / td > < td > 0< / td > < td > < span class = zero-hits > focus: boolean,< / span > < / td > < / tr >
< tr > < td > 122< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 123< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 124< / td > < td > 1< / td > < td > < span class = low-hits > local PASS, FAIL, NONE, ERROR, SKIPPED = 1, 2, 3, 4, 5< / span > < / td > < / tr >
< tr > < td > 125< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 126< / td > < td > 1< / td > < td > < span class = low-hits > local check_for_focused = false< / span > < / td > < / tr >
< tr > < td > 127< / td > < td > 1< / td > < td > < span class = low-hits > local skip = false< / span > < / td > < / tr >
< tr > < td > 128< / td > < td > 1< / td > < td > < span class = low-hits > local test: Test?< / span > < / td > < / tr >
< tr > < td > 129< / td > < td > 1< / td > < td > < span class = low-hits > local tests: { Test } = {}< / span > < / td > < / tr >
< tr > < td > 130< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 131< / td > < td > 1< / td > < td > < span class = low-hits > local function output_test_result(test: Test)< / span > < / td > < / tr >
< tr > < td > 132< / td > < td > 24< / td > < td > < span class = low-hits > if check_for_focused then< / span > < / td > < / tr >
< tr > < td > 133< / td > < td > 0< / td > < td > < span class = zero-hits > local any_focused = test.focus< / span > < / td > < / tr >
< tr > < td > 134< / td > < td > 0< / td > < td > < span class = zero-hits > for _, case in test.cases do< / span > < / td > < / tr >
< tr > < td > 135< / td > < td > 0< / td > < td > < span class = zero-hits > any_focused = any_focused or case.focus< / span > < / td > < / tr >
< tr > < td > 136< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 137< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 138< / td > < td > 0< / td > < td > < span class = zero-hits > if not any_focused then< / span > < / td > < / tr >
< tr > < td > 139< / td > < td > 0< / td > < td > < span class = zero-hits > return< / span > < / td > < / tr >
< tr > < td > 140< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 141< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 142< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 143< / td > < td > 24< / td > < td > < span class = low-hits > print(color.white(test.name))< / span > < / td > < / tr >
< tr > < td > 144< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 145< / td > < td > 24< / td > < td > < span class = low-hits > for _, case in test.cases do< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 146< / td > < td > 73< / td > < td > < span class = low-hits > local status = ({< / span > < / td > < / tr >
< tr > < td > 147< / td > < td > 73< / td > < td > < span class = low-hits > [PASS] = color.green("PASS"),< / span > < / td > < / tr >
< tr > < td > 148< / td > < td > 73< / td > < td > < span class = low-hits > [FAIL] = color.red("FAIL"),< / span > < / td > < / tr >
< tr > < td > 149< / td > < td > 73< / td > < td > < span class = low-hits > [NONE] = color.orange("NONE"),< / span > < / td > < / tr >
< tr > < td > 150< / td > < td > 73< / td > < td > < span class = low-hits > [ERROR] = color.red("FAIL"),< / span > < / td > < / tr >
< tr > < td > 151< / td > < td > 73< / td > < td > < span class = low-hits > [SKIPPED] = color.yellow("SKIP"),< / span > < / td > < / tr >
< tr > < td > 152< / td > < td > 73< / td > < td > < span class = low-hits > })[case.result]< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 153< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 154< / td > < td > 73< / td > < td > < span class = low-hits > local line = case.result == FAIL and color.red(`{case.line}:`) or ""< / span > < / td > < / tr >
< tr > < td > 155< / td > < td > 73< / td > < td > < span class = low-hits > if check_for_focused and case.focus == false and test.focus == false then< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 156< / td > < td > 0< / td > < td > < span class = zero-hits > continue< / span > < / td > < / tr >
< tr > < td > 157< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 158< / td > < td > 73< / td > < td > < span class = low-hits > print(`{status}{WALL} {line}{color.gray(case.name)}`)< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 159< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 160< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 161< / td > < td > 24< / td > < td > < span class = low-hits > if test.error then< / span > < / td > < / tr >
< tr > < td > 162< / td > < td > 0< / td > < td > < span class = zero-hits > print(color.gray("error: ") .. color.red(test.error.message))< / span > < / td > < / tr >
< tr > < td > 163< / td > < td > 0< / td > < td > < span class = zero-hits > print(color.gray("trace: ") .. color.red(test.error.trace))< / span > < / td > < / tr >
< tr > < td > 164< / td > < td > 0< / td > < td > < span class = zero-hits > else< / span > < / td > < / tr >
< tr > < td > 165< / td > < td > 24< / td > < td > < span class = low-hits > print()< / span > < / td > < / tr >
< tr > < td > 166< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 167< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 168< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 169< / td > < td > 1< / td > < td > < span class = low-hits > local function CASE(name: string)< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 170< / td > < td > 73< / td > < td > < span class = low-hits > skip = false< / span > < / td > < / tr >
< tr > < td > 171< / td > < td > 73< / td > < td > < span class = low-hits > assert(test, "no active test")< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 172< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 173< / td > < td > 73< / td > < td > < span class = low-hits > local case = {< / span > < / td > < / tr >
< tr > < td > 174< / td > < td > 73< / td > < td > < span class = low-hits > name = name,< / span > < / td > < / tr >
< tr > < td > 175< / td > < td > 73< / td > < td > < span class = low-hits > result = NONE,< / span > < / td > < / tr >
< tr > < td > 176< / td > < td > 73< / td > < td > < span class = low-hits > focus = false,< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 177< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 178< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 179< / td > < td > 73< / td > < td > < span class = low-hits > test.case = case< / span > < / td > < / tr >
< tr > < td > 180< / td > < td > 73< / td > < td > < span class = low-hits > table.insert(test.cases, case)< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 181< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 182< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 183< / td > < td > 1< / td > < td > < span class = low-hits > local function CHECK_EXPECT_ERR(fn, ...)< / span > < / td > < / tr >
< tr > < td > 184< / td > < td > 9< / td > < td > < span class = low-hits > assert(test, "no active test")< / span > < / td > < / tr >
< tr > < td > 185< / td > < td > 9< / td > < td > < span class = low-hits > local case = test.case< / span > < / td > < / tr >
< tr > < td > 186< / td > < td > 9< / td > < td > < span class = low-hits > if not case then< / span > < / td > < / tr >
< tr > < td > 187< / td > < td > 0< / td > < td > < span class = zero-hits > CASE("")< / span > < / td > < / tr >
< tr > < td > 188< / td > < td > 0< / td > < td > < span class = zero-hits > case = test.case< / span > < / td > < / tr >
< tr > < td > 189< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 190< / td > < td > 9< / td > < td > < span class = low-hits > assert(case, "no active case")< / span > < / td > < / tr >
< tr > < td > 191< / td > < td > 9< / td > < td > < span class = low-hits > if case.result ~= FAIL then< / span > < / td > < / tr >
< tr > < td > 192< / td > < td > 9< / td > < td > < span class = low-hits > local ok, err = pcall(fn, ...)< / span > < / td > < / tr >
< tr > < td > 193< / td > < td > 9< / td > < td > < span class = low-hits > case.result = if ok then FAIL else PASS< / span > < / td > < / tr >
< tr > < td > 194< / td > < td > 9< / td > < td > < span class = low-hits > if skip then< / span > < / td > < / tr >
< tr > < td > 195< / td > < td > 0< / td > < td > < span class = zero-hits > case.result = SKIPPED< / span > < / td > < / tr >
< tr > < td > 196< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 197< / td > < td > 9< / td > < td > < span class = low-hits > case.line = debug.info(stack and stack + 1 or 2, "l")< / span > < / td > < / tr >
< tr > < td > 198< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 199< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 200< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 201< / td > < td > 1< / td > < td > < span class = low-hits > local function CHECK< T > (value: T, stack: number?): T?< / span > < / td > < / tr >
< tr > < td > 202< / td > < td > 1195< / td > < td > < span class = high-hits > assert(test, "no active test")< / span > < / td > < / tr >
< tr > < td > 203< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 204< / td > < td > 1195< / td > < td > < span class = high-hits > local case = test.case< / span > < / td > < / tr >
< tr > < td > 205< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 206< / td > < td > 1195< / td > < td > < span class = high-hits > if not case then< / span > < / td > < / tr >
< tr > < td > 207< / td > < td > 9< / td > < td > < span class = low-hits > CASE("")< / span > < / td > < / tr >
< tr > < td > 208< / td > < td > 9< / td > < td > < span class = low-hits > case = test.case< / span > < / td > < / tr >
< tr > < td > 209< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 210< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 211< / td > < td > 1195< / td > < td > < span class = high-hits > assert(case, "no active case")< / span > < / td > < / tr >
< tr > < td > 212< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 213< / td > < td > 1195< / td > < td > < span class = high-hits > if case.result ~= FAIL then< / span > < / td > < / tr >
< tr > < td > 214< / td > < td > 1195< / td > < td > < span class = high-hits > case.result = value and PASS or FAIL< / span > < / td > < / tr >
< tr > < td > 215< / td > < td > 1195< / td > < td > < span class = high-hits > if skip then< / span > < / td > < / tr >
< tr > < td > 216< / td > < td > 1< / td > < td > < span class = low-hits > case.result = SKIPPED< / span > < / td > < / tr >
< tr > < td > 217< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 218< / td > < td > 1195< / td > < td > < span class = high-hits > case.line = debug.info(stack and stack + 1 or 2, "l")< / span > < / td > < / tr >
< tr > < td > 219< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 220< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 221< / td > < td > 1195< / td > < td > < span class = high-hits > return value< / span > < / td > < / tr >
< tr > < td > 222< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 223< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 224< / td > < td > 1< / td > < td > < span class = low-hits > local function TEST(name: string, fn: () -> ())< / span > < / td > < / tr >
< tr > < td > 225< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 226< / td > < td > 24< / td > < td > < span class = low-hits > test = {< / span > < / td > < / tr >
< tr > < td > 227< / td > < td > 24< / td > < td > < span class = low-hits > name = name,< / span > < / td > < / tr >
< tr > < td > 228< / td > < td > 24< / td > < td > < span class = low-hits > cases = {},< / span > < / td > < / tr >
< tr > < td > 229< / td > < td > 24< / td > < td > < span class = low-hits > duration = 0,< / span > < / td > < / tr >
< tr > < td > 230< / td > < td > 24< / td > < td > < span class = low-hits > focus = false,< / span > < / td > < / tr >
< tr > < td > 231< / td > < td > 24< / td > < td > < span class = low-hits > fn = fn< / span > < / td > < / tr >
< tr > < td > 232< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 233< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 234< / td > < td > 24< / td > < td > < span class = low-hits > table.insert(tests, test)< / span > < / td > < / tr >
< tr > < td > 235< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 236< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 237< / td > < td > 1< / td > < td > < span class = low-hits > local function FOCUS()< / span > < / td > < / tr >
< tr > < td > 238< / td > < td > 0< / td > < td > < span class = zero-hits > assert(test, "no active test")< / span > < / td > < / tr >
< tr > < td > 239< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 240< / td > < td > 0< / td > < td > < span class = zero-hits > check_for_focused = true< / span > < / td > < / tr >
< tr > < td > 241< / td > < td > 0< / td > < td > < span class = zero-hits > if test.case then< / span > < / td > < / tr >
< tr > < td > 242< / td > < td > 0< / td > < td > < span class = zero-hits > test.case.focus = true< / span > < / td > < / tr >
< tr > < td > 243< / td > < td > 0< / td > < td > < span class = zero-hits > else< / span > < / td > < / tr >
< tr > < td > 244< / td > < td > 0< / td > < td > < span class = zero-hits > test.focus = true< / span > < / td > < / tr >
< tr > < td > 245< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 246< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 247< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 248< / td > < td > 1< / td > < td > < span class = low-hits > local function FINISH(): boolean< / span > < / td > < / tr >
< tr > < td > 249< / td > < td > 1< / td > < td > < span class = low-hits > local success = true< / span > < / td > < / tr >
< tr > < td > 250< / td > < td > 1< / td > < td > < span class = low-hits > local total_cases = 0< / span > < / td > < / tr >
< tr > < td > 251< / td > < td > 1< / td > < td > < span class = low-hits > local passed_cases = 0< / span > < / td > < / tr >
< tr > < td > 252< / td > < td > 1< / td > < td > < span class = low-hits > local passed_focus_cases = 0< / span > < / td > < / tr >
< tr > < td > 253< / td > < td > 1< / td > < td > < span class = low-hits > local total_focus_cases = 0< / span > < / td > < / tr >
< tr > < td > 254< / td > < td > 1< / td > < td > < span class = low-hits > local duration = 0< / span > < / td > < / tr >
< tr > < td > 255< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 256< / td > < td > 1< / td > < td > < span class = low-hits > for _, t in tests do< / span > < / td > < / tr >
< tr > < td > 257< / td > < td > 24< / td > < td > < span class = low-hits > if check_for_focused and not t.focus then< / span > < / td > < / tr >
< tr > < td > 258< / td > < td > 0< / td > < td > < span class = zero-hits > continue< / span > < / td > < / tr >
< tr > < td > 259< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 260< / td > < td > 24< / td > < td > < span class = low-hits > test = t< / span > < / td > < / tr >
< tr > < td > 261< / td > < td > 24< / td > < td > < span class = low-hits > fn = t.fn< / span > < / td > < / tr >
< tr > < td > 262< / td > < td > 24< / td > < td > < span class = low-hits > local start = os.clock()< / span > < / td > < / tr >
< tr > < td > 263< / td > < td > 24< / td > < td > < span class = low-hits > local err< / span > < / td > < / tr >
< tr > < td > 264< / td > < td > 24< / td > < td > < span class = low-hits > local success = xpcall(fn, function(m: string)< / span > < / td > < / tr >
< tr > < td > 265< / td > < td > 0< / td > < td > < span class = zero-hits > err = { message = m, trace = debug.traceback(nil, 2) }< / span > < / td > < / tr >
< tr > < td > 266< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end)< / td > >< / tr >
< tr > < td > 267< / td > < td > 24< / td > < td > < span class = low-hits > test.duration = os.clock() - start< / span > < / td > < / tr >
< tr > < td > 268< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 269< / td > < td > 24< / td > < td > < span class = low-hits > if not test.case then< / span > < / td > < / tr >
< tr > < td > 270< / td > < td > 0< / td > < td > < span class = zero-hits > CASE("")< / span > < / td > < / tr >
< tr > < td > 271< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 272< / td > < td > 24< / td > < td > < span class = low-hits > assert(test.case, "no active case")< / span > < / td > < / tr >
< tr > < td > 273< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 274< / td > < td > 24< / td > < td > < span class = low-hits > if not success then< / span > < / td > < / tr >
< tr > < td > 275< / td > < td > 0< / td > < td > < span class = zero-hits > test.case.result = ERROR< / span > < / td > < / tr >
< tr > < td > 276< / td > < td > 0< / td > < td > < span class = zero-hits > test.error = err< / span > < / td > < / tr >
< tr > < td > 277< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 278< / td > < td > 24< / td > < td > < span class = low-hits > collectgarbage()< / span > < / td > < / tr >
< tr > < td > 279< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 280< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 281< / td > < td > 1< / td > < td > < span class = low-hits > for _, test in tests do< / span > < / td > < / tr >
< tr > < td > 282< / td > < td > 24< / td > < td > < span class = low-hits > duration += test.duration< / span > < / td > < / tr >
< tr > < td > 283< / td > < td > 24< / td > < td > < span class = low-hits > for _, case in test.cases do< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 284< / td > < td > 73< / td > < td > < span class = low-hits > total_cases += 1< / span > < / td > < / tr >
< tr > < td > 285< / td > < td > 73< / td > < td > < span class = low-hits > if case.focus or test.focus then< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 286< / td > < td > 0< / td > < td > < span class = zero-hits > total_focus_cases += 1< / span > < / td > < / tr >
< tr > < td > 287< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 288< / td > < td > 73< / td > < td > < span class = low-hits > if case.result == PASS or case.result == NONE or case.result == SKIPPED then< / span > < / td > < / tr >
< tr > < td > 289< / td > < td > 73< / td > < td > < span class = low-hits > if case.focus or test.focus then< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 290< / td > < td > 0< / td > < td > < span class = zero-hits > passed_focus_cases += 1< / span > < / td > < / tr >
< tr > < td > 291< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 292< / td > < td > 73< / td > < td > < span class = low-hits > passed_cases += 1< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 293< / td > < td > 0< / td > < td > < span class = zero-hits > else< / span > < / td > < / tr >
< tr > < td > 294< / td > < td > 0< / td > < td > < span class = zero-hits > success = false< / span > < / td > < / tr >
< tr > < td > 295< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 296< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 297< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 298< / td > < td > 24< / td > < td > < span class = low-hits > output_test_result(test)< / span > < / td > < / tr >
< tr > < td > 299< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 300< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 301< / td > < td > 1< / td > < td > < span class = low-hits > print(color.gray(string.format(`{passed_cases}/{total_cases} test cases passed in %.3f ms.`, duration * 1e3)))< / span > < / td > < / tr >
< tr > < td > 302< / td > < td > 1< / td > < td > < span class = low-hits > if check_for_focused then< / span > < / td > < / tr >
< tr > < td > 303< / td > < td > 0< / td > < td > < span class = zero-hits > print(color.gray(`{passed_focus_cases}/{total_focus_cases} focused test cases passed`))< / span > < / td > < / tr >
< tr > < td > 304< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 305< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 306< / td > < td > 1< / td > < td > < span class = low-hits > local fails = total_cases - passed_cases< / span > < / td > < / tr >
< tr > < td > 307< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 308< / td > < td > 1< / td > < td > < span class = low-hits > print((fails > 0 and color.red or color.green)(`{fails} {fails == 1 and "fail" or "fails"}`))< / span > < / td > < / tr >
< tr > < td > 309< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 310< / td > < td > 1< / td > < td > < span class = low-hits > check_for_focused = false< / span > < / td > < / tr >
< tr > < td > 311< / td > < td > 1< / td > < td > < span class = low-hits > return success, table.clear(tests)< / span > < / td > < / tr >
< tr > < td > 312< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 313< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 314< / td > < td > 1< / td > < td > < span class = low-hits > local function SKIP()< / span > < / td > < / tr >
< tr > < td > 315< / td > < td > 1< / td > < td > < span class = low-hits > skip = true< / span > < / td > < / tr >
< tr > < td > 316< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 317< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 318< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 319< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- Benchmarking< / td > >< / tr >
< tr > < td > 320< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 321< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 322< / td > < td > 0< / td > < td > < span class = zero-hits > type Bench = {< / span > < / td > < / tr >
< tr > < td > 323< / td > < td > 0< / td > < td > < span class = zero-hits > time_start: number?,< / span > < / td > < / tr >
< tr > < td > 324< / td > < td > 0< / td > < td > < span class = zero-hits > memory_start: number?,< / span > < / td > < / tr >
< tr > < td > 325< / td > < td > 0< / td > < td > < span class = zero-hits > iterations: number?,< / span > < / td > < / tr >
< tr > < td > 326< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 327< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 328< / td > < td > 1< / td > < td > < span class = low-hits > local bench: Bench?< / span > < / td > < / tr >
< tr > < td > 329< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 330< / td > < td > 1< / td > < td > < span class = low-hits > function START(iter: number?): number< / span > < / td > < / tr >
< tr > < td > 331< / td > < td > 1< / td > < td > < span class = low-hits > local n = iter or 1< / span > < / td > < / tr >
< tr > < td > 332< / td > < td > 1< / td > < td > < span class = low-hits > assert(n > 0, "iterations must be greater than 0")< / span > < / td > < / tr >
< tr > < td > 333< / td > < td > 1< / td > < td > < span class = low-hits > assert(bench, "no active benchmark")< / span > < / td > < / tr >
< tr > < td > 334< / td > < td > 1< / td > < td > < span class = low-hits > assert(not bench.time_start, "clock was already started")< / span > < / td > < / tr >
< tr > < td > 335< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 336< / td > < td > 1< / td > < td > < span class = low-hits > bench.iterations = n< / span > < / td > < / tr >
< tr > < td > 337< / td > < td > 1< / td > < td > < span class = low-hits > bench.memory_start = gcinfo()< / span > < / td > < / tr >
< tr > < td > 338< / td > < td > 1< / td > < td > < span class = low-hits > bench.time_start = os.clock()< / span > < / td > < / tr >
< tr > < td > 339< / td > < td > 1< / td > < td > < span class = low-hits > return n< / span > < / td > < / tr >
< tr > < td > 340< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 341< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 342< / td > < td > 1< / td > < td > < span class = low-hits > local function BENCH(name: string, fn: () -> ())< / span > < / td > < / tr >
< tr > < td > 343< / td > < td > 3< / td > < td > < span class = low-hits > local active = bench< / span > < / td > < / tr >
< tr > < td > 344< / td > < td > 3< / td > < td > < span class = low-hits > assert(not active, "a benchmark is already in progress")< / span > < / td > < / tr >
< tr > < td > 345< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 346< / td > < td > 3< / td > < td > < span class = low-hits > bench = {}< / span > < / td > < / tr >
< tr > < td > 347< / td > < td > 3< / td > < td > < span class = low-hits > assert(bench);< / span > < / td > < / tr >
< tr > < td > 348< / td > < td > 3< / td > < td > < span class = low-hits > (collectgarbage :: any)("collect")< / span > < / td > < / tr >
< tr > < td > 349< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 350< / td > < td > 3< / td > < td > < span class = low-hits > local mem_start = gcinfo()< / span > < / td > < / tr >
< tr > < td > 351< / td > < td > 3< / td > < td > < span class = low-hits > local time_start = os.clock()< / span > < / td > < / tr >
< tr > < td > 352< / td > < td > 3< / td > < td > < span class = low-hits > local err_msg: string?< / span > < / td > < / tr >
< tr > < td > 353< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 354< / td > < td > 3< / td > < td > < span class = low-hits > local success = xpcall(fn, function(m: string)< / span > < / td > < / tr >
< tr > < td > 355< / td > < td > 0< / td > < td > < span class = zero-hits > err_msg = m .. debug.traceback(nil, 2)< / span > < / td > < / tr >
< tr > < td > 356< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end)< / td > >< / tr >
< tr > < td > 357< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 358< / td > < td > 3< / td > < td > < span class = low-hits > local time_stop = os.clock()< / span > < / td > < / tr >
< tr > < td > 359< / td > < td > 3< / td > < td > < span class = low-hits > local mem_stop = gcinfo()< / span > < / td > < / tr >
< tr > < td > 360< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 361< / td > < td > 3< / td > < td > < span class = low-hits > if not success then< / span > < / td > < / tr >
< tr > < td > 362< / td > < td > 0< / td > < td > < span class = zero-hits > print(`{WALL}{color.red("ERROR")}{WALL} {name}`)< / span > < / td > < / tr >
< tr > < td > 363< / td > < td > 0< / td > < td > < span class = zero-hits > print(color.gray(err_msg :: string))< / span > < / td > < / tr >
< tr > < td > 364< / td > < td > 0< / td > < td > < span class = zero-hits > else< / span > < / td > < / tr >
< tr > < td > 365< / td > < td > 3< / td > < td > < span class = low-hits > time_start = bench.time_start or time_start< / span > < / td > < / tr >
< tr > < td > 366< / td > < td > 3< / td > < td > < span class = low-hits > mem_start = bench.memory_start or mem_start< / span > < / td > < / tr >
< tr > < td > 367< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 368< / td > < td > 3< / td > < td > < span class = low-hits > local n = bench.iterations or 1< / span > < / td > < / tr >
< tr > < td > 369< / td > < td > 3< / td > < td > < span class = low-hits > local d, d_unit = convert_units("s", (time_stop - time_start) / n)< / span > < / td > < / tr >
< tr > < td > 370< / td > < td > 3< / td > < td > < span class = low-hits > local a, a_unit = convert_units("B", math.round((mem_stop - mem_start) / n * 1e3))< / span > < / td > < / tr >
< tr > < td > 371< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 372< / td > < td > 3< / td > < td > < span class = low-hits > local function round(x: number): string< / span > < / td > < / tr >
2025-03-28 01:29:50 +00:00
< tr > < td > 373< / td > < td > 6< / td > < td > < span class = low-hits > return x > 0 and x < 10 and ( x - math . floor ( x ) ) > 0 and string.format("%2.1f", x)< / span > < / td > < / tr >
< tr > < td > 374< / td > < td > 6< / td > < td > < span class = low-hits > or string.format("%3.f", x)< / span > < / td > < / tr >
2025-03-28 00:53:19 +00:00
< tr > < td > 375< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 376< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 377< / td > < td > 3< / td > < td > < span class = low-hits > print(< / span > < / td > < / tr >
< tr > < td > 378< / td > < td > 3< / td > < td > < span class = low-hits > string.format(< / span > < / td > < / tr >
< tr > < td > 379< / td > < td > 3< / td > < td > < span class = low-hits > `%s %s %s %s{WALL} %s`,< / span > < / td > < / tr >
< tr > < td > 380< / td > < td > 3< / td > < td > < span class = low-hits > color.gray(round(d)),< / span > < / td > < / tr >
< tr > < td > 381< / td > < td > 3< / td > < td > < span class = low-hits > d_unit,< / span > < / td > < / tr >
< tr > < td > 382< / td > < td > 3< / td > < td > < span class = low-hits > color.gray(round(a)),< / span > < / td > < / tr >
< tr > < td > 383< / td > < td > 3< / td > < td > < span class = low-hits > a_unit,< / span > < / td > < / tr >
< tr > < td > 384< / td > < td > 3< / td > < td > < span class = low-hits > color.gray(name)< / span > < / td > < / tr >
< tr > < td > 385< / td > < td > 0< / td > < td > < span class = zero-hits > )< / span > < / td > < / tr >
< tr > < td > 386< / td > < td > 0< / td > < td > < span class = zero-hits > )< / span > < / td > < / tr >
< tr > < td > 387< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 388< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 389< / td > < td > 3< / td > < td > < span class = low-hits > bench = nil< / span > < / td > < / tr >
< tr > < td > 390< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 391< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 392< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 393< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- Printing< / td > >< / tr >
< tr > < td > 394< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 395< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 396< / td > < td > 1< / td > < td > < span class = low-hits > local function print2(v: unknown)< / span > < / td > < / tr >
< tr > < td > 397< / td > < td > 0< / td > < td > < span class = zero-hits > type Buffer = { n: number, [number]: string }< / span > < / td > < / tr >
< tr > < td > 398< / td > < td > 0< / td > < td > < span class = zero-hits > type Cyclic = { n: number, [{}]: number }< / span > < / td > < / tr >
< tr > < td > 399< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 400< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- overkill concatenationless string buffer< / td > >< / tr >
< tr > < td > 401< / td > < td > 0< / td > < td > < span class = zero-hits > local function tos(value: any, stack: number, str: Buffer, cyclic: Cyclic)< / span > < / td > < / tr >
< tr > < td > 402< / td > < td > 0< / td > < td > < span class = zero-hits > local TAB = " "< / span > < / td > < / tr >
< tr > < td > 403< / td > < td > 0< / td > < td > < span class = zero-hits > local indent = table.concat(table.create(stack, TAB))< / span > < / td > < / tr >
< tr > < td > 404< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 405< / td > < td > 0< / td > < td > < span class = zero-hits > if type(value) == "string" then< / span > < / td > < / tr >
< tr > < td > 406< / td > < td > 0< / td > < td > < span class = zero-hits > local n = str.n< / span > < / td > < / tr >
< tr > < td > 407< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = "\""< / span > < / td > < / tr >
< tr > < td > 408< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 2] = value< / span > < / td > < / tr >
< tr > < td > 409< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 3] = "\""< / span > < / td > < / tr >
< tr > < td > 410< / td > < td > 0< / td > < td > < span class = zero-hits > str.n = n + 3< / span > < / td > < / tr >
< tr > < td > 411< / td > < td > 0< / td > < td > < span class = zero-hits > elseif type(value) ~= "table" then< / span > < / td > < / tr >
< tr > < td > 412< / td > < td > 0< / td > < td > < span class = zero-hits > local n = str.n< / span > < / td > < / tr >
< tr > < td > 413< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = value == nil and "nil" or tostring(value)< / span > < / td > < / tr >
< tr > < td > 414< / td > < td > 0< / td > < td > < span class = zero-hits > str.n = n + 1< / span > < / td > < / tr >
< tr > < td > 415< / td > < td > 0< / td > < td > < span class = zero-hits > elseif next(value) == nil then< / span > < / td > < / tr >
< tr > < td > 416< / td > < td > 0< / td > < td > < span class = zero-hits > local n = str.n< / span > < / td > < / tr >
< tr > < td > 417< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = "{}"< / span > < / td > < / tr >
< tr > < td > 418< / td > < td > 0< / td > < td > < span class = zero-hits > str.n = n + 1< / span > < / td > < / tr >
< tr > < td > 419< / td > < td > 0< / td > < td > < span class = zero-hits > else -- is table< / span > < / td > < / tr >
< tr > < td > 420< / td > < td > 0< / td > < td > < span class = zero-hits > local tabbed_indent = indent .. TAB< / span > < / td > < / tr >
< tr > < td > 421< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 422< / td > < td > 0< / td > < td > < span class = zero-hits > if cyclic[value] then< / span > < / td > < / tr >
< tr > < td > 423< / td > < td > 0< / td > < td > < span class = zero-hits > str.n += 1< / span > < / td > < / tr >
< tr > < td > 424< / td > < td > 0< / td > < td > < span class = zero-hits > str[str.n] = color.gray(`CYCLIC REF {cyclic[value]}`)< / span > < / td > < / tr >
< tr > < td > 425< / td > < td > 0< / td > < td > < span class = zero-hits > return< / span > < / td > < / tr >
< tr > < td > 426< / td > < td > 0< / td > < td > < span class = zero-hits > else< / span > < / td > < / tr >
< tr > < td > 427< / td > < td > 0< / td > < td > < span class = zero-hits > cyclic.n += 1< / span > < / td > < / tr >
< tr > < td > 428< / td > < td > 0< / td > < td > < span class = zero-hits > cyclic[value] = cyclic.n< / span > < / td > < / tr >
< tr > < td > 429< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 430< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 431< / td > < td > 0< / td > < td > < span class = zero-hits > str.n += 3< / span > < / td > < / tr >
< tr > < td > 432< / td > < td > 0< / td > < td > < span class = zero-hits > str[str.n - 2] = "{ "< / span > < / td > < / tr >
< tr > < td > 433< / td > < td > 0< / td > < td > < span class = zero-hits > str[str.n - 1] = color.gray(tostring(cyclic[value]))< / span > < / td > < / tr >
< tr > < td > 434< / td > < td > 0< / td > < td > < span class = zero-hits > str[str.n - 0] = "\n"< / span > < / td > < / tr >
< tr > < td > 435< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 436< / td > < td > 0< / td > < td > < span class = zero-hits > local i, v = next(value, nil)< / span > < / td > < / tr >
< tr > < td > 437< / td > < td > 0< / td > < td > < span class = zero-hits > while v ~= nil do< / span > < / td > < / tr >
< tr > < td > 438< / td > < td > 0< / td > < td > < span class = zero-hits > local n = str.n< / span > < / td > < / tr >
< tr > < td > 439< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = tabbed_indent< / span > < / td > < / tr >
< tr > < td > 440< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 441< / td > < td > 0< / td > < td > < span class = zero-hits > if type(i) ~= "string" then< / span > < / td > < / tr >
< tr > < td > 442< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 2] = "["< / span > < / td > < / tr >
< tr > < td > 443< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 3] = tostring(i)< / span > < / td > < / tr >
< tr > < td > 444< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 4] = "]"< / span > < / td > < / tr >
< tr > < td > 445< / td > < td > 0< / td > < td > < span class = zero-hits > n += 4< / span > < / td > < / tr >
< tr > < td > 446< / td > < td > 0< / td > < td > < span class = zero-hits > else< / span > < / td > < / tr >
< tr > < td > 447< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 2] = tostring(i)< / span > < / td > < / tr >
< tr > < td > 448< / td > < td > 0< / td > < td > < span class = zero-hits > n += 2< / span > < / td > < / tr >
< tr > < td > 449< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 450< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 451< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = " = "< / span > < / td > < / tr >
< tr > < td > 452< / td > < td > 0< / td > < td > < span class = zero-hits > str.n = n + 1< / span > < / td > < / tr >
< tr > < td > 453< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 454< / td > < td > 0< / td > < td > < span class = zero-hits > tos(v, stack + 1, str, cyclic)< / span > < / td > < / tr >
< tr > < td > 455< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 456< / td > < td > 0< / td > < td > < span class = zero-hits > i, v = next(value, i)< / span > < / td > < / tr >
< tr > < td > 457< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 458< / td > < td > 0< / td > < td > < span class = zero-hits > n = str.n< / span > < / td > < / tr >
< tr > < td > 459< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = v ~= nil and ",\n" or "\n"< / span > < / td > < / tr >
< tr > < td > 460< / td > < td > 0< / td > < td > < span class = zero-hits > str.n = n + 1< / span > < / td > < / tr >
< tr > < td > 461< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 462< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 463< / td > < td > 0< / td > < td > < span class = zero-hits > local n = str.n< / span > < / td > < / tr >
< tr > < td > 464< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 1] = indent< / span > < / td > < / tr >
< tr > < td > 465< / td > < td > 0< / td > < td > < span class = zero-hits > str[n + 2] = "}"< / span > < / td > < / tr >
< tr > < td > 466< / td > < td > 0< / td > < td > < span class = zero-hits > str.n = n + 2< / span > < / td > < / tr >
< tr > < td > 467< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 468< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 469< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 470< / td > < td > 0< / td > < td > < span class = zero-hits > local str = { n = 0 }< / span > < / td > < / tr >
< tr > < td > 471< / td > < td > 0< / td > < td > < span class = zero-hits > local cyclic = { n = 0 }< / span > < / td > < / tr >
< tr > < td > 472< / td > < td > 0< / td > < td > < span class = zero-hits > tos(v, 0, str, cyclic)< / span > < / td > < / tr >
< tr > < td > 473< / td > < td > 0< / td > < td > < span class = zero-hits > print(table.concat(str))< / span > < / td > < / tr >
< tr > < td > 474< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 475< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 476< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 477< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- Equality< / td > >< / tr >
< tr > < td > 478< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 479< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 480< / td > < td > 1< / td > < td > < span class = low-hits > local function shallow_eq(a: {}, b: {}): boolean< / span > < / td > < / tr >
< tr > < td > 481< / td > < td > 0< / td > < td > < span class = zero-hits > if #a ~= #b then< / span > < / td > < / tr >
< tr > < td > 482< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 483< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 484< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 485< / td > < td > 0< / td > < td > < span class = zero-hits > for i, v in next, a do< / span > < / td > < / tr >
< tr > < td > 486< / td > < td > 0< / td > < td > < span class = zero-hits > if b[i] ~= v then< / span > < / td > < / tr >
< tr > < td > 487< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 488< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 489< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 490< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 491< / td > < td > 0< / td > < td > < span class = zero-hits > for i, v in next, b do< / span > < / td > < / tr >
< tr > < td > 492< / td > < td > 0< / td > < td > < span class = zero-hits > if a[i] ~= v then< / span > < / td > < / tr >
< tr > < td > 493< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 494< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 495< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 496< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 497< / td > < td > 0< / td > < td > < span class = zero-hits > return true< / span > < / td > < / tr >
< tr > < td > 498< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 499< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 500< / td > < td > 1< / td > < td > < span class = low-hits > local function deep_eq(a: {}, b: {}): boolean< / span > < / td > < / tr >
< tr > < td > 501< / td > < td > 0< / td > < td > < span class = zero-hits > if #a ~= #b then< / span > < / td > < / tr >
< tr > < td > 502< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 503< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 504< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 505< / td > < td > 0< / td > < td > < span class = zero-hits > for i, v in next, a do< / span > < / td > < / tr >
< tr > < td > 506< / td > < td > 0< / td > < td > < span class = zero-hits > if type(b[i]) == "table" and type(v) == "table" then< / span > < / td > < / tr >
< tr > < td > 507< / td > < td > 0< / td > < td > < span class = zero-hits > if deep_eq(b[i], v) == false then< / span > < / td > < / tr >
< tr > < td > 508< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 509< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 510< / td > < td > 0< / td > < td > < span class = zero-hits > elseif b[i] ~= v then< / span > < / td > < / tr >
< tr > < td > 511< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 512< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 513< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 514< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 515< / td > < td > 0< / td > < td > < span class = zero-hits > for i, v in next, b do< / span > < / td > < / tr >
< tr > < td > 516< / td > < td > 0< / td > < td > < span class = zero-hits > if type(a[i]) == "table" and type(v) == "table" then< / span > < / td > < / tr >
< tr > < td > 517< / td > < td > 0< / td > < td > < span class = zero-hits > if deep_eq(a[i], v) == false then< / span > < / td > < / tr >
< tr > < td > 518< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 519< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 520< / td > < td > 0< / td > < td > < span class = zero-hits > elseif a[i] ~= v then< / span > < / td > < / tr >
< tr > < td > 521< / td > < td > 0< / td > < td > < span class = zero-hits > return false< / span > < / td > < / tr >
< tr > < td > 522< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 523< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 524< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 525< / td > < td > 0< / td > < td > < span class = zero-hits > return true< / span > < / td > < / tr >
< tr > < td > 526< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end< / td > >< / tr >
< tr > < td > 527< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 528< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 529< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > -- Return< / td > >< / tr >
< tr > < td > 530< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > --------------------------------------------------------------------------------< / td > >< / tr >
< tr > < td > 531< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 532< / td > < td > 1< / td > < td > < span class = low-hits > return {< / span > < / td > < / tr >
< tr > < td > 533< / td > < td > 1< / td > < td > < span class = low-hits > test = function()< / span > < / td > < / tr >
< tr > < td > 534< / td > < td > 1< / td > < td > < span class = low-hits > return {< / span > < / td > < / tr >
< tr > < td > 535< / td > < td > 1< / td > < td > < span class = low-hits > TEST = TEST,< / span > < / td > < / tr >
< tr > < td > 536< / td > < td > 1< / td > < td > < span class = low-hits > CASE = CASE,< / span > < / td > < / tr >
< tr > < td > 537< / td > < td > 1< / td > < td > < span class = low-hits > CHECK = CHECK,< / span > < / td > < / tr >
< tr > < td > 538< / td > < td > 1< / td > < td > < span class = low-hits > FINISH = FINISH,< / span > < / td > < / tr >
< tr > < td > 539< / td > < td > 1< / td > < td > < span class = low-hits > SKIP = SKIP,< / span > < / td > < / tr >
< tr > < td > 540< / td > < td > 1< / td > < td > < span class = low-hits > FOCUS = FOCUS,< / span > < / td > < / tr >
< tr > < td > 541< / td > < td > 1< / td > < td > < span class = low-hits > CHECK_EXPECT_ERR = CHECK_EXPECT_ERR,< / span > < / td > < / tr >
< tr > < td > 542< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< tr > < td > 543< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 544< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 545< / td > < td > 1< / td > < td > < span class = low-hits > benchmark = function()< / span > < / td > < / tr >
< tr > < td > 546< / td > < td > 1< / td > < td > < span class = low-hits > return BENCH, START< / span > < / td > < / tr >
< tr > < td > 547< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 548< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 549< / td > < td > 1< / td > < td > < span class = low-hits > disable_formatting = function()< / span > < / td > < / tr >
< tr > < td > 550< / td > < td > 0< / td > < td > < span class = zero-hits > disable_ansi = true< / span > < / td > < / tr >
< tr > < td > 551< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > end,< / td > >< / tr >
< tr > < td > 552< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 553< / td > < td > 1< / td > < td > < span class = low-hits > print = print2,< / span > < / td > < / tr >
< tr > < td > 554< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 555< / td > < td > 1< / td > < td > < span class = low-hits > seq = shallow_eq,< / span > < / td > < / tr >
< tr > < td > 556< / td > < td > 1< / td > < td > < span class = low-hits > deq = deep_eq,< / span > < / td > < / tr >
< tr > < td > 557< / td > < td > < span class = 'text-muted' > N/A< / span > < / td > < td > < / td > >< / tr >
< tr > < td > 558< / td > < td > 1< / td > < td > < span class = low-hits > color = color,< / span > < / td > < / tr >
< tr > < td > 559< / td > < td > 0< / td > < td > < span class = zero-hits > }< / span > < / td > < / tr >
< / tbody > < / table > < / body > < / html >