hos/src/hulk/test.d

132 lines
2.9 KiB
D

/**
* 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);
}
}
}