/** * Kernel tests. */ module hulk.test; import hulk.klog; import hulk.list; struct Test { /** * Run tests. */ public static void run() { Klog.writefln("\a3Running kernel tests"); test_list(); Klog.writefln("\a3Kernel tests complete"); } private static void test_list() { Klog.writefln("Testing list..."); List!ulong list; assert_eq(null, list.head); assert_eq(null, list.tail); ulong v = 33; list.add(42); assert_neq(null, list.head); assert_neq(null, list.tail); list.add(v); list.add(0xFFFF); v = 55; size_t count; assert_eq(3, list.count); foreach (entry; list) { switch (count) { case 0: assert_eq(42, entry); break; case 1: assert_eq(33, entry); break; case 2: assert_eq(0xFFFF, entry); break; case 3: assert_eq(0, 1); break; default: break; } count++; } foreach (entry; list) { if (entry == 33) { list.remove(entry); } } assert_eq(2, list.count); count = 0; foreach (entry; list) { switch (count) { case 0: assert_eq(42, entry); break; case 1: assert_eq(0xFFFF, entry); break; case 2: assert_eq(0, 1); break; default: break; } count++; } foreach (entry; list) { if (entry == 42) { list.remove(entry); } } assert_eq(1, list.count); count = 0; foreach (entry; list) { switch (count) { case 0: assert_eq(0xFFFF, entry); break; case 1: assert_eq(0, 1); break; default: break; } count++; } assert_neq(null, list.head); assert_neq(null, list.tail); list.remove(list.head); assert_eq(0, list.count); assert_eq(null, list.head); assert_eq(null, list.tail); } private static void assert_eq(T)(T first, T second) { if (first != second) { Klog.fatal_error("Assertion failed! %x != %x", first, second); } } private static void assert_neq(T)(T first, T second) { if (first == second) { Klog.fatal_error("Assertion failed! %x == %x", first, second); } } }