From 1f75a21851b0a0bd4bc766c458e67721dd37c9fd Mon Sep 17 00:00:00 2001 From: sanine Date: Mon, 22 Aug 2022 21:37:12 -0500 Subject: add append_table() --- src/util/CMakeLists.txt | 9 +++++++++ src/util/util.c | 12 ++++++++++++ src/util/util.h | 8 ++++++++ src/util/util.test.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 src/util/CMakeLists.txt create mode 100644 src/util/util.c create mode 100644 src/util/util.h create mode 100644 src/util/util.test.c (limited to 'src/util') 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 + +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 + +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 +#include +#include +#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); +} -- cgit v1.2.1