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}