diff options
Diffstat (limited to 'testes/calls.lua')
-rw-r--r-- | testes/calls.lua | 44 |
1 files changed, 25 insertions, 19 deletions
diff --git a/testes/calls.lua b/testes/calls.lua index ee8cce73..a1938584 100644 --- a/testes/calls.lua +++ b/testes/calls.lua @@ -16,7 +16,7 @@ assert(type(nil) == 'nil' and type(type) == 'function') assert(type(assert) == type(print)) -function f (x) return a:x (x) end +local function f (x) return a:x (x) end assert(type(f) == 'function') assert(not pcall(type)) @@ -33,10 +33,11 @@ do assert(fact(5) == 120) end assert(fact == false) +fact = nil -- testing declarations -a = {i = 10} -self = 20 +local a = {i = 10} +local self = 20 function a:x (x) return x+self.i end function a.y (x) return x+self end @@ -72,6 +73,8 @@ f(1,2, -- this one too 3,4) assert(t[1] == 1 and t[2] == 2 and t[3] == 3 and t[4] == 'a') +t = nil -- delete 't' + function fat(x) if x <= 1 then return 1 else return x*load("return fat(" .. x-1 .. ")", "")() @@ -80,26 +83,29 @@ end assert(load "load 'assert(fat(6)==720)' () ")() a = load('return fat(5), 3') -a,b = a() +local a,b = a() assert(a == 120 and b == 3) +fat = nil print('+') -function err_on_n (n) +local function err_on_n (n) if n==0 then error(); exit(1); else err_on_n (n-1); exit(1); end end do - function dummy (n) + local function dummy (n) if n > 0 then assert(not pcall(err_on_n, n)) dummy(n-1) end end + + dummy(10) end -dummy(10) +_G.deep = nil -- "declaration" (used by 'all.lua') function deep (n) if n>0 then deep(n-1) end @@ -209,7 +215,7 @@ assert(a == 23 and (function (x) return x*2 end)(20) == 40) -- testing closures -- fixed-point operator -Z = function (le) +local Z = function (le) local function a (f) return le(function (x) return f(f)(x) end) end @@ -219,14 +225,14 @@ Z = function (le) -- non-recursive factorial -F = function (f) +local F = function (f) return function (n) if n == 0 then return 1 else return n*f(n-1) end end end -fat = Z(F) +local fat = Z(F) assert(fat(0) == 1 and fat(4) == 24 and Z(F)(5)==5*Z(F)(4)) @@ -237,22 +243,21 @@ local function g (z) return f(z,z+1,z+2,z+3) end -f = g(10) +local f = g(10) assert(f(9, 16) == 10+11+12+13+10+9+16+10) -Z, F, f = nil print('+') -- testing multiple returns -function unlpack (t, i) +local function unlpack (t, i) i = i or 1 if (i <= #t) then return t[i], unlpack(t, i+1) end end -function equaltab (t1, t2) +local function equaltab (t1, t2) assert(#t1 == #t2) for i = 1, #t1 do assert(t1[i] == t2[i]) @@ -261,8 +266,8 @@ end local pack = function (...) return (table.pack(...)) end -function f() return 1,2,30,4 end -function ret2 (a,b) return a,b end +local function f() return 1,2,30,4 end +local function ret2 (a,b) return a,b end local a,b,c,d = unlpack{1,2,3} assert(a==1 and b==2 and c==3 and d==nil) @@ -291,7 +296,7 @@ table.sort({10,9,8,4,19,23,0,0}, function (a,b) return a<b end, "extra arg") local x = "-- a comment\0\0\0\n x = 10 + \n23; \ local a = function () x = 'hi' end; \ return '\0'" -function read1 (x) +local function read1 (x) local i = 0 return function () collectgarbage() @@ -300,7 +305,7 @@ function read1 (x) end end -function cannotload (msg, a,b) +local function cannotload (msg, a,b) assert(not a and string.find(b, msg)) end @@ -342,6 +347,7 @@ a = assert(load(read1(x), nil, "b")) assert(a() == 1 and _G.x == 1) cannotload("attempt to load a binary chunk", load(read1(x), nil, "t")) cannotload("attempt to load a binary chunk", load(x, nil, "t")) +_G.x = nil assert(not pcall(string.dump, print)) -- no dump of C functions @@ -366,7 +372,7 @@ debug.setupvalue(x, 2, _G) assert(x() == 123) assert(assert(load("return XX + ...", nil, nil, {XX = 13}))(4) == 17) - +XX = nil -- test generic load with nested functions x = [[ |