sled/tests/lua_test.cc
tqcq 3c43c4ff58
All checks were successful
linux-mips64-gcc / linux-gcc-mips64el (Debug) (push) Successful in 1m53s
linux-x64-gcc / linux-gcc (Debug) (push) Successful in 1m46s
linux-mips64-gcc / linux-gcc-mips64el (Release) (push) Successful in 2m13s
linux-x64-gcc / linux-gcc (Release) (push) Successful in 1m49s
feat add lua
2024-03-31 19:44:27 +08:00

74 lines
2.5 KiB
C++

#include <minilua.h>
#include <sled/random.h>
TEST_SUITE("lua")
{
TEST_CASE("Base Test")
{
lua_State *state = luaL_newstate();
CHECK(state != nullptr);
luaL_openlibs(state);
REQUIRE_EQ(lua_gettop(state), 0);
SUBCASE("add")
{
REQUIRE_EQ(LUA_OK, luaL_loadstring(state, "function add(a, b) return a+b end"));
// load script
REQUIRE_EQ(lua_pcall(state, 0, 0, 0), LUA_OK);
// push function
sled::Random rand(-1);
for (int i = 0; i < 100; i++) {
int a = rand.Rand(0, 100);
int b = rand.Rand(0, 100);
CHECK_EQ(LUA_TFUNCTION, lua_getglobal(state, "add"));
CHECK(lua_isfunction(state, -1));
REQUIRE_EQ(lua_gettop(state), 1);
lua_pushnumber(state, a);
lua_pushnumber(state, b);
CHECK_EQ(lua_gettop(state), 3);
CHECK_MESSAGE(lua_pcall(state, 2, 1, 0) == LUA_OK, "call add(a,b) error: ", lua_tostring(state, -1));
CHECK(lua_isnumber(state, -1));
CHECK_EQ(lua_tonumber(state, -1), a + b);
lua_pop(state, 1);
CHECK_EQ(lua_gettop(state), 0);
}
}
SUBCASE("dump all function")
{
const char *dump_func
= " local seen={}\n"
"\n"
" function dump(t,i)\n"
" seen[t]=true\n"
" local s={}\n"
" local n=0\n"
" for k in pairs(t) do\n"
" n=n+1\n"
" s[n]=k\n"
" end\n"
" table.sort(s)\n"
" for k,v in ipairs(s) do\n"
" -- print(i,v)\n"
" v=t[v]\n"
" if type(v)==\"table\" and not seen[v] then\n"
" dump(v,i..\"\\t\")\n"
" end\n"
" end\n"
" end\n"
"\n"
"dump(_G,\"\")";
REQUIRE_EQ(LUA_OK, luaL_loadstring(state, dump_func));
CHECK_EQ(lua_gettop(state), 1);
CHECK_EQ(LUA_TFUNCTION, lua_type(state, -1));
REQUIRE_EQ(LUA_OK, lua_pcall(state, 0, 0, 0));
}
lua_close(state);
}
}