function test_sum()
local sum = 0
local i = 1
while i ~= 10 do
sum = sum + i
i = i + 1
end
return sum == 45
end
function test_break()
local i = 1
while true do
i = i + 1
if i == 5 then
break
end
end
return i == 5
end
function test_endlabel()
local i = 1
while true do
i = i + 1
if i == 5 then
goto testlabel
end
if i == 10 then
break
end
::testlabel::
end
return i == 10
end
function test_closure()
local closure = {}
local i = 1
while i ~= 10 do
local j = i
closure[i] = function() return j end
i = i + 1
end
return closure[1]() == 1 and closure[4]() == 4 and closure[9]() == 9
end
function test_break_scope()
local i = 1
while i ~= 10 do
i = i + 1
end
while i ~= 20 do
i = i + 1
end
return true
end
assert(
test_sum() and
test_break() and
test_endlabel() and
test_closure() and
test_break_scope()
)