aboutsummaryrefslogtreecommitdiff
path: root/tests/tests.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tests.c')
-rw-r--r--tests/tests.c122
1 files changed, 116 insertions, 6 deletions
diff --git a/tests/tests.c b/tests/tests.c
index 0d57df4..5edb0dc 100644
--- a/tests/tests.c
+++ b/tests/tests.c
@@ -1,14 +1,124 @@
#define LS_TEST_IMPLEMENTATION
#include "ls_test.h"
-int add(int a, int b) {
- return a + b;
+#include "ls_queue.h"
+
+LS_QUEUE_TYPE_INLINE(int, int_queue, 4)
+
+TEST_CASE(queue_init) {
+ int_queue q;
+ int_queue_init(&q);
+ ASSERT_EQ(q.read, 0, "%zu");
+ ASSERT_EQ(q.write, 0, "%zu");
+ return 0;
+}
+
+TEST_CASE(queue_push_single) {
+ int_queue q;
+ int_queue_init(&q);
+
+ int result = int_queue_push(&q, 42);
+ ASSERT_EQ(result, 1, "%d");
+ ASSERT_EQ(q.write, 1, "%zu");
+ ASSERT_EQ(q.read, 0, "%zu");
+
+ return 0;
+}
+
+TEST_CASE(queue_pop_single) {
+ int_queue q;
+ int_queue_init(&q);
+
+ int_queue_push(&q, 42);
+
+ int val;
+ int result = int_queue_pop(&q, &val);
+ ASSERT_EQ(result, 1, "%d");
+ ASSERT_EQ(val, 42, "%d");
+ ASSERT_EQ(q.read, 1, "%zu");
+
+ return 0;
+}
+
+TEST_CASE(queue_pop_empty) {
+ int_queue q;
+ int_queue_init(&q);
+
+ int val;
+ int result = int_queue_pop(&q, &val);
+ ASSERT_EQ(result, 0, "%d");
+
+ return 0;
}
-TEST_CASE(add) {
- ASSERT_EQ(add(1, 2), 3, "%d");
- ASSERT_EQ(add(2, 3), 5, "%d");
- ASSERT_EQ(add(0, 0), 100000, "%d");
+TEST_CASE(queue_fill_to_capacity) {
+ int_queue q;
+ int_queue_init(&q);
+
+ // Fill the queue to capacity (4 elements)
+ ASSERT_EQ(int_queue_push(&q, 1), 1, "%d");
+ ASSERT_EQ(int_queue_push(&q, 2), 1, "%d");
+ ASSERT_EQ(int_queue_push(&q, 3), 1, "%d");
+ ASSERT_EQ(int_queue_push(&q, 4), 1, "%d");
+
+ // Try to push one more (should fail)
+ int result = int_queue_push(&q, 5);
+ ASSERT_EQ(result, 0, "%d");
+
+ return 0;
+}
+
+TEST_CASE(queue_fifo_order) {
+ int_queue q;
+ int_queue_init(&q);
+
+ // Push values in order
+ int_queue_push(&q, 10);
+ int_queue_push(&q, 20);
+ int_queue_push(&q, 30);
+
+ // Pop values and check FIFO order
+ int val;
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 10, "%d");
+
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 20, "%d");
+
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 30, "%d");
+
+ return 0;
+}
+
+TEST_CASE(queue_circular_behavior) {
+ int_queue q;
+ int_queue_init(&q);
+
+ // Fill queue
+ int_queue_push(&q, 1);
+ int_queue_push(&q, 2);
+ int_queue_push(&q, 3);
+ int_queue_push(&q, 4);
+
+ // Pop some elements
+ int val;
+ int_queue_pop(&q, &val);
+ int_queue_pop(&q, &val);
+
+ // Should be able to push again
+ ASSERT_EQ(int_queue_push(&q, 5), 1, "%d");
+ ASSERT_EQ(int_queue_push(&q, 6), 1, "%d");
+
+ // Verify order is maintained
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 3, "%d");
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 4, "%d");
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 5, "%d");
+ int_queue_pop(&q, &val);
+ ASSERT_EQ(val, 6, "%d");
return 0;
}