Change directory structure
This commit is contained in:
107
luprex/ext/eris-master/test/unpersist.lua
Normal file
107
luprex/ext/eris-master/test/unpersist.lua
Normal file
@@ -0,0 +1,107 @@
|
||||
permtable = { 1234 }
|
||||
|
||||
function testcounter(counter)
|
||||
local a = counter.cur()
|
||||
counter.inc()
|
||||
return counter.cur() == a + 1
|
||||
end
|
||||
|
||||
function testuvinthread(func)
|
||||
local success, result = coroutine.resume(func)
|
||||
return success and result == 5
|
||||
end
|
||||
|
||||
function test(rootobj)
|
||||
local passed = 0
|
||||
local total = 0
|
||||
local dotest = function(name, cond)
|
||||
total = total + 1
|
||||
if cond then
|
||||
print(name, " PASSED")
|
||||
passed = passed + 1
|
||||
else
|
||||
print(name, "*FAILED")
|
||||
end
|
||||
end
|
||||
|
||||
dotest("Permanent value ", rootobj.testperm == permtable)
|
||||
dotest("Nil value ", rootobj.testnil == nil)
|
||||
dotest("Boolean FALSE ", rootobj.testfalse == false)
|
||||
dotest("Boolean TRUE ", rootobj.testtrue == true)
|
||||
dotest("Light userdata ", checkludata(rootobj.testludata))
|
||||
dotest("Number 7 ", rootobj.testseven == 7)
|
||||
dotest("String 'foobar' ", rootobj.testfoobar == "foobar")
|
||||
dotest("Table ", rootobj.testtbl.a == 2 and rootobj.testtbl[2] == 4)
|
||||
dotest("NaN value ", rootobj.testnan[1] ~= rootobj.testnan[1])
|
||||
dotest("Looped tables ", rootobj.testlooptable.testloopb.testloopa == rootobj.testlooptable)
|
||||
dotest("Table metatable ", rootobj.testmt() == 21)
|
||||
dotest("__newindex metamethod ", rootobj.testniinmt.a == 3)
|
||||
dotest("Udata literal persist ", unboxinteger(rootobj.testliteraludata) == 71)
|
||||
dotest("Func returning 4 ", rootobj.testfuncreturnsfour() == 4)
|
||||
dotest("Lua closure ", rootobj.testclosure() == 11)
|
||||
dotest("Function env ", rootobj.testfenv() == 456)
|
||||
dotest("Nil in closure ", rootobj.testnilclosure() == nil)
|
||||
dotest("Nested func ", rootobj.testnest(1) == 6)
|
||||
dotest("Upvalue cycles ", rootobj.testuvcycle()[1] == rootobj.testuvcycle()[2])
|
||||
dotest("Udata special persist ", unboxboolean(rootobj.testspudata1) == true and unboxboolean(rootobj.testspudata2) == false)
|
||||
dotest("Identical tables ", rootobj.testsharedrefa ~= rootobj.testsharedrefb)
|
||||
dotest("Shared reference ", rootobj.testsharedrefa.sharedref == rootobj.testsharedrefb.sharedref)
|
||||
dotest("Shared upvalues ", testcounter(rootobj.testsharedupval))
|
||||
dotest("Debug info ", (rootobj.testdebuginfo(2)) == "foo")
|
||||
dotest("Thread start ", coroutine.resume(rootobj.testnthread) == true, 4)
|
||||
dotest("Thread resume ", coroutine.resume(rootobj.testthread) == true, 14)
|
||||
dotest("Thread dead ", coroutine.resume(rootobj.testdthread) == false)
|
||||
dotest("Open upvalues ", testuvinthread(rootobj.testuvinthread))
|
||||
dotest("Yielded pcall ", coroutine.resume(rootobj.testprotthr) == true, "test")
|
||||
dotest("Yielded xpcall ", coroutine.resume(rootobj.testxprotthr) == true, "handler:test")
|
||||
dotest("Yielded metafunc ", coroutine.resume(rootobj.testymtthr) == true, true)
|
||||
dotest("Deep callstack ", rootobj.testdeep() == 100)
|
||||
dotest("Tail call ", rootobj.testtail() == 100)
|
||||
|
||||
|
||||
-- Note: the following test uses the persist metamethod, which
|
||||
-- was deliberately disabled in the luprex version of eris.
|
||||
-- dotest("Table special persist ", rootobj.testsptable.a == 6)
|
||||
|
||||
|
||||
print()
|
||||
if passed == total then
|
||||
print("All tests passed.")
|
||||
else
|
||||
print(passed .. "/" .. total .. " tests passed.")
|
||||
end
|
||||
|
||||
if rootobj.testlife then
|
||||
print(select(2, coroutine.resume(rootobj.testlife)))
|
||||
print(select(2, coroutine.resume(rootobj.testlife)))
|
||||
end
|
||||
end
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
infile, err = io.open(..., "rb")
|
||||
if infile == nil then
|
||||
error("While opening: " .. (err or "unknown error"))
|
||||
end
|
||||
|
||||
buf, err = infile:read("*a")
|
||||
if buf == nil then
|
||||
error("While reading: " .. (err or "unknown error"))
|
||||
end
|
||||
|
||||
infile:close()
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
uperms = {
|
||||
_ENV = _ENV,
|
||||
[1] = coroutine.yield,
|
||||
[2] = permtable,
|
||||
[3] = pcall,
|
||||
[4] = xpcall,
|
||||
}
|
||||
rootobj = eris.unpersist(uperms, buf)
|
||||
|
||||
test(rootobj)
|
||||
|
||||
os.remove(...)
|
||||
Reference in New Issue
Block a user