diff options
author | sanine <sanine.not@pm.me> | 2022-08-22 21:37:12 -0500 |
---|---|---|
committer | sanine <sanine.not@pm.me> | 2022-08-22 21:37:12 -0500 |
commit | 1f75a21851b0a0bd4bc766c458e67721dd37c9fd (patch) | |
tree | 498b9f43176f098c852099707e5eb1717bcd1ec1 /src/util | |
parent | 1f47b685f35455afcc7441389cdc60018f66d159 (diff) |
add append_table()
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/CMakeLists.txt | 9 | ||||
-rw-r--r-- | src/util/util.c | 12 | ||||
-rw-r--r-- | src/util/util.h | 8 | ||||
-rw-r--r-- | src/util/util.test.c | 47 |
4 files changed, 76 insertions, 0 deletions
diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt new file mode 100644 index 0000000..5a01ec6 --- /dev/null +++ b/src/util/CMakeLists.txt @@ -0,0 +1,9 @@ +project(honey_engine) + +target_sources(honey PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/util.c +) + +target_sources(test PUBLIC + ${CMAKE_CURRENT_LIST_DIR}/util.test.c +) diff --git a/src/util/util.c b/src/util/util.c new file mode 100644 index 0000000..84edd27 --- /dev/null +++ b/src/util/util.c @@ -0,0 +1,12 @@ +#include <lua.h> + +void append_table(lua_State *L, int tbl_a, int tbl_b) +{ + lua_pushnil(L); + while(lua_next(L, tbl_b) != 0) { + lua_pushvalue(L, -2); // key + lua_pushvalue(L, -2); // value + lua_settable(L, tbl_a); + lua_pop(L, 1); + } +} diff --git a/src/util/util.h b/src/util/util.h new file mode 100644 index 0000000..3ef4e0b --- /dev/null +++ b/src/util/util.h @@ -0,0 +1,8 @@ +#ifndef HONEY_UTIL_H +#define HONEY_UTIL_H + +#include <lua.h> + +void append_table(lua_State *L, int tbl_a, int tbl_b); + +#endif diff --git a/src/util/util.test.c b/src/util/util.test.c new file mode 100644 index 0000000..b4029d2 --- /dev/null +++ b/src/util/util.test.c @@ -0,0 +1,47 @@ +#include <lua.h> +#include <lauxlib.h> +#include <honeysuckle.h> +#include "test/honey-test.h" + + +#include "util.c" + + +void test_append_table() +{ + lua_State *L = luaL_newstate(); + int a = hs_create_table(L, + hs_str_int("one", 1), + hs_str_int("two", 2), + ); + int b = hs_create_table(L, + hs_str_int("three", 3), + hs_str_int("four", 4), + hs_int_int(15, 2), + ); + append_table(L, a, b); + + lua_getfield(L, a, "one"); + lily_assert_int_equal(lua_tointeger(L, -1), 1); + + lua_getfield(L, a, "two"); + lily_assert_int_equal(lua_tointeger(L, -1), 2); + + lua_getfield(L, a, "three"); + lily_assert_int_equal(lua_tointeger(L, -1), 3); + + lua_getfield(L, a, "four"); + lily_assert_int_equal(lua_tointeger(L, -1), 4); + + lua_pushinteger(L, 15); + lua_gettable(L, a); + lily_assert_int_equal(lua_tointeger(L, -1), 2); + + lua_close(L); +} + + +void suite_util() +{ + lily_run_test(test_append_table); +} |