/* test/storage/test_page.c * * TDD-Zyklus: test_page_create * RED -> diese Datei schreiben, noch kein page.c -> Linker-Fehler * GREEN -> page_create() + page_free() in page.c implementieren */ #include "pauldb/storage.h" #include #include #include static void test_create_returns_non_null(void) { Page* p = page_create(42); assert(p != NULL); page_free(p); printf(" OK: page_create(42) returns non-NULL\n"); } static void test_insert_returns_slot_id(void) { Page* p = page_create(4); int slot_id = page_insert(p, "Hallo", 5); assert(slot_id == 0); page_free(p); printf(" OK: Insert\n"); } static void test_insert_and_get(void) { Page* p = page_create(1); int slot = page_insert(p, "ABAP", 4); assert(slot == 0); size_t len = 0; void* result = page_get(p, 0, &len); assert(result != NULL); assert(len == 4); assert(memcmp(result, "ABAP", 4) == 0); page_free(p); printf(" OK: insert + get roundtrip\n"); } static void test_multiple_inserts(void) { Page* p = page_create(2); assert(page_insert(p, "ABAP", 4) == 0); assert(page_insert(p, "HANA", 4) == 1); assert(page_insert(p, "CDS", 3) == 2); size_t len = 0; assert(memcmp(page_get(p, 0, &len), "ABAP", 4) == 0); assert(memcmp(page_get(p, 1, &len), "HANA", 4) == 0); assert(memcmp(page_get(p, 2, &len), "CDS", 3) == 0); page_free(p); printf(" OK: multiple inserts\n"); } static void test_invalid_slot_returns_null(void) { Page* p = page_create(3); assert(page_get(p, 99, NULL) == NULL); page_free(p); printf(" OK: invalid slot returns NULL\n"); } int main(void) { printf("=== test_page ===\n"); test_create_returns_non_null(); test_insert_returns_slot_id(); test_insert_and_get(); test_multiple_inserts(); test_invalid_slot_returns_null(); printf("All tests passed.\n"); return 0; }