From d635e03cd82f14dfcea55dae4f8b438eccd602a0 Mon Sep 17 00:00:00 2001 From: Abdelrahman Date: Sat, 15 Feb 2025 20:29:50 +0000 Subject: [PATCH] Add tests for Str8List utilities --- tests/str8/test_str8.c | 15 +++ tests/str8/test_str8.h | 1 + tests/str8/test_str8_list.c | 248 ++++++++++++++++++++++++++++++++++++ tests/str8/test_str8_list.h | 22 ++++ tests/wapptest.c | 9 ++ 5 files changed, 295 insertions(+) create mode 100644 tests/str8/test_str8_list.c create mode 100644 tests/str8/test_str8_list.h diff --git a/tests/str8/test_str8.c b/tests/str8/test_str8.c index 4e6cbdb..0784bad 100644 --- a/tests/str8/test_str8.c +++ b/tests/str8/test_str8.c @@ -201,6 +201,21 @@ TestFuncResult test_str8_set(void) { return wapp_tester_result(result); } +TestFuncResult test_str8_equal(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("hello"); + Str8RO s2 = wapp_str8_lit_ro("hell"); + Str8RO s3 = wapp_str8_lit_ro("hello"); + Str8RO s4 = wapp_str8_lit_ro("goodbye"); + + result = wapp_str8_equal(&s1, &s2) == false; + result = result && wapp_str8_equal(&s1, &s3) == true; + result = result && wapp_str8_equal(&s1, &s4) == false; + + return wapp_tester_result(result); +} + TestFuncResult test_str8_substr(void) { bool result; Str8 s = wapp_str8_lit("Different strokes for different folks"); diff --git a/tests/str8/test_str8.h b/tests/str8/test_str8.h index 392c40f..956ff22 100644 --- a/tests/str8/test_str8.h +++ b/tests/str8/test_str8.h @@ -16,6 +16,7 @@ TestFuncResult test_str8_alloc_str8(void); TestFuncResult test_str8_get_index_within_bounds(void); TestFuncResult test_str8_get_index_out_of_bounds(void); TestFuncResult test_str8_set(void); +TestFuncResult test_str8_equal(void); TestFuncResult test_str8_substr(void); TestFuncResult test_str8_find(void); TestFuncResult test_str8_rfind(void); diff --git a/tests/str8/test_str8_list.c b/tests/str8/test_str8_list.c new file mode 100644 index 0000000..57c9306 --- /dev/null +++ b/tests/str8/test_str8_list.c @@ -0,0 +1,248 @@ +#include "test_str8_list.h" +#include "str8.h" +#include "tester.h" + +TestFuncResult test_str8_list_get(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + Str8RO s4 = wapp_str8_lit_ro("4"); + Str8RO s5 = wapp_str8_lit_ro("5"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + Str8Node n4 = { .string = &s4 }; + Str8Node n5 = { .string = &s5 }; + + wapp_str8_list_push_back(&list, &n1); + wapp_str8_list_push_back(&list, &n2); + wapp_str8_list_push_back(&list, &n3); + wapp_str8_list_push_back(&list, &n4); + wapp_str8_list_push_back(&list, &n5); + + Str8Node *node = wapp_str8_list_get(&list, 0); + result = node->string == &s1 && wapp_str8_equal(node->string, &s1); + + node = wapp_str8_list_get(&list, 1); + result = result && node->string == &s2 && wapp_str8_equal(node->string, &s2); + + node = wapp_str8_list_get(&list, 2); + result = result && node->string == &s3 && wapp_str8_equal(node->string, &s3); + + node = wapp_str8_list_get(&list, 3); + result = result && node->string == &s4 && wapp_str8_equal(node->string, &s4); + + node = wapp_str8_list_get(&list, 4); + result = result && node->string == &s5 && wapp_str8_equal(node->string, &s5); + + return wapp_tester_result(result); +} + +TestFuncResult test_str8_list_push_front(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + + wapp_str8_list_push_front(&list, &n1); + result = list.first == list.last && list.first == &n1 && list.first->string == &s1 && list.total_size == 1 && list.node_count == 1; + + wapp_str8_list_push_front(&list, &n2); + result = result && list.first == &n2 && list.first->string == &s2 && list.total_size == 2 && list.node_count == 2; + + wapp_str8_list_push_front(&list, &n3); + result = result && list.first == &n3 && list.first->string == &s3 && list.total_size == 3 && list.node_count == 3; + + return wapp_tester_result(result); +} + +TestFuncResult test_str8_list_push_back(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + + wapp_str8_list_push_back(&list, &n1); + result = list.first == list.last && list.last == &n1 && list.last->string == &s1 && list.total_size == 1 && list.node_count == 1; + + wapp_str8_list_push_back(&list, &n2); + result = result && list.last == &n2 && list.last->string == &s2 && list.total_size == 2 && list.node_count == 2; + + wapp_str8_list_push_back(&list, &n3); + result = result && list.last == &n3 && list.last->string == &s3 && list.total_size == 3 && list.node_count == 3; + + return wapp_tester_result(result); +} + +TestFuncResult test_str8_list_insert(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + Str8RO s4 = wapp_str8_lit_ro("4"); + Str8RO s5 = wapp_str8_lit_ro("5"); + Str8RO s6 = wapp_str8_lit_ro("6"); + Str8RO s7 = wapp_str8_lit_ro("7"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + Str8Node n4 = { .string = &s4 }; + Str8Node n5 = { .string = &s5 }; + Str8Node n6 = { .string = &s6 }; + Str8Node n7 = { .string = &s7 }; + + wapp_str8_list_push_back(&list, &n1); + wapp_str8_list_push_back(&list, &n2); + wapp_str8_list_push_back(&list, &n3); + wapp_str8_list_push_back(&list, &n4); + wapp_str8_list_push_back(&list, &n5); + + Str8Node *node; + wapp_str8_list_insert(&list, &n6, 2); + node = wapp_str8_list_get(&list, 2); + result = node != NULL && node->string == &s6 && list.total_size == 6 && list.node_count == 6; + wapp_str8_list_insert(&list, &n7, 5); + node = wapp_str8_list_get(&list, 5); + result = result && node != NULL && node->string == &s7 && list.total_size == 7 && list.node_count == 7; + + return wapp_tester_result(result); +} + +TestFuncResult test_str8_list_pop_front(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + Str8RO s4 = wapp_str8_lit_ro("4"); + Str8RO s5 = wapp_str8_lit_ro("5"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + Str8Node n4 = { .string = &s4 }; + Str8Node n5 = { .string = &s5 }; + + wapp_str8_list_push_back(&list, &n1); + wapp_str8_list_push_back(&list, &n2); + wapp_str8_list_push_back(&list, &n3); + wapp_str8_list_push_back(&list, &n4); + wapp_str8_list_push_back(&list, &n5); + + Str8Node *node = wapp_str8_list_pop_front(&list); + result = node == &n1 && node->string == &s1 && wapp_str8_equal(node->string, &s1) && list.total_size == 4 && list.node_count == 4; + + node = wapp_str8_list_pop_front(&list); + result = result && node == &n2 && node->string == &s2 && wapp_str8_equal(node->string, &s2) && list.total_size == 3 && list.node_count == 3; + + node = wapp_str8_list_pop_front(&list); + result = result && node == &n3 && node->string == &s3 && wapp_str8_equal(node->string, &s3) && list.total_size == 2 && list.node_count == 2; + + node = wapp_str8_list_pop_front(&list); + result = result && node == &n4 && node->string == &s4 && wapp_str8_equal(node->string, &s4) && list.total_size == 1 && list.node_count == 1; + + node = wapp_str8_list_pop_front(&list); + result = result && node == &n5 && node->string == &s5 && wapp_str8_equal(node->string, &s5) && list.total_size == 0 && list.node_count == 0; + + return wapp_tester_result(result); +} + +TestFuncResult test_str8_list_pop_back(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + Str8RO s4 = wapp_str8_lit_ro("4"); + Str8RO s5 = wapp_str8_lit_ro("5"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + Str8Node n4 = { .string = &s4 }; + Str8Node n5 = { .string = &s5 }; + + wapp_str8_list_push_front(&list, &n1); + wapp_str8_list_push_front(&list, &n2); + wapp_str8_list_push_front(&list, &n3); + wapp_str8_list_push_front(&list, &n4); + wapp_str8_list_push_front(&list, &n5); + + Str8Node *node = wapp_str8_list_pop_back(&list); + result = node == &n1 && node->string == &s1 && wapp_str8_equal(node->string, &s1) && list.total_size == 4 && list.node_count == 4; + + node = wapp_str8_list_pop_back(&list); + result = result && node == &n2 && node->string == &s2 && wapp_str8_equal(node->string, &s2) && list.total_size == 3 && list.node_count == 3; + + node = wapp_str8_list_pop_back(&list); + result = result && node == &n3 && node->string == &s3 && wapp_str8_equal(node->string, &s3) && list.total_size == 2 && list.node_count == 2; + + node = wapp_str8_list_pop_back(&list); + result = result && node == &n4 && node->string == &s4 && wapp_str8_equal(node->string, &s4) && list.total_size == 1 && list.node_count == 1; + + node = wapp_str8_list_pop_back(&list); + result = result && node == &n5 && node->string == &s5 && wapp_str8_equal(node->string, &s5) && list.total_size == 0 && list.node_count == 0; + + return wapp_tester_result(result); +} + +TestFuncResult test_str8_list_remove(void) { + bool result; + + Str8RO s1 = wapp_str8_lit_ro("1"); + Str8RO s2 = wapp_str8_lit_ro("2"); + Str8RO s3 = wapp_str8_lit_ro("3"); + Str8RO s4 = wapp_str8_lit_ro("4"); + Str8RO s5 = wapp_str8_lit_ro("5"); + + Str8List list = {0}; + Str8Node n1 = { .string = &s1 }; + Str8Node n2 = { .string = &s2 }; + Str8Node n3 = { .string = &s3 }; + Str8Node n4 = { .string = &s4 }; + Str8Node n5 = { .string = &s5 }; + + wapp_str8_list_push_back(&list, &n1); + wapp_str8_list_push_back(&list, &n2); + wapp_str8_list_push_back(&list, &n3); + wapp_str8_list_push_back(&list, &n4); + wapp_str8_list_push_back(&list, &n5); + + Str8Node *node = wapp_str8_list_remove(&list, 0); + result = node == &n1 && node->string == &s1 && wapp_str8_equal(node->string, &s1) && list.total_size == 4 && list.node_count == 4; + + node = wapp_str8_list_remove(&list, 0); + result = result && node == &n2 && node->string == &s2 && wapp_str8_equal(node->string, &s2) && list.total_size == 3 && list.node_count == 3; + + node = wapp_str8_list_remove(&list, 0); + result = result && node == &n3 && node->string == &s3 && wapp_str8_equal(node->string, &s3) && list.total_size == 2 && list.node_count == 2; + + node = wapp_str8_list_remove(&list, 0); + result = result && node == &n4 && node->string == &s4 && wapp_str8_equal(node->string, &s4) && list.total_size == 1 && list.node_count == 1; + + node = wapp_str8_list_remove(&list, 0); + result = result && node == &n5 && node->string == &s5 && wapp_str8_equal(node->string, &s5) && list.total_size == 0 && list.node_count == 0; + + return wapp_tester_result(result); +} diff --git a/tests/str8/test_str8_list.h b/tests/str8/test_str8_list.h new file mode 100644 index 0000000..55df574 --- /dev/null +++ b/tests/str8/test_str8_list.h @@ -0,0 +1,22 @@ +#ifndef TEST_STR8_LIST_H +#define TEST_STR8_LIST_H + +#include "tester.h" + +#ifdef __cplusplus +BEGIN_C_LINKAGE +#endif // __cplusplus + +TestFuncResult test_str8_list_get(void); +TestFuncResult test_str8_list_push_front(void); +TestFuncResult test_str8_list_push_back(void); +TestFuncResult test_str8_list_insert(void); +TestFuncResult test_str8_list_pop_front(void); +TestFuncResult test_str8_list_pop_back(void); +TestFuncResult test_str8_list_remove(void); + +#ifdef __cplusplus +END_C_LINKAGE +#endif // __cplusplus + +#endif // !TEST_STR8_LIST_H diff --git a/tests/wapptest.c b/tests/wapptest.c index 399acaf..5bc736d 100644 --- a/tests/wapptest.c +++ b/tests/wapptest.c @@ -1,4 +1,5 @@ #include "test_str8.h" +#include "test_str8_list.h" #include "test_allocator.h" #include "test_arena.h" #include "test_cpath.h" @@ -21,9 +22,17 @@ int main(void) { test_str8_get_index_within_bounds, test_str8_get_index_out_of_bounds, test_str8_set, + test_str8_equal, test_str8_substr, test_str8_find, test_str8_rfind, + test_str8_list_get, + test_str8_list_push_front, + test_str8_list_push_back, + test_str8_list_insert, + test_str8_list_pop_front, + test_str8_list_pop_back, + test_str8_list_remove, test_cpath_join_path, test_cpath_dirname, test_cpath_dirup,