Minor improvements when talking about the type of a value.
This commit is contained in:
parent
d9be06658d
commit
fe9ab028ce
|
@ -280,11 +280,42 @@ local COMPLEX_TYPES = {
|
|||
['function'] = true,
|
||||
}
|
||||
|
||||
local function fmt_table_with_type (val)
|
||||
assert(type(val) == 'table')
|
||||
|
||||
local subtype = 'table'
|
||||
|
||||
-- Find "last key"
|
||||
do
|
||||
local last_key, num_visited = nil, 0
|
||||
repeat last_key, num_visited = next(val, last_key), num_visited + 1
|
||||
until last_key == nil or type(last_key) ~= 'number' or last_key <= 0 or last_key > #val
|
||||
|
||||
-- Conclude:
|
||||
if last_key == nil then
|
||||
subtype = (num_visited == 1) and 'empty table' or 'sequence'
|
||||
end
|
||||
end
|
||||
|
||||
local addr = tostring(val):match '^table: (.*)$'
|
||||
local attr = debug.getmetatable(val) ~= nil and ' with metatable' or ''
|
||||
|
||||
return ('%s%s: %s'):format(subtype, attr, addr)
|
||||
end
|
||||
|
||||
local function fmt_val_with_type (val)
|
||||
|
||||
-- Primitive values ARE their type, and don't need the annotation.
|
||||
if PRIMITIVE_VALUES[type(val)] then return tostring(val) end
|
||||
|
||||
-- Tables can be of many different styles
|
||||
if type(val) == 'table' then
|
||||
return fmt_table_with_type(val)
|
||||
end
|
||||
|
||||
-- Complex types are already formatted with some type information.
|
||||
if COMPLEX_TYPES[type(val)] then return tostring(val) end
|
||||
|
||||
-- Numbers and string should have their types with them.
|
||||
return type(val) .. ' ' .. fmt_val(val)
|
||||
end
|
||||
|
|
|
@ -284,7 +284,7 @@ SUITE:addTest('Identify integer', function ()
|
|||
local a = 5.21
|
||||
assert(a % 1 == 0)
|
||||
end)
|
||||
assert_equal('./test/test_assert-gooder.lua:'..curline(-2)..': '..'assertion failed! bad local \'a\' (integer expected, but got floating-point number 5.21)', msg)
|
||||
assert_equal('./test/test_assert-gooder.lua:'..curline(-2)..': '..'assertion failed! bad local \'a\' (integer expected, but got decimal number 5.21)', msg)
|
||||
end)
|
||||
|
||||
SUITE:addTest('Identify even number', function ()
|
||||
|
|
Loading…
Reference in New Issue
Block a user