raze-gles/polymer/eduke32/source/lunatic/test.elua
helixhorned 59df76f0b6 Lunatic: actors
git-svn-id: https://svn.eduke32.com/eduke32@2747 1a8010ca-5511-0410-912e-c29ae57300e0
2012-06-10 18:56:15 +00:00

130 lines
3.8 KiB
Text

-- test script for ELua/Lunatic Interpreter
--do return end
print('---=== ELua Test script ===---')
local function printf(fmt, ...)
print(string.format(fmt, ...))
end
local function checkfail(funcstr)
local status, res = pcall(DBG_.loadstring(funcstr))
if (status) then
print('ERROR: '..funcstr.." DIDN'T fail")
else
print('SUCCESS: '..funcstr.." failed: "..res)
end
end
---- check serialization ----
gamevar("ourvar")
gamevar("ourvar2")
-- test nans, infs, precision, subnorms
ourvar2 = { "asd"; 0/0, 1/0, -1/0, 0.12345678901234567, 1e-314 }
ourvar = { ourvar2; 1, 2, 3, "qwe" }
ourvar[#ourvar+1] = ourvar;
local gvstr = DBG_.serializeGamevars()
ourvar = -1
print("========== attempting to load string: ==========")
print(gvstr)
print("---------- (end string to load) ----------")
DBG_.loadGamevarsString(gvstr)
print("ourvar[4]="..ourvar[4])
local i
print('tweaking sector pals')
print('numsectors: ' .. gv.numsectors .. ' of ' .. gv.MAXSECTORS)
---[[
for i = 0, gv.numsectors/2 do
sector[i].floorpal = 1;
sector[i].ceilingpal = 2;
end
checkfail('gv.sprite[0].yrepeat = 100') -- direct gv array access forbidden
local vol, lev
vol, lev = TEMP_getvollev()
print('volume='..vol..', level='..lev)
if (vol==1 and lev==1) then -- E1L1
print('tweaking some sprites 2')
i = 562
spriteext[i].alpha = 0.5;
sprite[i].cstat = bit.bor(sprite[i].cstat, 2+512);
spriteext[i].pitch = 128;
spriteext[i].roll = 256;
for spr in spritesofsect(307) do -- some fence sprites in E1L1
print('spr', spr)
sprite[spr].pal = 6
end
for spr in spritesofsect(236) do
print('#spr', spr)
end
--this is a problem
--actor = {}
actor[562].flags = bit.bor(actor[562].flags, 2); -- pal 6 with goggles on front SEENINE
end
if (vol==1 and lev==8) then
print('tweaking bunch 1');
-- trueror1.map
for i in sectorsofbunch(1, gv.CEILING) do
sector[i].ceilingz = sector[i].ceilingz - 3*1024;
end
for i in sectorsofbunch(1, gv.FLOOR) do
sector[i].floorz = sector[i].floorz - 3*1024;
end
end
--]]
--DBG_.printkv('_G in test.elua', _G)
checkfail('print(sprite[100000].ceilingpal)') -- oob read access
checkfail('setmetatable(sprite, {})') -- set metatable forbidden
checkfail('sector[-1].ceilingpal = 4') -- oob write access
checkfail('sector[0].wallnum = 0') -- wallnum member is read-only
checkfail('gv.numsectors = 4') -- gv.numsectors is read-only
checkfail('gv.QWE = 4') -- cannot create new fields in 'gv'
checkfail('sector[4] = sector[6]') -- direct sector write access forbidden
checkfail('nextspritesect[4] = -666') -- that would be horrible...
checkfail('print(nextspritesect[4].whatfield)') -- we're indexing a plain array!
checkfail('wall[4].QWE = 123') -- creating new keys forbidden... handled by LuaJit
checkfail("require('os')") -- 'require' has been thrown away to be replaced by
-- something more restricted later
checkfail("new_global = 345") -- we should declare globals
checkfail('gv.CEILING = 3') -- can't redefine constants in 'gv'
checkfail('string.dump(gameevent)') -- string.dump is unavailable
-- This is problematic, even though pretty much every access will yield a
-- "missing declaration" error.
-- See http://luajit.org/ext_ffi_api.html#ffi_C about what stuff ffi.C contains.
checkfail('gv.luaJIT_setmode(nil, 0, 0)')
gameevent(gv.EVENT_JUMP,
function(actori, playeri, dist)
printf("jump i=%d p=%d d=%d", actori, playeri, dist)
end
)
gameactor(1680, -- LIZTROOP
function(i, playeri, dist)
sprite[i].pal = math.random(32)
-- sprite[i].ang = bit.band(sprite[i].ang-20, 2047)
end
)
checkfail('gameactor(1680, 0)') -- lua function expected, number passed
print('---=== END TEST SCRIPT ===---')