summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/tests/hs_create_table_tests.c598
1 files changed, 70 insertions, 528 deletions
diff --git a/src/tests/hs_create_table_tests.c b/src/tests/hs_create_table_tests.c
index 403ca19..5205690 100644
--- a/src/tests/hs_create_table_tests.c
+++ b/src/tests/hs_create_table_tests.c
@@ -80,6 +80,15 @@ TEST(table_correct_index)
#define checkval_light(expected) \
check_value(lua_islightuserdata, "light userdata", void *, lua_touserdata, value==expected)
+#define store(name) \
+ lua_pushvalue(L, -1); \
+ int name ## _ref = luaL_ref(L, LUA_REGISTRYINDEX); \
+ int name = lua_gettop(L);
+
+#define load(name) \
+ lua_rawgeti(L, LUA_REGISTRYINDEX, name ## _ref); \
+ name = lua_gettop(L);
+
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
@@ -90,8 +99,11 @@ TEST(table_correct_index)
TEST(create_table_bool_bool)
{
+ int oldtop = lua_gettop(L);
int index = hs_create_table
(L, hs_bool_bool(true, true), hs_bool_bool(false, true));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
loadkey_bool(index, true);
checkval_bool(true);
loadkey_bool(index, false);
@@ -101,8 +113,11 @@ TEST(create_table_bool_bool)
TEST(create_table_bool_int)
{
+ int oldtop = lua_gettop(L);
int index = hs_create_table
(L, hs_bool_int(true, 15), hs_bool_int(false, 25));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
loadkey_bool(index, true);
checkval_int(15);
loadkey_bool(index, false);
@@ -112,8 +127,11 @@ TEST(create_table_bool_int)
TEST(create_table_bool_num)
{
+ int oldtop = lua_gettop(L);
int index = hs_create_table
(L, hs_bool_num(true, 2.718), hs_bool_num(false, 1.618));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
loadkey_bool(index, true);
checkval_num(2.718);
loadkey_bool(index, false);
@@ -123,8 +141,11 @@ TEST(create_table_bool_num)
TEST(create_table_bool_str)
{
+ int oldtop = lua_gettop(L);
int index = hs_create_table
(L, hs_bool_str(true, "hello"), hs_bool_str(false, "world"));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
loadkey_bool(index, true);
checkval_str("hello");
loadkey_bool(index, false);
@@ -134,38 +155,58 @@ TEST(create_table_bool_str)
TEST(create_table_bool_tbl)
{
+ int oldtop = lua_gettop(L);
+
lua_newtable(L);
- int tbl1 = lua_gettop(L);
+ store(value1);
lua_newtable(L);
- int tbl2 = lua_gettop(L);
+ store(value2);
+
int index = hs_create_table
- (L, hs_bool_tbl(true, tbl1), hs_bool_tbl(false, tbl2));
+ (L, hs_bool_tbl(true, value1), hs_bool_tbl(false, value2));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
+ load(value1);
+ load(value2);
+
loadkey_bool(index, true);
- checkval_tbl(tbl1);
+ checkval_tbl(value1);
loadkey_bool(index, false);
- checkval_tbl(tbl2);
+ checkval_tbl(value2);
return 0;
}
TEST(create_table_bool_func)
{
+ int oldtop = lua_gettop(L);
+
luaL_loadstring(L, "print('hello')");
- int func1 = lua_gettop(L);
+ store(value1);
luaL_loadstring(L, "print('hello')");
- int func2 = lua_gettop(L);
+ store(value2);
+
int index = hs_create_table
- (L, hs_bool_func(true, func1), hs_bool_func(false, func2));
+ (L, hs_bool_func(true, value1), hs_bool_func(false, value2));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
+ load(value1);
+ load(value2);
+
loadkey_bool(index, true);
- checkval_func(func1);
+ checkval_func(value1);
loadkey_bool(index, false);
- checkval_func(func2);
+ checkval_func(value2);
return 0;
}
TEST(create_table_bool_cfunc)
{
+
+ int oldtop = lua_gettop(L);
int index = hs_create_table
(L, hs_bool_cfunc(true, testfunc1), hs_bool_cfunc(false, testfunc2));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
loadkey_bool(index, true);
checkval_cfunc(testfunc1);
loadkey_bool(index, false);
@@ -176,12 +217,20 @@ TEST(create_table_bool_cfunc)
TEST(create_table_bool_user)
{
+ int oldtop = lua_gettop(L);
+
lua_newuserdata(L, sizeof(char));
- int user1 = lua_gettop(L);
+ store(user1);
lua_newuserdata(L, sizeof(char));
- int user2 = lua_gettop(L);
+ store(user2);
+
int index = hs_create_table
(L, hs_bool_user(true, user1), hs_bool_user(false, user2));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
+ load(user1);
+ load(user2);
+
loadkey_bool(index, true);
checkval_user(user1);
loadkey_bool(index, false);
@@ -195,8 +244,12 @@ TEST(create_table_bool_light)
void *light1 = (void *) &a1;
int a2 = 6;
void *light2 = (void *) &a2;
+
+ int oldtop = lua_gettop(L);
int index = hs_create_table
(L, hs_bool_light(true, light1), hs_bool_light(false, light2));
+ mu_assert_equal(oldtop + 1, lua_gettop(L));
+
loadkey_bool(index, true);
checkval_light(light1);
loadkey_bool(index, false);
@@ -207,518 +260,6 @@ TEST(create_table_bool_light)
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
- * integer keys
- *
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
-
-TEST(create_table_int_bool)
-{
- int index = hs_create_table
- (L, hs_int_bool(15, true), hs_int_bool(25, true));
- loadkey_int(index, 15);
- checkval_bool(true);
- loadkey_int(index, 25);
- checkval_bool(true);
- return 0;
-}
-
-TEST(create_table_int_int)
-{
- int index = hs_create_table
- (L, hs_int_int(15, 15), hs_int_int(25, 25));
- loadkey_int(index, 15);
- checkval_int(15);
- loadkey_int(index, 25);
- checkval_int(25);
- return 0;
-}
-
-TEST(create_table_int_num)
-{
- int index = hs_create_table
- (L, hs_int_num(15, 2.718), hs_int_num(25, 1.618));
- loadkey_int(index, 15);
- checkval_num(2.718);
- loadkey_int(index, 25);
- checkval_num(1.618);
- return 0;
-}
-
-TEST(create_table_int_str)
-{
- int index = hs_create_table
- (L, hs_int_str(15, "hello"), hs_int_str(25, "world"));
- loadkey_int(index, 15);
- checkval_str("hello");
- loadkey_int(index, 25);
- checkval_str("world");
- return 0;
-}
-
-TEST(create_table_int_tbl)
-{
- lua_newtable(L);
- int tbl1 = lua_gettop(L);
- lua_newtable(L);
- int tbl2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_int_tbl(15, tbl1), hs_int_tbl(25, tbl2));
- loadkey_int(index, 15);
- checkval_tbl(tbl1);
- loadkey_int(index, 25);
- checkval_tbl(tbl2);
- return 0;
-}
-
-TEST(create_table_int_func)
-{
- luaL_loadstring(L, "print('hello')");
- int func1 = lua_gettop(L);
- luaL_loadstring(L, "print('hello')");
- int func2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_int_func(15, func1), hs_int_func(25, func2));
- loadkey_int(index, 15);
- checkval_func(func1);
- loadkey_int(index, 25);
- checkval_func(func2);
- return 0;
-}
-
-TEST(create_table_int_cfunc)
-{
- int index = hs_create_table
- (L, hs_int_cfunc(15, testfunc1), hs_int_cfunc(25, testfunc2));
- loadkey_int(index, 15);
- checkval_cfunc(testfunc1);
- loadkey_int(index, 25);
- checkval_cfunc(testfunc2);
- return 0;
-}
-
-
-TEST(create_table_int_user)
-{
- lua_newuserdata(L, sizeof(char));
- int user1 = lua_gettop(L);
- lua_newuserdata(L, sizeof(char));
- int user2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_int_user(15, user1), hs_int_user(25, user2));
- loadkey_int(index, 15);
- checkval_user(user1);
- loadkey_int(index, 25);
- checkval_user(user2);
- return 0;
-}
-
-TEST(create_table_int_light)
-{
- int a1 = 5;
- void *light1 = (void *) &a1;
- int a2 = 6;
- void *light2 = (void *) &a2;
- int index = hs_create_table
- (L, hs_int_light(15, light1), hs_int_light(25, light2));
- loadkey_int(index, 15);
- checkval_light(light1);
- loadkey_int(index, 25);
- checkval_light(light2);
- return 0;
-}
-
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- *
- * number keys
- *
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
-
-TEST(create_table_num_bool)
-{
- int index = hs_create_table
- (L, hs_num_bool(43.3f, true), hs_num_bool(63.75f, true));
- loadkey_num(index, 43.3f);
- checkval_bool(true);
- loadkey_num(index, 63.75f);
- checkval_bool(true);
- return 0;
-}
-
-TEST(create_table_num_int)
-{
- int index = hs_create_table
- (L, hs_num_int(43.3f, 15), hs_num_int(63.75f, 25));
- loadkey_num(index, 43.3f);
- checkval_int(15);
- loadkey_num(index, 63.75f);
- checkval_int(25);
- return 0;
-}
-
-TEST(create_table_num_num)
-{
- int index = hs_create_table
- (L, hs_num_num(43.3f, 2.718), hs_num_num(63.75f, 1.618));
- loadkey_num(index, 43.3f);
- checkval_num(2.718);
- loadkey_num(index, 63.75f);
- checkval_num(1.618);
- return 0;
-}
-
-TEST(create_table_num_str)
-{
- int index = hs_create_table
- (L, hs_num_str(43.3f, "hello"), hs_num_str(63.75f, "world"));
- loadkey_num(index, 43.3f);
- checkval_str("hello");
- loadkey_num(index, 63.75f);
- checkval_str("world");
- return 0;
-}
-
-TEST(create_table_num_tbl)
-{
- lua_newtable(L);
- int tbl1 = lua_gettop(L);
- lua_newtable(L);
- int tbl2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_num_tbl(43.3f, tbl1), hs_num_tbl(63.75f, tbl2));
- loadkey_num(index, 43.3f);
- checkval_tbl(tbl1);
- loadkey_num(index, 63.75f);
- checkval_tbl(tbl2);
- return 0;
-}
-
-TEST(create_table_num_func)
-{
- luaL_loadstring(L, "print('hello')");
- int func1 = lua_gettop(L);
- luaL_loadstring(L, "print('hello')");
- int func2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_num_func(43.3f, func1), hs_num_func(63.75f, func2));
- loadkey_num(index, 43.3f);
- checkval_func(func1);
- loadkey_num(index, 63.75f);
- checkval_func(func2);
- return 0;
-}
-
-TEST(create_table_num_cfunc)
-{
- int index = hs_create_table
- (L, hs_num_cfunc(43.3f, testfunc1), hs_num_cfunc(63.75f, testfunc2));
- loadkey_num(index, 43.3f);
- checkval_cfunc(testfunc1);
- loadkey_num(index, 63.75f);
- checkval_cfunc(testfunc2);
- return 0;
-}
-
-
-TEST(create_table_num_user)
-{
- lua_newuserdata(L, sizeof(char));
- int user1 = lua_gettop(L);
- lua_newuserdata(L, sizeof(char));
- int user2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_num_user(43.3f, user1), hs_num_user(63.75f, user2));
- loadkey_num(index, 43.3f);
- checkval_user(user1);
- loadkey_num(index, 63.75f);
- checkval_user(user2);
- return 0;
-}
-
-TEST(create_table_num_light)
-{
- int a1 = 5;
- void *light1 = (void *) &a1;
- int a2 = 6;
- void *light2 = (void *) &a2;
- int index = hs_create_table
- (L, hs_num_light(43.3f, light1), hs_num_light(63.75f, light2));
- loadkey_num(index, 43.3f);
- checkval_light(light1);
- loadkey_num(index, 63.75f);
- checkval_light(light2);
- return 0;
-}
-
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- *
- * string keys
- *
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
-
-TEST(create_table_str_bool)
-{
- int index = hs_create_table
- (L, hs_str_bool("hello", true), hs_str_bool("world", true));
- loadkey_str(index, "hello");
- checkval_bool(true);
- loadkey_str(index, "world");
- checkval_bool(true);
- return 0;
-}
-
-TEST(create_table_str_int)
-{
- int index = hs_create_table
- (L, hs_str_int("hello", 15), hs_str_int("world", 25));
- loadkey_str(index, "hello");
- checkval_int(15);
- loadkey_str(index, "world");
- checkval_int(25);
- return 0;
-}
-
-TEST(create_table_str_num)
-{
- int index = hs_create_table
- (L, hs_str_num("hello", 2.718), hs_str_num("world", 1.618));
- loadkey_str(index, "hello");
- checkval_num(2.718);
- loadkey_str(index, "world");
- checkval_num(1.618);
- return 0;
-}
-
-TEST(create_table_str_str)
-{
- int index = hs_create_table
- (L, hs_str_str("hello", "hello"), hs_str_str("world", "world"));
- loadkey_str(index, "hello");
- checkval_str("hello");
- loadkey_str(index, "world");
- checkval_str("world");
- return 0;
-}
-
-TEST(create_table_str_tbl)
-{
- lua_newtable(L);
- int tbl1 = lua_gettop(L);
- lua_newtable(L);
- int tbl2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_str_tbl("hello", tbl1), hs_str_tbl("world", tbl2));
- loadkey_str(index, "hello");
- checkval_tbl(tbl1);
- loadkey_str(index, "world");
- checkval_tbl(tbl2);
- return 0;
-}
-
-TEST(create_table_str_func)
-{
- luaL_loadstring(L, "print('hello')");
- int func1 = lua_gettop(L);
- luaL_loadstring(L, "print('hello')");
- int func2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_str_func("hello", func1), hs_str_func("world", func2));
- loadkey_str(index, "hello");
- checkval_func(func1);
- loadkey_str(index, "world");
- checkval_func(func2);
- return 0;
-}
-
-TEST(create_table_str_cfunc)
-{
- int index = hs_create_table
- (L, hs_str_cfunc("hello", testfunc1), hs_str_cfunc("world", testfunc2));
- loadkey_str(index, "hello");
- checkval_cfunc(testfunc1);
- loadkey_str(index, "world");
- checkval_cfunc(testfunc2);
- return 0;
-}
-
-
-TEST(create_table_str_user)
-{
- lua_newuserdata(L, sizeof(char));
- int user1 = lua_gettop(L);
- lua_newuserdata(L, sizeof(char));
- int user2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_str_user("hello", user1), hs_str_user("world", user2));
- loadkey_str(index, "hello");
- checkval_user(user1);
- loadkey_str(index, "world");
- checkval_user(user2);
- return 0;
-}
-
-TEST(create_table_str_light)
-{
- int a1 = 5;
- void *light1 = (void *) &a1;
- int a2 = 6;
- void *light2 = (void *) &a2;
- int index = hs_create_table
- (L, hs_str_light("hello", light1), hs_str_light("world", light2));
- loadkey_str(index, "hello");
- checkval_light(light1);
- loadkey_str(index, "world");
- checkval_light(light2);
- return 0;
-}
-
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- *
- * table keys
- *
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
-
-#define create_table_keys() \
- lua_newtable(L); int table1_a = lua_gettop(L); \
- lua_newtable(L); int table2_a = lua_gettop(L); \
- lua_pushvalue(L, table1_a); int table1_b = lua_gettop(L); \
- lua_pushvalue(L, table2_a); int table2_b = lua_gettop(L);
-
-
-TEST(create_table_tbl_bool)
-{
- create_table_keys();
- int index = hs_create_table
- (L, hs_tbl_bool(table1_a, true), hs_tbl_bool(table2_a, true));
- loadkey_tbl(index, table1_b);
- checkval_bool(true);
- loadkey_tbl(index, table2_b);
- checkval_bool(true);
- return 0;
-}
-
-TEST(create_table_tbl_int)
-{
- create_table_keys();
- int index = hs_create_table
- (L, hs_tbl_int(table1_a, 15), hs_tbl_int(table2_a, 25));
- loadkey_tbl(index, table1_b);
- checkval_int(15);
- loadkey_tbl(index, table2_b);
- checkval_int(25);
- return 0;
-}
-
-TEST(create_table_tbl_num)
-{
- create_table_keys();
- int index = hs_create_table
- (L, hs_tbl_num(table1_a, 2.718), hs_tbl_num(table2_a, 1.618));
- loadkey_tbl(index, table1_b);
- checkval_num(2.718);
- loadkey_tbl(index, table2_b);
- checkval_num(1.618);
- return 0;
-}
-
-TEST(create_table_tbl_str)
-{
- create_table_keys();
- int index = hs_create_table
- (L, hs_tbl_str(table1_a, "hello"), hs_tbl_str(table2_a, "world"));
- loadkey_tbl(index, table1_b);
- checkval_str("hello");
- loadkey_tbl(index, table2_b);
- checkval_str("world");
- return 0;
-}
-
-TEST(create_table_tbl_tbl)
-{
- create_table_keys();
- lua_newtable(L);
- int tbl1 = lua_gettop(L);
- lua_newtable(L);
- int tbl2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_tbl_tbl(table1_a, tbl1), hs_tbl_tbl(table2_a, tbl2));
- loadkey_tbl(index, table1_b);
- checkval_tbl(tbl1);
- loadkey_tbl(index, table2_b);
- checkval_tbl(tbl2);
- return 0;
-}
-
-TEST(create_table_tbl_func)
-{
- create_table_keys();
- luaL_loadstring(L, "print('hello')");
- int func1 = lua_gettop(L);
- luaL_loadstring(L, "print('hello')");
- int func2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_tbl_func(table1_a, func1), hs_tbl_func(table2_a, func2));
- loadkey_tbl(index, table1_b);
- checkval_func(func1);
- loadkey_tbl(index, table2_b);
- checkval_func(func2);
- return 0;
-}
-
-TEST(create_table_tbl_cfunc)
-{
- create_table_keys();
- int index = hs_create_table
- (L, hs_tbl_cfunc(table1_a, testfunc1), hs_tbl_cfunc(table2_a, testfunc2));
- loadkey_tbl(index, table1_b);
- checkval_cfunc(testfunc1);
- loadkey_tbl(index, table2_b);
- checkval_cfunc(testfunc2);
- return 0;
-}
-
-
-TEST(create_table_tbl_user)
-{
- create_table_keys();
- lua_newuserdata(L, sizeof(char));
- int user1 = lua_gettop(L);
- lua_newuserdata(L, sizeof(char));
- int user2 = lua_gettop(L);
- int index = hs_create_table
- (L, hs_tbl_user(table1_a, user1), hs_tbl_user(table2_a, user2));
- loadkey_tbl(index, table1_b);
- checkval_user(user1);
- loadkey_tbl(index, table2_b);
- checkval_user(user2);
- return 0;
-}
-
-TEST(create_table_tbl_light)
-{
- create_table_keys();
- int a1 = 5;
- void *light1 = (void *) &a1;
- int a2 = 6;
- void *light2 = (void *) &a2;
- int index = hs_create_table
- (L, hs_tbl_light(table1_a, light1), hs_tbl_light(table2_a, light2));
- loadkey_tbl(index, table1_b);
- checkval_light(light1);
- loadkey_tbl(index, table2_b);
- checkval_light(light2);
- return 0;
-}
-
-
-/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- *
* test suite
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -750,7 +291,7 @@ void hs_create_table_tests()
mu_run_test("create table with boolean keys and light userdata values", \
create_table_bool_light);
- /* integer keys */
+ /* integer keys /
mu_run_test("create table with integer keys and boolean values",
create_table_int_bool);
mu_run_test("create table with integer keys and integer values", \
@@ -770,7 +311,7 @@ void hs_create_table_tests()
mu_run_test("create table with integer keys and light userdata values", \
create_table_int_light);
- /* number keys */
+ /* number keys /
mu_run_test("create table with number keys and boolean values",
create_table_num_bool);
mu_run_test("create table with number keys and integer values", \
@@ -790,7 +331,7 @@ void hs_create_table_tests()
mu_run_test("create table with number keys and light userdata values", \
create_table_num_light);
- /* string keys */
+ /* string keys /
mu_run_test("create table with string keys and boolean values",
create_table_str_bool);
mu_run_test("create table with string keys and integer values", \
@@ -810,7 +351,7 @@ void hs_create_table_tests()
mu_run_test("create table with string keys and light userdata values", \
create_table_str_light);
- /* table keys */
+ /* table keys /
mu_run_test("create table with table keys and boolean values",
create_table_tbl_bool);
mu_run_test("create table with table keys and integer values", \
@@ -829,5 +370,6 @@ void hs_create_table_tests()
create_table_tbl_user);
mu_run_test("create table with table keys and light userdata values", \
create_table_tbl_light);
+ /**/
}