diff --git a/firmware/controllers/lua/lua.cpp b/firmware/controllers/lua/lua.cpp index f5eb9f45ce..22a30c0bc4 100644 --- a/firmware/controllers/lua/lua.cpp +++ b/firmware/controllers/lua/lua.cpp @@ -128,6 +128,19 @@ static int lua_setTickRate(lua_State* l) { return 0; } +static void loadLibraries(LuaHandle& ls) { + constexpr luaL_Reg libs[] = { + // TODO: do we even need the base lib? + //{ LUA_GNAME, luaopen_base }, + { LUA_MATHLIBNAME, luaopen_math }, + }; + + for (size_t i = 0; i < efi::size(libs); i++) { + luaL_requiref(ls, libs[i].name, libs[i].func, 1); + lua_pop(ls, 1); + } +} + static LuaHandle setupLuaState(lua_Alloc alloc) { LuaHandle ls = lua_newstate(alloc, NULL); @@ -137,9 +150,8 @@ static LuaHandle setupLuaState(lua_Alloc alloc) { return nullptr; } - // load libraries - luaopen_base(ls); - luaopen_math(ls); + // Load Lua's own libraries + loadLibraries(ls); // Load rusEFI hooks lua_register(ls, "setTickRate", lua_setTickRate); diff --git a/unit_tests/tests/lua/test_lua_basic.cpp b/unit_tests/tests/lua/test_lua_basic.cpp index 571d766972..44e44162e5 100644 --- a/unit_tests/tests/lua/test_lua_basic.cpp +++ b/unit_tests/tests/lua/test_lua_basic.cpp @@ -13,18 +13,16 @@ TEST(LuaBasic, ReturnsNumber) { EXPECT_FLOAT_EQ(result, 5.5f); } -TEST(LuaBasic, MathMin) { -/* +TEST(LuaBasic, MathLib) { auto script = R"( - function testFunc() - return min(1, 2) - end - )"; + function testFunc() + return math.min(3, 1, 2) + end + )"; float result = testLuaReturnsNumber(script); EXPECT_FLOAT_EQ(result, 1.0f); -*/ } TEST(LuaBasic, ReturnsInteger) {