diff options
Diffstat (limited to 'tests/tests.c')
| -rw-r--r-- | tests/tests.c | 122 |
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; } |
