mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-16 06:45:44 +08:00
181 lines
6.8 KiB
Lua
181 lines
6.8 KiB
Lua
|
-- This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
|||
|
-- This file is based on Lua 5.x tests -- https://github.com/lua/lua/tree/master/testes
|
|||
|
print('testing scanner')
|
|||
|
|
|||
|
local function dostring (x) return assert(loadstring(x))() end
|
|||
|
|
|||
|
-- Luau doesn't support unescaped NUL literals inside Lua source code
|
|||
|
-- dostring("x = 'a\0a'")
|
|||
|
-- assert(x == 'a\0a' and string.len(x) == 3)
|
|||
|
|
|||
|
-- escape sequences
|
|||
|
assert('\n\"\'\\' == [[
|
|||
|
|
|||
|
"'\]])
|
|||
|
|
|||
|
assert(string.find("\a\b\f\n\r\t\v", "^%c%c%c%c%c%c%c$"))
|
|||
|
|
|||
|
-- assume ASCII just for tests:
|
|||
|
assert("\09912" == 'c12')
|
|||
|
assert("\99ab" == 'cab')
|
|||
|
assert("\099" == '\99')
|
|||
|
assert("\099\n" == 'c\10')
|
|||
|
assert('\0\0\0alo' == '\0' .. '\0\0' .. 'alo')
|
|||
|
|
|||
|
assert(010 .. 020 .. -030 == "1020-30")
|
|||
|
|
|||
|
-- long variable names
|
|||
|
|
|||
|
var = string.rep('a', 15000)
|
|||
|
prog = string.format("%s = 5", var)
|
|||
|
dostring(prog)
|
|||
|
assert(dostring("return " .. var) == 5)
|
|||
|
var = nil
|
|||
|
print('+')
|
|||
|
|
|||
|
-- escapes --
|
|||
|
assert("\n\t" == [[
|
|||
|
|
|||
|
]])
|
|||
|
assert([[
|
|||
|
|
|||
|
$debug]] == "\n $debug")
|
|||
|
assert([[ [ ]] ~= [[ ] ]])
|
|||
|
-- long strings --
|
|||
|
b = "001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789"
|
|||
|
assert(string.len(b) == 960)
|
|||
|
prog = [=[
|
|||
|
print('+')
|
|||
|
|
|||
|
a1 = [["isto e' um string com v<>rias 'aspas'"]]
|
|||
|
a2 = "'aspas'"
|
|||
|
|
|||
|
assert(string.find(a1, a2) == 31)
|
|||
|
print('+')
|
|||
|
|
|||
|
a1 = [==[temp = [[um valor qualquer]]; ]==]
|
|||
|
assert(loadstring(a1))()
|
|||
|
assert(temp == 'um valor qualquer')
|
|||
|
-- long strings --
|
|||
|
b = "001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789"
|
|||
|
assert(string.len(b) == 960)
|
|||
|
print('+')
|
|||
|
|
|||
|
a = [[00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
00123456789012345678901234567890123456789123456789012345678901234567890123456789
|
|||
|
]]
|
|||
|
assert(string.len(a) == 1863)
|
|||
|
assert(string.sub(a, 1, 40) == string.sub(b, 1, 40))
|
|||
|
x = 1
|
|||
|
]=]
|
|||
|
|
|||
|
print('+')
|
|||
|
x = nil
|
|||
|
dostring(prog)
|
|||
|
assert(x)
|
|||
|
|
|||
|
prog = nil
|
|||
|
a = nil
|
|||
|
b = nil
|
|||
|
|
|||
|
|
|||
|
-- testing line ends
|
|||
|
prog = [[
|
|||
|
a = 1 -- a comment
|
|||
|
b = 2
|
|||
|
|
|||
|
|
|||
|
x = [=[
|
|||
|
hi
|
|||
|
]=]
|
|||
|
y = "\
|
|||
|
hello\r\n\
|
|||
|
"
|
|||
|
return debug.getinfo(1).currentline
|
|||
|
]]
|
|||
|
|
|||
|
for _, n in pairs{"\n", "\r", "\n\r", "\r\n"} do
|
|||
|
local prog, nn = string.gsub(prog, "\n", n)
|
|||
|
-- assert(dostring(prog) == nn)
|
|||
|
-- assert(_G.x == "hi\n" and _G.y == "\nhello\r\n\n")
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
-- testing comments and strings with long brackets
|
|||
|
a = [==[]=]==]
|
|||
|
assert(a == "]=")
|
|||
|
|
|||
|
a = [==[[===[[=[]]=][====[]]===]===]==]
|
|||
|
assert(a == "[===[[=[]]=][====[]]===]===")
|
|||
|
|
|||
|
a = [====[[===[[=[]]=][====[]]===]===]====]
|
|||
|
assert(a == "[===[[=[]]=][====[]]===]===")
|
|||
|
|
|||
|
a = [=[]]]]]]]]]=]
|
|||
|
assert(a == "]]]]]]]]")
|
|||
|
|
|||
|
|
|||
|
--[===[
|
|||
|
x y z [==[ blu foo
|
|||
|
]==
|
|||
|
]
|
|||
|
]=]==]
|
|||
|
error error]=]===]
|
|||
|
|
|||
|
-- generate all strings of four of these chars
|
|||
|
local x = {"=", "[", "]", "\n"}
|
|||
|
local len = 4
|
|||
|
local function gen (c, n)
|
|||
|
if n==0 then coroutine.yield(c)
|
|||
|
else
|
|||
|
for _, a in pairs(x) do
|
|||
|
gen(c..a, n-1)
|
|||
|
end
|
|||
|
end
|
|||
|
end
|
|||
|
|
|||
|
for s in coroutine.wrap(function () gen("", len) end) do
|
|||
|
assert(s == loadstring("return [====[\n"..s.."]====]")())
|
|||
|
end
|
|||
|
|
|||
|
|
|||
|
--[[
|
|||
|
-- testing decimal point locale
|
|||
|
if os.setlocale("pt_BR") or os.setlocale("ptb") then
|
|||
|
assert(tonumber("3,4") == 3.4 and tonumber"3.4" == nil)
|
|||
|
assert(assert(loadstring("return 3.4"))() == 3.4)
|
|||
|
assert(assert(loadstring("return .4,3"))() == .4)
|
|||
|
assert(assert(loadstring("return 4."))() == 4.)
|
|||
|
assert(assert(loadstring("return 4.+.5"))() == 4.5)
|
|||
|
local a,b = loadstring("return 4.5.")
|
|||
|
assert(string.find(b, "'4%.5%.'"))
|
|||
|
assert(os.setlocale("C"))
|
|||
|
else
|
|||
|
(Message or print)(
|
|||
|
'\a\n >>> pt_BR locale not available: skipping decimal point tests <<<\n\a')
|
|||
|
end
|
|||
|
]]--
|
|||
|
|
|||
|
return('OK')
|