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