github.com/coinstack/gopher-lua@v0.0.0-20180626044619-c9c62d4ee45e/_glua-tests/issues.lua (about)

     1  
     2  -- issue #10
     3  local function inspect(options)
     4      options = options or {}
     5      return type(options)
     6  end
     7  assert(inspect(nil) == "table")
     8  
     9  local function inspect(options)
    10      options = options or setmetatable({}, {__mode = "test"})
    11      return type(options)
    12  end
    13  assert(inspect(nil) == "table")
    14  
    15  -- issue #16
    16  local ok, msg = pcall(function()
    17    local a = {}
    18    a[nil] = 1
    19  end)
    20  assert(not ok and string.find(msg, "table index is nil", 1, true))
    21  
    22  -- issue #19
    23  local tbl = {1,2,3,4,5}
    24  assert(#tbl == 5)
    25  assert(table.remove(tbl) == 5)
    26  assert(#tbl == 4)
    27  assert(table.remove(tbl, 3) == 3)
    28  assert(#tbl == 3)
    29  
    30  -- issue #24
    31  local tbl = {string.find('hello.world', '.', 0)}
    32  assert(tbl[1] == 1 and tbl[2] == 1)
    33  assert(string.sub('hello.world', 0, 2) == "he")
    34  
    35  -- issue 33
    36  local a,b
    37  a = function ()
    38    pcall(function()
    39    end)
    40    coroutine.yield("a")
    41    return b()
    42  end
    43  
    44  b = function ()
    45    return "b"
    46  end
    47  
    48  local co = coroutine.create(a)
    49  assert(select(2, coroutine.resume(co)) == "a")
    50  assert(select(2, coroutine.resume(co)) == "b")
    51  assert(coroutine.status(co) == "dead")
    52  
    53  -- issue 37
    54  function test(a, b, c)
    55      b = b or string.format("b%s", a)
    56      c = c or string.format("c%s", a)
    57      assert(a == "test")
    58      assert(b == "btest")
    59      assert(c == "ctest")
    60  end
    61  test("test")
    62  
    63  -- issue 39
    64  assert(string.match("あいうえお", ".*あ.*") == "あいうえお")
    65  assert(string.match("あいうえお", "あいうえお") == "あいうえお")
    66  
    67  -- issue 47
    68  assert(string.gsub("A\nA", ".", "A") == "AAA")
    69  
    70  -- issue 62
    71  local function level4() error("error!") end
    72  local function level3() level4() end
    73  local function level2() level3() end
    74  local function level1() level2() end
    75  local ok, result = xpcall(level1, function(err)
    76    return debug.traceback("msg", 10)
    77  end)
    78  assert(result == [[msg
    79  stack traceback:]])
    80  ok, result = xpcall(level1, function(err)
    81    return debug.traceback("msg", 9)
    82  end)
    83  assert(result == string.gsub([[msg
    84  stack traceback:
    85  @TAB@[G]: ?]], "@TAB@", "\t"))
    86  local ok, result = xpcall(level1, function(err)
    87    return debug.traceback("msg", 0)
    88  end)
    89  
    90  assert(result == string.gsub([[msg
    91  stack traceback:
    92  @TAB@[G]: in function 'traceback'
    93  @TAB@issues.lua:87: in function <issues.lua:86>
    94  @TAB@[G]: in function 'error'
    95  @TAB@issues.lua:71: in function 'level4'
    96  @TAB@issues.lua:72: in function 'level3'
    97  @TAB@issues.lua:73: in function 'level2'
    98  @TAB@issues.lua:74: in function <issues.lua:74>
    99  @TAB@[G]: in function 'xpcall'
   100  @TAB@issues.lua:86: in main chunk
   101  @TAB@[G]: ?]], "@TAB@", "\t"))
   102  
   103  local ok, result = xpcall(level1, function(err)
   104    return debug.traceback("msg", 3)
   105  end)
   106  
   107  assert(result == string.gsub([[msg
   108  stack traceback:
   109  @TAB@issues.lua:71: in function 'level4'
   110  @TAB@issues.lua:72: in function 'level3'
   111  @TAB@issues.lua:73: in function 'level2'
   112  @TAB@issues.lua:74: in function <issues.lua:74>
   113  @TAB@[G]: in function 'xpcall'
   114  @TAB@issues.lua:103: in main chunk
   115  @TAB@[G]: ?]], "@TAB@", "\t"))
   116  
   117  -- issue 81
   118  local tbl = {
   119          [-1] = "a",
   120          [0] = "b",
   121          [1] = "c",
   122  }
   123  local a, b = next(tbl, nil)
   124  assert( a == -1 and b == "a" or a == 0 and b == "b" or a == 1 and b == "c")
   125  local a, b = next(tbl, a)
   126  assert( a == -1 and b == "a" or a == 0 and b == "b" or a == 1 and b == "c")
   127  local a, b = next(tbl, a)
   128  assert( a == -1 and b == "a" or a == 0 and b == "b" or a == 1 and b == "c")
   129  local a, b = next(tbl, a)
   130  assert( a == nil and b == nil)
   131  
   132  local tbl = {'a', 'b'}
   133  local a, b = next(tbl, nil)
   134  assert(a == 1 and b == "a")
   135  local a, b = next(tbl, a)
   136  assert(a == 2 and b == "b")
   137  local a, b = next(tbl, a)
   138  assert(a == nil and b == nil)
   139  
   140  -- issue 82
   141  local cr = function()
   142          return coroutine.wrap(function()
   143                  coroutine.yield(1, "a")
   144                  coroutine.yield(2, "b")
   145          end)
   146  end
   147  
   148  local f = cr()
   149  local a, b = f()
   150  assert(a == 1 and b == "a")
   151  local a, b = f()
   152  assert(a == 2 and b == "b")
   153  
   154  -- issue 91, 92
   155  local url = "www.aaa.bbb_abc123-321-cba_abc123"
   156  assert(string.match(url, ".-([%w-]*)[.]*") == "www")
   157  
   158  local s = "hello.world"
   159  assert(s:match("([^.]+).world") == "hello")
   160  
   161  local s = "hello-world"
   162  assert(s:match("([^-]+)-world") == "hello")
   163  
   164  -- issue 93
   165  local t = {}
   166  local ok, msg = pcall(function() t.notfound() end)
   167  assert(not ok and string.find(msg, "attempt to call a non-function object", 1, true))
   168  
   169  -- issue 150
   170  local util = {
   171    fn = function() end
   172  }
   173  local b
   174  local x = util.fn(
   175    1,
   176    (b or {}).x)
   177  
   178  local s = [=[["a"]['b'][9] - ["a"]['b'][8] > ]=]
   179  local result = {}
   180  for i in s:gmatch([=[[[][^%s,]*[]]]=]) do 
   181    table.insert(result, i)
   182  end
   183  assert(result[1] == [=[["a"]['b'][9]]=])
   184  assert(result[2] == [=[["a"]['b'][8]]=])
   185  
   186  -- issue 168
   187  local expected = 1
   188  
   189  local result = math.random(1)
   190  
   191  assert(result == expected)