From 451e6b1fff77bccedccdb745e4ee56cbeef31b79 Mon Sep 17 00:00:00 2001 From: Lam Wei Lun Date: Wed, 21 Jan 2026 02:46:02 +0800 Subject: Stack and Queue implementation and unit tests --- tests/std/test_queue.zc | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ tests/std/test_stack.zc | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 tests/std/test_queue.zc create mode 100644 tests/std/test_stack.zc (limited to 'tests') diff --git a/tests/std/test_queue.zc b/tests/std/test_queue.zc new file mode 100644 index 0000000..4d40c42 --- /dev/null +++ b/tests/std/test_queue.zc @@ -0,0 +1,48 @@ +import "std/queue.zc" + +test "Queue Push/Pop" { + print "Testing Queue Push/Pop"; + var queue = Queue::new(); + defer queue.free(); + + print "Popping on an empty queue without pushing anything prior" + var v = queue.pop(); + assert(v.is_none(), "v should not have a valid value"); + + print "Pushing in three values..." + queue.push(123); + queue.push(456); + queue.push(789); + + v = queue.pop(); + assert(v.is_some() && v.unwrap() == 123, "v's value should be 123"); + + v = queue.pop(); + assert(v.is_some() && v.unwrap() == 456, "v's value should be 456"); + + v = queue.pop(); + assert(v.is_some() && v.unwrap() == 789, "v's value should be 789"); + + print "Popping on an empty queue after pushing and popping three values" + v = queue.pop(); + assert(v.is_none(), "v should not have a valid value"); +} + +test "Queue Clone" { + print "Testing Queue Cloning"; + var queue = Queue::new(); + defer queue.free(); + queue.push(123); + var queue2 = queue.clone(); + defer queue2.free(); + + var v = queue2.pop(); + assert(v.is_some() && v.unwrap() == 123, "v's value should be 123"); + v = queue2.pop(); + assert(v.is_none(), "v should not have a valid value"); + + v = queue.pop(); + assert(v.is_some() && v.unwrap() == 123, "v's value should be 123"); + v = queue.pop(); + assert(v.is_none(), "v should not have a valid value"); +} diff --git a/tests/std/test_stack.zc b/tests/std/test_stack.zc new file mode 100644 index 0000000..ecc9d3c --- /dev/null +++ b/tests/std/test_stack.zc @@ -0,0 +1,48 @@ +import "std/stack.zc" + +test "Stack Push/Pop" { + print "Testing Stack Push/Pop"; + var stack = Stack::new(); + defer stack.free(); + + print "Popping on an empty stack without pushing anything prior" + var v = stack.pop(); + assert(v.is_none(), "v should not have a valid value"); + + print "Pushing in three values..." + stack.push(123); + stack.push(456); + stack.push(789); + + v = stack.pop(); + assert(v.is_some() && v.unwrap() == 789, "v's value should be 789"); + + v = stack.pop(); + assert(v.is_some() && v.unwrap() == 456, "v's value should be 456"); + + v = stack.pop(); + assert(v.is_some() && v.unwrap() == 123, "v's value should be 123"); + + print "Popping on an empty stack after pushing and popping three values" + v = stack.pop(); + assert(v.is_none(), "v should not have a valid value"); +} + +test "Stack Clone" { + print "Testing Stack Cloning"; + var stack = Stack::new(); + defer stack.free(); + stack.push(123); + var stack2 = stack.clone(); + defer stack2.free(); + + var v = stack2.pop(); + assert(v.is_some() && v.unwrap() == 123, "v's value should be 123"); + v = stack2.pop(); + assert(v.is_none(), "v should not have a valid value"); + + v = stack.pop(); + assert(v.is_some() && v.unwrap() == 123, "v's value should be 123"); + v = stack.pop(); + assert(v.is_none(), "v should not have a valid value"); +} -- cgit v1.2.3