vm.lua 5.4 KB

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