--#!../lua math.randomseed(0) collectgarbage("setstepmul", 180) collectgarbage("setpause", 190) --[=[ example of a long [comment], [[spanning several [lines]]] ]=] print("current path:\n " .. string.gsub(package.path, ";", "\n ")) local msgs = {} function Message(m) print(m) msgs[#msgs + 1] = string.sub(m, 3, -3) end local c = os.clock() assert(os.setlocale "C") local T, print, gcinfo, format, write, assert, type = T, print, gcinfo, string.format, io.write, assert, type local function formatmem(m) if m < 1024 then return m else m = m / 1024 - m / 1024 % 1 if m < 1024 then return m .. "K" else m = m / 1024 - m / 1024 % 1 return m .. "M" end end end local showmem = function() if not T then print(format(" ---- total memory: %s ----\n", formatmem(gcinfo()))) else T.checkmemory() local a, b, c = T.totalmem() local d, e = gcinfo() print(format( "\n ---- total memory: %s (%dK), max use: %s, blocks: %d\n", formatmem(a), d, formatmem(c), b)) end end -- -- redefine dofile to run files through dump/undump -- dofile = function(n) showmem() local f = assert(loadfile(n)) local b = string.dump(f) f = assert(loadstring(b)) return f() end dofile('main.lua') do local u = newproxy(true) local newproxy, stderr = newproxy, io.stderr getmetatable(u).__gc = function(o) stderr:write '.' newproxy(o) end end local f = assert(loadfile('gc.lua')) f() dofile('db.lua') assert(dofile('calls.lua') == deep and deep) dofile('strings.lua') dofile('literals.lua') assert(dofile('attrib.lua') == 27) assert(dofile('locals.lua') == 5) dofile('constructs.lua') dofile('code.lua') do local f = coroutine.wrap(assert(loadfile('big.lua'))) assert(f() == 'b') assert(f() == 'a') end dofile('nextvar.lua') dofile('pm.lua') dofile('api.lua') assert(dofile('events.lua') == 12) dofile('vararg.lua') dofile('closure.lua') dofile('errors.lua') dofile('math.lua') dofile('sort.lua') assert(dofile('verybig.lua') == 10); collectgarbage() dofile('files.lua') if #msgs > 0 then print("\ntests not performed:") for i = 1, #msgs do print(msgs[i]) end print() end print("final OK !!!") print('cleaning all!!!!') debug.sethook(function(a) assert(type(a) == 'string') end, "cr") local _G, collectgarbage, showmem, print, format, clock = _G, collectgarbage, showmem, print, format, os.clock local a = {} for n in pairs(_G) do a[n] = 1 end a.tostring = nil a.___Glob = nil for n in pairs(a) do _G[n] = nil end a = nil collectgarbage() collectgarbage() collectgarbage() collectgarbage() collectgarbage() collectgarbage(); showmem() print(format("\n\ntotal time: %.2f\n", clock() - c))