master
1#include "list.h"
2#include <cgreen/cgreen.h>
3
4Describe(List);
5BeforeEach(List) {}
6AfterEach(List) {}
7
8Ensure(List, when_getting_head) {
9 List *head = list_initialize((void *)100);
10 assert_that(list_get(head, 0), is_equal_to(head));
11 assert_that(list_get(head, 0)->data, is_equal_to(100));
12 free(head);
13}
14
15Ensure(List, when_getting_mid) {
16 List *head = list_initialize((void *)100);
17
18 List *mid = list_add(head, (void *)200);
19 list_add(head, (void *)300);
20
21 assert_that(list_get(head, 1), is_equal_to(mid));
22 assert_that(list_get(head, 1)->data, is_equal_to(200));
23
24 free(head);
25}
26
27Ensure(List, when_getting_tail) {
28 List *head = list_initialize((void *)100);
29 List *mid = list_add(head, (void *)200);
30 List *tail = list_add(head, (void *)300);
31
32 assert_that(list_get(head, 0), is_equal_to(head));
33 assert_that(list_get(head, 0)->data, is_equal_to(100));
34
35 assert_that(list_get(head, 1), is_equal_to(mid));
36 assert_that(list_get(head, 1)->data, is_equal_to(200));
37
38 assert_that(list_get(head, 2), is_equal_to(tail));
39 assert_that(list_get(head, 2)->data, is_equal_to(300));
40
41 free(head);
42}
43
44Ensure(List, when_getting_from_empty_list) {
45 assert_that(list_get(NULL, 2), is_equal_to(NULL));
46}
47
48Ensure(List, when_getting_negative_index) {
49 List *head = list_initialize((void *)100);
50
51 assert_that(list_get(head, -1), is_equal_to(NULL));
52
53 free(head);
54}
55
56Ensure(List, when_getting_index_out_of_range) {
57 List *head = list_initialize((void *)100);
58
59 assert_that(list_get(head, 1), is_equal_to(NULL));
60
61 free(head);
62}
63
64struct Person {
65 int age;
66};
67
68Ensure(List, when_adding_a_custom_datatype) {
69 struct Person *item = malloc(sizeof(struct Person));
70 item->age = 36;
71 List *head = list_initialize((void *)item);
72
73 List *result = list_get(head, 0);
74 assert_that(result, is_equal_to(head));
75
76 struct Person *p = (struct Person *)result->data;
77 assert_that(p->age, is_equal_to(36));
78}
79
80TestSuite *list_tests() {
81 TestSuite *suite = create_test_suite();
82
83 add_test_with_context(suite, List, when_getting_head);
84 add_test_with_context(suite, List, when_getting_mid);
85 add_test_with_context(suite, List, when_getting_tail);
86 add_test_with_context(suite, List, when_getting_from_empty_list);
87 add_test_with_context(suite, List, when_getting_negative_index);
88 add_test_with_context(suite, List, when_getting_index_out_of_range);
89 add_test_with_context(suite, List, when_adding_a_custom_datatype);
90 return suite;
91}