1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#define LS_TEST_IMPLEMENTATION
#include "ls_test.h"
#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(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;
}
TEST_MAIN
|