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