diff options
Diffstat (limited to 'testes/locals.lua')
| -rw-r--r-- | testes/locals.lua | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/testes/locals.lua b/testes/locals.lua index 65b145db..1e0f525b 100644 --- a/testes/locals.lua +++ b/testes/locals.lua | |||
| @@ -108,7 +108,7 @@ print'+' | |||
| 108 | if rawget(_G, "T") then | 108 | if rawget(_G, "T") then |
| 109 | -- testing clearing of dead elements from tables | 109 | -- testing clearing of dead elements from tables |
| 110 | collectgarbage("stop") -- stop GC | 110 | collectgarbage("stop") -- stop GC |
| 111 | local a = {[{}] = 4, [3] = 0, alo = 1, | 111 | local a = {[{}] = 4, [3] = 0, alo = 1, |
| 112 | a1234567890123456789012345678901234567890 = 10} | 112 | a1234567890123456789012345678901234567890 = 10} |
| 113 | 113 | ||
| 114 | local t = T.querytab(a) | 114 | local t = T.querytab(a) |
| @@ -360,6 +360,54 @@ end) | |||
| 360 | co() -- start coroutine | 360 | co() -- start coroutine |
| 361 | assert(co == nil) -- eventually it will be collected | 361 | assert(co == nil) -- eventually it will be collected |
| 362 | 362 | ||
| 363 | |||
| 364 | -- to-be-closed variables in generic for loops | ||
| 365 | do | ||
| 366 | local numopen = 0 | ||
| 367 | local function open (x) | ||
| 368 | numopen = numopen + 1 | ||
| 369 | return | ||
| 370 | function () -- iteraction function | ||
| 371 | x = x - 1 | ||
| 372 | if x > 0 then return x end | ||
| 373 | end, | ||
| 374 | function () -- closing function | ||
| 375 | numopen = numopen - 1 | ||
| 376 | end | ||
| 377 | end | ||
| 378 | |||
| 379 | local s = 0 | ||
| 380 | for i in open(10) do | ||
| 381 | s = s + i | ||
| 382 | end | ||
| 383 | assert(s == 45 and numopen == 0) | ||
| 384 | |||
| 385 | local s = 0 | ||
| 386 | for i in open(10) do | ||
| 387 | if i < 5 then break end | ||
| 388 | s = s + i | ||
| 389 | end | ||
| 390 | assert(s == 35 and numopen == 0) | ||
| 391 | |||
| 392 | -- repeat test with '__open' metamethod instead of a function | ||
| 393 | local function open (x) | ||
| 394 | numopen = numopen + 1 | ||
| 395 | return | ||
| 396 | function (t) -- iteraction function | ||
| 397 | t[1] = t[1] - 1 | ||
| 398 | if t[1] > 0 then return t[1] end | ||
| 399 | end, | ||
| 400 | setmetatable({x}, {__close = function () numopen = numopen - 1 end}) | ||
| 401 | end | ||
| 402 | |||
| 403 | local s = 0 | ||
| 404 | for i in open(10) do | ||
| 405 | if (i < 5) then break end | ||
| 406 | s = s + i | ||
| 407 | end | ||
| 408 | assert(s == 35 and numopen == 0) | ||
| 409 | end | ||
| 410 | |||
| 363 | print('OK') | 411 | print('OK') |
| 364 | 412 | ||
| 365 | return 5,f | 413 | return 5,f |
