diff options
author | sanine-a <sanine.not@pm.me> | 2021-06-11 17:01:18 -0500 |
---|---|---|
committer | sanine-a <sanine.not@pm.me> | 2021-06-11 17:01:18 -0500 |
commit | 8c66847bfc4a6af1ca86e916b678a6b8ce58be2f (patch) | |
tree | 6e5a08d500b77fe34721be916d8f16959f8fadd2 /src | |
parent | 6e5972d05275076f9b7e3fbf9b5ac7bcbcef2cdc (diff) |
add initial tests for hs_create_table
Diffstat (limited to 'src')
-rw-r--r-- | src/honeysuckle.c | 8 | ||||
-rw-r--r-- | src/test.c | 66 |
2 files changed, 73 insertions, 1 deletions
diff --git a/src/honeysuckle.c b/src/honeysuckle.c index e45da48..1015343 100644 --- a/src/honeysuckle.c +++ b/src/honeysuckle.c @@ -19,6 +19,14 @@ int hs_parse_overloaded(lua_State *L, ...) } +int hs_create_table(lua_State *L, ...) +{ + lua_createtable(L, 0, 0); + L = L; + return 0; +} + + void hs_pushstring(lua_State *L, const char *format_string, ...) { lua_pushnumber(L, 0.4); @@ -808,6 +808,66 @@ TEST(parse_2_3_overload_1) /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * + * tests for hs_create_table + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +TEST(table_correct_index) +{ + int index = hs_create_table(L, HS_END); + mu_assert("returned incorrect index!", index == lua_gettop(L)); + return 0; +} + + +#define check_table_element(field, is_type, typestring, type, conversion, comparison) \ + do { \ + lua_getfield(L, -1, field); \ + if (!is_type(L, -1)) { lua_pop(L, 1); return "field '" field "' is not type " typestring "!"; } \ + type value = conversion(L, -1); \ + lua_pop(L, 1); \ + mu_assert("field '" field "' does not match the expected value!", comparison); \ + } while(0) + +#define check_bool(field, expected) check_table_element(field, lua_isboolean, "boolean", bool, lua_toboolean, value == expected) +#define check_int(field, expected) check_table_element(field, lua_isnumber, "integer", int, lua_tointeger, value == expected) +#define check_num(field, expected) check_table_element(field, lua_isnumber, "number", float, lua_tonumber, value == expected) +#define check_string(field, expected) check_table_element(field, lua_isstring, "string", char*, lua_tostring, strcmp(value, expected)) +#define check_cfunc(field, expected) check_table_element(field, lua_iscfunction, "C function", lua_CFunction, lua_tocfunction, value == expected) +#define check_user(field, expected) check_table_element(field, lua_isuserdata, "userdata", void*, lua_touserdata, value == expected) +#define check_light(field, expected) check_table_element(field, lua_islightuserdata, "light userdata", void*, lua_touserdata, value == expected) + +TEST(table_create_basic_types) +{ + void *userdata = lua_newuserdata(L, sizeof(char)); + int user_index = lua_gettop(L); + char lightuserdata = 'F'; + + hs_create_table + (L, + "boolValue", HS_BOOL, false, + "intValue", HS_INT, 15, + "numValue", HS_NUM, 33.66, + "stringValue", HS_STR, "goober", + "cfuncValue", HS_CFUNC, testfunc, + "userValue", HS_USER, user_index, + "lightValue", HS_LIGHT, &lightuserdata, + HS_END); + + check_bool("boolValue", false); + check_int("intValue", 15); + check_num("numValue", 33.66); + check_string("stringValue", "goober"); + check_cfunc("cfuncValue", testfunc); + check_user("userValue", userdata); + check_light("lightValue", &lightuserdata); + return 0; +} + + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * * tests for hs_pushstring * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -907,7 +967,11 @@ int main() mu_run_test("parse nil overloaded", parse_nil_overloaded); mu_run_test("parse 2/3 overload 0", parse_2_3_overload_0); mu_run_test("parse 2/3 overload 1", parse_2_3_overload_1); - + + printf("running hs_create_table() tests...\n"); + mu_run_test("return correct stack index", table_correct_index); + mu_run_test("check creation of basic types", table_create_basic_types); + printf("running hs_pushstring() tests...\n"); mu_run_test("hs_pushstring (no printf formatting)", push_noformat); mu_run_test("hs_pushstring (integer formatting)", push_formatint); |