luau/tests/conformance/types.lua

57 lines
1.4 KiB
Lua

-- This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
print "testing builtin types"
local ignore =
{
-- these are permanently ignored, as they are only exposed in tests
"_G.limitedstack",
"_G.RTTI",
"_G.collectgarbage",
-- what follows is a set of mismatches that hopefully eventually will go down to 0
"_G.require", -- need to move to Roblox type defs
"_G.utf8.nfcnormalize", -- need to move to Roblox type defs
"_G.utf8.nfdnormalize", -- need to move to Roblox type defs
"_G.utf8.graphemes", -- need to move to Roblox type defs
}
function verify(real, rtti, path)
if table.find(ignore, path) then
return
end
if real and rtti then
if type(real) == "table" then
assert(type(rtti) == "table", path .. " is not a table in type information")
local keys = {}
for k, v in pairs(real) do
keys[k] = 1
end
for k, v in pairs(rtti) do
keys[k] = 1
end
for k, v in pairs(keys) do
if k ~= "_G" then
verify(real[k], rtti[k], path .. '.' .. k)
end
end
else
assert(type(real) == rtti, path .. " has inconsistent types (" .. type(real) .. " vs " .. rtti .. ")")
end
else
if not rtti then
assert(false, path .. " missing from type information")
else
assert(false, path .. " present in type information but absent from VM")
end
end
end
verify(getmetatable(_G).__index, RTTI, "_G")
return 'OK'