github.com/jslyzt/glua@v0.0.0-20210819023911-4030c8e0234a/_lua5.1-tests/literals.lua (about) 1 print('testing scanner') 2 3 local function dostring (x) return assert(loadstring(x))() end 4 5 dostring("x = 'a\0a'") 6 assert(x == 'a\0a' and string.len(x) == 3) 7 8 -- escape sequences 9 assert('\n\"\'\\' == [[ 10 11 "'\]]) 12 13 assert(string.find("\a\b\f\n\r\t\v", "^%c%c%c%c%c%c%c$")) 14 15 -- assume ASCII just for tests: 16 assert("\09912" == 'c12') 17 assert("\99ab" == 'cab') 18 assert("\099" == '\99') 19 assert("\099\n" == 'c\10') 20 assert('\0\0\0alo' == '\0' .. '\0\0' .. 'alo') 21 22 assert(010 .. 020 .. -030 == "1020-30") 23 24 -- long variable names 25 26 var = string.rep('a', 15000) 27 prog = string.format("%s = 5", var) 28 dostring(prog) 29 assert(_G[var] == 5) 30 var = nil 31 print('+') 32 33 -- escapes -- 34 assert("\n\t" == [[ 35 36 ]]) 37 assert([[ 38 39 $debug]] == "\n $debug") 40 assert([[ [ ]] ~= [[ ] ]]) 41 -- long strings -- 42 b = "001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789" 43 assert(string.len(b) == 960) 44 prog = [=[ 45 print('+') 46 47 a1 = [["isto e' um string com várias 'aspas'"]] 48 a2 = "'aspas'" 49 50 assert(string.find(a1, a2) == 31) 51 print('+') 52 53 a1 = [==[temp = [[um valor qualquer]]; ]==] 54 assert(loadstring(a1))() 55 assert(temp == 'um valor qualquer') 56 -- long strings -- 57 b = "001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789001234567890123456789012345678901234567891234567890123456789012345678901234567890012345678901234567890123456789012345678912345678901234567890123456789012345678900123456789012345678901234567890123456789123456789012345678901234567890123456789" 58 assert(string.len(b) == 960) 59 print('+') 60 61 a = [[00123456789012345678901234567890123456789123456789012345678901234567890123456789 62 00123456789012345678901234567890123456789123456789012345678901234567890123456789 63 00123456789012345678901234567890123456789123456789012345678901234567890123456789 64 00123456789012345678901234567890123456789123456789012345678901234567890123456789 65 00123456789012345678901234567890123456789123456789012345678901234567890123456789 66 00123456789012345678901234567890123456789123456789012345678901234567890123456789 67 00123456789012345678901234567890123456789123456789012345678901234567890123456789 68 00123456789012345678901234567890123456789123456789012345678901234567890123456789 69 00123456789012345678901234567890123456789123456789012345678901234567890123456789 70 00123456789012345678901234567890123456789123456789012345678901234567890123456789 71 00123456789012345678901234567890123456789123456789012345678901234567890123456789 72 00123456789012345678901234567890123456789123456789012345678901234567890123456789 73 00123456789012345678901234567890123456789123456789012345678901234567890123456789 74 00123456789012345678901234567890123456789123456789012345678901234567890123456789 75 00123456789012345678901234567890123456789123456789012345678901234567890123456789 76 00123456789012345678901234567890123456789123456789012345678901234567890123456789 77 00123456789012345678901234567890123456789123456789012345678901234567890123456789 78 00123456789012345678901234567890123456789123456789012345678901234567890123456789 79 00123456789012345678901234567890123456789123456789012345678901234567890123456789 80 00123456789012345678901234567890123456789123456789012345678901234567890123456789 81 00123456789012345678901234567890123456789123456789012345678901234567890123456789 82 00123456789012345678901234567890123456789123456789012345678901234567890123456789 83 00123456789012345678901234567890123456789123456789012345678901234567890123456789 84 ]] 85 assert(string.len(a) == 1863) 86 assert(string.sub(a, 1, 40) == string.sub(b, 1, 40)) 87 x = 1 88 ]=] 89 90 print('+') 91 x = nil 92 dostring(prog) 93 assert(x) 94 95 prog = nil 96 a = nil 97 b = nil 98 99 100 -- testing line ends 101 prog = [[ 102 a = 1 -- a comment 103 b = 2 104 105 106 x = [=[ 107 hi 108 ]=] 109 y = "\ 110 hello\r\n\ 111 " 112 return debug.getinfo(1).currentline 113 ]] 114 115 for _, n in pairs{"\n", "\r", "\n\r", "\r\n"} do 116 local prog, nn = string.gsub(prog, "\n", n) 117 assert(dostring(prog) == nn) 118 assert(_G.x == "hi\n" and _G.y == "\nhello\r\n\n") 119 end 120 121 122 -- testing comments and strings with long brackets 123 a = [==[]=]==] 124 assert(a == "]=") 125 126 a = [==[[===[[=[]]=][====[]]===]===]==] 127 assert(a == "[===[[=[]]=][====[]]===]===") 128 129 a = [====[[===[[=[]]=][====[]]===]===]====] 130 assert(a == "[===[[=[]]=][====[]]===]===") 131 132 a = [=[]]]]]]]]]=] 133 assert(a == "]]]]]]]]") 134 135 136 --[===[ 137 x y z [==[ blu foo 138 ]== 139 ] 140 ]=]==] 141 error error]=]===] 142 143 -- generate all strings of four of these chars 144 local x = {"=", "[", "]", "\n"} 145 local len = 4 146 local function gen (c, n) 147 if n==0 then coroutine.yield(c) 148 else 149 for _, a in pairs(x) do 150 gen(c..a, n-1) 151 end 152 end 153 end 154 155 for s in coroutine.wrap(function () gen("", len) end) do 156 assert(s == loadstring("return [====[\n"..s.."]====]")()) 157 end 158 159 160 -- testing decimal point locale 161 if os.setlocale("pt_BR") or os.setlocale("ptb") then 162 assert(tonumber("3,4") == 3.4 and tonumber"3.4" == nil) 163 assert(assert(loadstring("return 3.4"))() == 3.4) 164 assert(assert(loadstring("return .4,3"))() == .4) 165 assert(assert(loadstring("return 4."))() == 4.) 166 assert(assert(loadstring("return 4.+.5"))() == 4.5) 167 local a,b = loadstring("return 4.5.") 168 assert(string.find(b, "'4%.5%.'")) 169 assert(os.setlocale("C")) 170 else 171 (Message or print)( 172 '\a\n >>> pt_BR locale not available: skipping decimal point tests <<<\n\a') 173 end 174 175 176 print('OK')