diff --git a/test.c b/test.c index d529ed4..30c9fcb 100644 --- a/test.c +++ b/test.c @@ -1,42 +1,73 @@ -#include "ds.h" #include #include +#include -struct complex { +#include "ds.h" + +#define test(name, tests) do { \ + const char *_test_name = name; \ + int _tests_passed = 0; \ + int _tests = 0; \ + tests \ + _tests_passed += _tests; \ + printf("%s: %d/%d tests passed\n", name, _tests_passed, _tests); \ + } while (0) + +#define it(message, test) do { \ + _tests++; \ + if (!(test)) { \ + printf("%s %s FAILED\n", _test_name, message); \ + _tests_passed--; \ + } \ +} while (0) + +typedef struct { int num; char *str; -}; +} complex; int main(int argc, char *argv[]) { - char *a = "one"; - char *b = "two"; - ds_sll_t *ll = ds_sll_new_node(a); // [ "one" ] - ds_sll_insert(ll, b); // [ "one", "two" ] - ds_ll_foreach(ds_sll_t, ll) { - puts(cur->data); - } - ds_sll_remove(&ll, 1234); - char *pa = ds_sll_remove(&ll, 0); // [ "two" ] - char *pb = ds_sll_remove(&ll, 0); // [ ] + test("sll", + char *a = "one"; - struct complex *a2 = calloc(1, sizeof(struct complex)); - a2->num = 1; - a2->str = "abc"; - struct complex *b2 = calloc(1, sizeof(struct complex)); - b2->num = 2; - b2->str = "def"; + ds_sll_t *tmp; + it("ensures creates a new linked list", tmp = ds_sll_init()); + free(tmp); - ds_hmp_t *hmp = ds_hmp_init(101); - ds_hmp_insert(hmp, a2->str, a2); // [ (23)[ [ a->str, a ] ] ] - ds_hmp_insert(hmp, b2->str, b2); // [ (23)[ [ a->str, a ] ], (58)[ [ b->str, b ] ] - struct complex *pa2 = ds_hmp_remove(hmp, a2->str); // [ (23)[ [ a->str, a ] ] - struct complex *pb2 = ds_hmp_remove(hmp, b2->str); // [ (58)[ [ b->str, b ] ] - ds_hmp_free(&hmp); - puts(pa2->str); - puts(pb2->str); + ds_sll_t *ll = ds_sll_new_node(a); + it("inserts an invalid item", ds_sll_insert(ll, NULL) == -1); + it("removes an invalid index", ds_sll_remove(&ll, 1234) == NULL); + it("removes an item", a == ds_sll_remove(&ll, 0)); + ); - free(pa2); - free(pb2); + test("dll", + char *a = "one"; + + ds_dll_t *tmp; + it("ensures creates a new linked list", tmp = ds_dll_init()); + free(tmp); + + ds_dll_t *ll = ds_dll_new_node(a); + it("inserts an invalid item", ds_dll_insert(ll, NULL) == -1); + it("removes an invalid index", ds_dll_remove(&ll, 1234) == NULL); + it("removes an item", a == ds_dll_remove(&ll, 0)); + ); + + test("hmp", + complex *a = calloc(1, sizeof(complex)); + a->num = 1; + a->str = "abc"; + + ds_hmp_t *hmp = ds_hmp_init(101); + it("inserts an item", ds_hmp_insert(hmp, a->str, a) == 0); + it("generates a hash", _ds_hmp_gen_hash("a") == 177670); + it("removes a non-existent item", ds_hmp_remove(hmp, "???") == NULL); + it("removes an invalid item", ds_hmp_remove(hmp, NULL) == NULL); + it("removes an item", a == ds_hmp_remove(hmp, a->str)); + ds_hmp_free(&hmp, NULL); + + free(a); + ); }