--- 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');