---
source: src/main.rs
expression: compiled
input_file: test-data/lua5.1-tests/literals.lua
---
print('testing scanner');
local fn dostring(x) {
return assert(loadstring(x))()
}
dostring("x = 'a\0a'");
assert(x == 'a\0a' && string.len(x) == 3);
assert('\n\"\'\\' == `
"'\`);
assert(string.find("\a\b\f\n\r\t\v", "^%c%c%c%c%c%c%c$"));
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");
var = string.rep('a', 15000)
prog = string.format("%s = 5", var)
dostring(prog);
assert(_G[(var)] == 5);
var = nil
print('+');
assert("\n\t" == `
`);
assert(`
$debug` == "\n $debug");
assert(` [ ` != ` ] `);
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
prog = `
a = 1 -- a comment
b = 2
x = [=[
hi
]=]
y = "\
hello\r\n\
"
return debug.getinfo(1).currentline
`
for _, n with pairs({
"\n",
"\r",
"\n\r",
"\r\n"
}) {
local prog, nn = string.gsub(prog, "\n", n)
assert(dostring(prog) == nn);
assert(_G.x == "hi\n" && _G.y == "\nhello\r\n\n");
}
a = `]=`
assert(a == "]=");
a = `[===[[=[]]=][====[]]===]===`
assert(a == "[===[[=[]]=][====[]]===]===");
a = `[===[[=[]]=][====[]]===]===`
assert(a == "[===[[=[]]=][====[]]===]===");
a = `]]]]]]]]`
assert(a == "]]]]]]]]");
local x = {
"=",
"[",
"]",
"\n"
}
local len = 4
local fn gen(c, n) {
if n == 0 {
coroutine.yield(c);
} else {
for _, a with pairs(x) {
gen(c .. a, n - 1);
}
}
}
for s with coroutine.wrap(fn () {
gen("", len);
}) {
assert(s == loadstring("return [====[\n" .. s .. "]====]")());
}
if os.setlocale("pt_BR") || os.setlocale("ptb") {
assert(tonumber("3,4") == 3.4 && tonumber("3.4") == nil);
assert(assert(loadstring("return 3.4"))() == 3.4);
assert(assert(loadstring("return .4,3"))() == 0.4);
assert(assert(loadstring("return 4."))() == 4.0);
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 || print)('\a\n >>> pt_BR locale not available: skipping decimal point tests <<<\n\a');
}
print('OK');