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

     1  for i, v in ipairs({"hoge", {}, function() end, true, nil}) do
     2    local ok, msg = pcall(function()
     3      print(-v)
     4    end)
     5    assert(not ok and string.find(msg, "__unm undefined"))
     6  end
     7  
     8  assert(#"abc" == 3)
     9  local tbl = {1,2,3}
    10  setmetatable(tbl, {__len = function(self)
    11    return 10
    12  end})
    13  assert(#tbl == 10)
    14  
    15  setmetatable(tbl, nil)
    16  assert(#tbl == 3)
    17  
    18  local ok, msg = pcall(function()
    19    return 1 < "hoge"
    20  end)
    21  assert(not ok and string.find(msg, "attempt to compare number with string"))
    22  
    23  local ok, msg = pcall(function()
    24    return {} < (function() end)
    25  end)
    26  assert(not ok and string.find(msg, "attempt to compare table with function"))
    27  
    28  local ok, msg = pcall(function()
    29    for n = nil,1 do
    30      print(1)
    31    end
    32  end)
    33  assert(not ok and string.find(msg, "for statement init must be a number"))
    34  
    35  local ok, msg = pcall(function()
    36    for n = 1,nil do
    37      print(1)
    38    end
    39  end)
    40  assert(not ok and string.find(msg, "for statement limit must be a number"))
    41  
    42  local ok, msg = pcall(function()
    43    for n = 1,10,nil do
    44      print(1)
    45    end
    46  end)
    47  assert(not ok and string.find(msg, "for statement step must be a number"))
    48  
    49  local ok, msg = pcall(function()
    50    return {} + (function() end)
    51  end)
    52  assert(not ok and string.find(msg, "cannot perform add operation between table and function"))
    53  
    54  local ok, msg = pcall(function()
    55    return {} .. (function() end)
    56  end)
    57  assert(not ok and string.find(msg, "cannot perform concat operation between table and function"))
    58  
    59  -- test table with initial elements over 511
    60  local bigtable = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    61                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    62                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    63                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    64                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    65                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    66                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    67                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    68                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    69                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    70                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    71                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    72                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    73                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    74                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    75                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    76                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    77                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    78                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    79                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    80                    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    81                    1,1,1,1,1,1,1,1,1,1,1,1,10}
    82  assert(bigtable[601] == 10)
    83  
    84  local ok, msg = loadstring([[
    85    function main(
    86       a1,  a2,  a3,  a4,  a5,  a6,  a7,  a8,
    87       a9,  a10,  a11,  a12,  a13,  a14,  a15,  a16,
    88       a17,  a18,  a19,  a20,  a21,  a22,  a23,  a24,
    89       a25,  a26,  a27,  a28,  a29,  a30,  a31,  a32,
    90       a33,  a34,  a35,  a36,  a37,  a38,  a39,  a40,
    91       a41,  a42,  a43,  a44,  a45,  a46,  a47,  a48,
    92       a49,  a50,  a51,  a52,  a53,  a54,  a55,  a56,
    93       a57,  a58,  a59,  a60,  a61,  a62,  a63,  a64,
    94       a65,  a66,  a67,  a68,  a69,  a70,  a71,  a72,
    95       a73,  a74,  a75,  a76,  a77,  a78,  a79,  a80,
    96       a81,  a82,  a83,  a84,  a85,  a86,  a87,  a88,
    97       a89,  a90,  a91,  a92,  a93,  a94,  a95,  a96,
    98       a97,  a98,  a99,  a100,  a101,  a102,  a103,
    99       a104,  a105,  a106,  a107,  a108,  a109,  a110,
   100       a111,  a112,  a113,  a114,  a115,  a116,  a117,
   101       a118,  a119,  a120,  a121,  a122,  a123,  a124,
   102       a125,  a126,  a127,  a128,  a129,  a130,  a131,
   103       a132,  a133,  a134,  a135,  a136,  a137,  a138,
   104       a139,  a140,  a141,  a142,  a143,  a144,  a145,
   105       a146,  a147,  a148,  a149,  a150,  a151,  a152,
   106       a153,  a154,  a155,  a156,  a157,  a158,  a159,
   107       a160,  a161,  a162,  a163,  a164,  a165,  a166,
   108       a167,  a168,  a169,  a170,  a171,  a172,  a173,
   109       a174,  a175,  a176,  a177,  a178,  a179,  a180,
   110       a181,  a182,  a183,  a184,  a185,  a186,  a187,
   111       a188,  a189,  a190,  a191,  a192,  a193,  a194,
   112       a195,  a196,  a197,  a198,  a199,  a200,  a201,
   113       a202,  a203,  a204,  a205,  a206,  a207,  a208,
   114       a209,  a210,  a211,  a212,  a213,  a214,  a215,
   115       a216,  a217,  a218,  a219,  a220,  a221,  a222,
   116       a223,  a224,  a225,  a226,  a227,  a228,  a229,
   117       a230,  a231,  a232,  a233,  a234,  a235,  a236,
   118       a237,  a238,  a239,  a240,  a241,  a242,  a243,
   119       a244,  a245,  a246,  a247,  a248,  a249,  a250,
   120       a251,  a252,  a253,  a254,  a255,  a256,  a257,
   121       a258,  a259,  a260,  a261,  a262,  a263,  a264,
   122       a265,  a266,  a267,  a268,  a269,  a270,  a271,
   123       a272,  a273,  a274,  a275,  a276,  a277,  a278,
   124       a279,  a280,  a281,  a282,  a283,  a284,  a285,
   125       a286,  a287,  a288,  a289,  a290,  a291,  a292,
   126       a293,  a294,  a295,  a296,  a297,  a298,  a299,
   127       a300,  a301,  a302) end
   128  ]]) 
   129  assert(not ok and string.find(msg, "register overflow"))
   130  
   131  local ok, msg = loadstring([[
   132     function main()
   133       local a = {...}
   134     end
   135  ]])
   136  assert(not ok and string.find(msg, "cannot use '...' outside a vararg function"))