master
1#include "singly_linked_list.h"
2#include <cgreen/cgreen.h>
3
4Describe(SinglyLinkedList);
5BeforeEach(SinglyLinkedList) {}
6AfterEach(SinglyLinkedList) {}
7
8Ensure(SinglyLinkedList, when_getting_head) {
9 Node *head = initialize(100);
10 assert_that(get(head, 0), is_equal_to(head));
11 free(head);
12}
13
14Ensure(SinglyLinkedList, when_getting_mid) {
15 Node *head = initialize(100);
16
17 Node *mid = add(head, 200);
18 add(head, 300);
19
20 assert_that(get(head, 1), is_equal_to(mid));
21 assert_that(get(head, 1)->data, is_equal_to(200));
22
23 free(head);
24}
25
26Ensure(SinglyLinkedList, when_getting_tail) {
27 Node *head = initialize(100);
28
29 add(head, 200);
30 Node *tail = add(head, 300);
31
32 assert_that(get(head, 2), is_equal_to(tail));
33
34 free(head);
35}
36
37Ensure(SinglyLinkedList, when_getting_from_empty_list) {
38 assert_that(get(NULL, 2), is_equal_to(NULL));
39}
40
41Ensure(SinglyLinkedList, when_getting_negative_index) {
42 Node *head = initialize(100);
43
44 assert_that(get(head, -1), is_equal_to(NULL));
45
46 free(head);
47}
48
49Ensure(SinglyLinkedList, when_getting_index_out_of_range) {
50 Node *head = initialize(100);
51
52 assert_that(get(head, 1), is_equal_to(NULL));
53
54 free(head);
55}
56
57Ensure(SinglyLinkedList, when_swapping_head) {
58 Node *head = initialize(100);
59
60 add(head, 200);
61 add(head, 300);
62
63 swap(&head, 0, 1);
64
65 assert_that(get(head, 0), is_non_null);
66 assert_that(get(head, 0)->data, is_equal_to(200));
67 assert_that(get(head, 1), is_non_null);
68 assert_that(get(head, 1)->data, is_equal_to(100));
69 assert_that(get(head, 2), is_non_null);
70 assert_that(get(head, 2)->data, is_equal_to(300));
71
72 free(head);
73}
74
75Ensure(SinglyLinkedList, when_swapping_y_head) {
76 Node *head = initialize(100);
77
78 add(head, 200);
79 add(head, 300);
80
81 swap(&head, 1, 0);
82
83 assert_that(get(head, 0), is_non_null);
84 assert_that(get(head, 0)->data, is_equal_to(200));
85 assert_that(get(head, 1), is_non_null);
86 assert_that(get(head, 1)->data, is_equal_to(100));
87 assert_that(get(head, 2), is_non_null);
88 assert_that(get(head, 2)->data, is_equal_to(300));
89
90 free(head);
91}
92
93Ensure(SinglyLinkedList, when_swapping_mid) {
94 Node *head = initialize(100);
95
96 add(head, 200);
97 add(head, 300);
98 add(head, 400);
99
100 swap(&head, 1, 2);
101
102 assert_that(get(head, 0)->data, is_equal_to(100));
103 assert_that(get(head, 1)->data, is_equal_to(300));
104 assert_that(get(head, 2)->data, is_equal_to(200));
105 assert_that(get(head, 3)->data, is_equal_to(400));
106
107 free(head);
108}
109
110Ensure(SinglyLinkedList, when_swapping_y_mid) {
111 Node *head = initialize(100);
112
113 add(head, 200);
114 add(head, 300);
115 add(head, 400);
116
117 swap(&head, 2, 1);
118
119 assert_that(get(head, 0)->data, is_equal_to(100));
120 assert_that(get(head, 1)->data, is_equal_to(300));
121 assert_that(get(head, 2)->data, is_equal_to(200));
122 assert_that(get(head, 3)->data, is_equal_to(400));
123
124 free(head);
125}
126
127Ensure(SinglyLinkedList, when_swapping_tail) {
128 Node *head = initialize(100);
129
130 add(head, 200);
131 add(head, 300);
132
133 swap(&head, 1, 2);
134
135 assert_that(get(head, 0), is_non_null);
136 assert_that(get(head, 0)->data, is_equal_to(100));
137 assert_that(get(head, 1), is_non_null);
138 assert_that(get(head, 1)->data, is_equal_to(300));
139 assert_that(get(head, 2), is_non_null);
140 assert_that(get(head, 2)->data, is_equal_to(200));
141
142 free(head);
143}
144
145Ensure(SinglyLinkedList, when_swapping_index_out_of_range) {
146 Node *head = initialize(100);
147
148 add(head, 200);
149 add(head, 300);
150
151 swap(&head, 1, 3);
152
153 assert_that(get(head, 0)->data, is_equal_to(100));
154 assert_that(get(head, 1)->data, is_equal_to(200));
155 assert_that(get(head, 2)->data, is_equal_to(300));
156
157 free(head);
158}
159
160Ensure(SinglyLinkedList, when_swapping_self) {
161 Node *head = initialize(100);
162
163 swap(&head, 0, 0);
164
165 assert_that(get(head, 0), is_non_null);
166 assert_that(get(head, 0)->data, is_equal_to(100));
167
168 free(head);
169}
170
171TestSuite *swap_singly_linked_list_tests() {
172 TestSuite *suite = create_test_suite();
173
174 add_test_with_context(suite, SinglyLinkedList, when_getting_head);
175 add_test_with_context(suite, SinglyLinkedList, when_getting_mid);
176 add_test_with_context(suite, SinglyLinkedList, when_getting_tail);
177 add_test_with_context(suite, SinglyLinkedList, when_getting_from_empty_list);
178 add_test_with_context(suite, SinglyLinkedList, when_getting_negative_index);
179 add_test_with_context(suite, SinglyLinkedList,
180 when_getting_index_out_of_range);
181
182 add_test_with_context(suite, SinglyLinkedList, when_swapping_head);
183 add_test_with_context(suite, SinglyLinkedList, when_swapping_y_head);
184 add_test_with_context(suite, SinglyLinkedList, when_swapping_mid);
185 add_test_with_context(suite, SinglyLinkedList, when_swapping_y_mid);
186 add_test_with_context(suite, SinglyLinkedList, when_swapping_tail);
187 add_test_with_context(suite, SinglyLinkedList,
188 when_swapping_index_out_of_range);
189 add_test_with_context(suite, SinglyLinkedList, when_swapping_self);
190
191 return suite;
192}
193
194int main(int argc, char **argv) {
195 TestSuite *suite = create_test_suite();
196 add_suite(suite, swap_singly_linked_list_tests());
197 return run_test_suite(suite, create_text_reporter());
198}