Software /
code /
prosody
Comparison
tools/generate_format_spec.lua @ 12034:ee94ac51b2dd
util.format: ALL THE TESTS!!!
The more tests I made, the more Lua 5.1 quirks I discovered.
Tests generated using a tool plus some touch-up.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 11 Dec 2021 20:38:54 +0100 |
child | 12037:82f6a0b0a425 |
comparison
equal
deleted
inserted
replaced
12033:161f8268c4b3 | 12034:ee94ac51b2dd |
---|---|
1 local format = require"util.format".format; | |
2 local dump = require "util.serialization".new("oneline") | |
3 local types = { | |
4 "nil"; | |
5 "boolean"; | |
6 "number"; | |
7 "string"; | |
8 "function"; | |
9 -- "userdata"; | |
10 "thread"; | |
11 "table"; | |
12 }; | |
13 local example_values = { | |
14 ["nil"] = { n = 1; nil }; | |
15 ["boolean"] = { true; false }; | |
16 ["number"] = { 97, -12345, 1.5; 73786976294838206464, math.huge, 2147483647 }; | |
17 ["string"] = { "hello", "foo \1\2\3 bar", "nödåtgärd", string.sub("nödåtgärd", 1, -4) }; | |
18 ["function"] = { function() end }; | |
19 -- ["userdata"] = {}; | |
20 ["thread"] = { coroutine.create(function() end) }; | |
21 ["table"] = { {} }; | |
22 }; | |
23 local example_strings = setmetatable({ | |
24 ["nil"] = { "nil" }; | |
25 ["function"] = { "function() end" }; | |
26 ["number"] = { "97", "-12345", "1.5"; "73786976294838206464", "math.huge", "2147483647" }; | |
27 ["thread"] = { "coroutine.create(function() end)" }; | |
28 }, { __index = function() return {} end }); | |
29 for _, lua_type in ipairs(types) do | |
30 print(string.format("\t\tdescribe(\"%s\", function ()", lua_type)); | |
31 local examples = example_values[lua_type]; | |
32 for fmt in ("cdiouxXaAeEfgGqs"):gmatch(".") do | |
33 print(string.format("\t\t\tdescribe(\"to %%%s\", function ()", fmt)); | |
34 print("\t\t\t\tit(\"works\", function ()"); | |
35 for i=1, examples.n or #examples do | |
36 local example = examples[i]; | |
37 if not tostring(example):match("%w+: 0[xX]%x+") then | |
38 print(string.format("\t\t\t\t\tassert.equal(%q, format(%q, %s))", format("%"..fmt, example), "%" .. fmt, example_strings[lua_type][i] or dump(example))); | |
39 else | |
40 print(string.format("\t\t\t\t\tassert.matches(\"[%s: 0[xX]%%x+]\", format(%q, %s))", lua_type, "%" .. fmt, example_strings[lua_type][i] or dump(example))); | |
41 end | |
42 end | |
43 print("\t\t\t\tend);"); | |
44 print("\t\t\tend);"); | |
45 print() | |
46 end | |
47 print("\t\tend);"); | |
48 print() | |
49 end |