list_test.cc revision ee2aa45def216a3c4d6a23481fa96f1b02a5de8c
1#include <gtest/gtest.h>
2
3#include "AllocationTestHarness.h"
4
5extern "C" {
6#include "list.h"
7#include "osi.h"
8}
9
10class ListTest : public AllocationTestHarness {};
11
12TEST_F(ListTest, test_new_free_simple) {
13  list_t *list = list_new(NULL);
14  ASSERT_TRUE(list != NULL);
15  list_free(list);
16}
17
18TEST_F(ListTest, test_free_null) {
19  // In this test we just verify that list_free is callable with NULL.
20  list_free(NULL);
21}
22
23TEST_F(ListTest, test_empty_list_is_empty) {
24  list_t *list = list_new(NULL);
25  EXPECT_TRUE(list_is_empty(list));
26  list_free(list);
27}
28
29TEST_F(ListTest, test_empty_list_has_no_length) {
30  list_t *list = list_new(NULL);
31  EXPECT_EQ(list_length(list), 0U);
32  list_free(list);
33}
34
35TEST_F(ListTest, test_simple_list_prepend) {
36  list_t *list = list_new(NULL);
37  EXPECT_TRUE(list_prepend(list, &list));
38  EXPECT_FALSE(list_is_empty(list));
39  EXPECT_EQ(list_length(list), 1U);
40  list_free(list);
41}
42
43TEST_F(ListTest, test_simple_list_append) {
44  list_t *list = list_new(NULL);
45  EXPECT_TRUE(list_append(list, &list));
46  EXPECT_FALSE(list_is_empty(list));
47  EXPECT_EQ(list_length(list), 1U);
48  list_free(list);
49}
50
51TEST_F(ListTest, test_list_remove_found) {
52  list_t *list = list_new(NULL);
53  list_append(list, &list);
54  EXPECT_TRUE(list_remove(list, &list));
55  EXPECT_TRUE(list_is_empty(list));
56  EXPECT_EQ(list_length(list),  0U);
57  list_free(list);
58}
59
60TEST_F(ListTest, test_list_remove_not_found) {
61  int x;
62  list_t *list = list_new(NULL);
63  list_append(list, &list);
64  EXPECT_FALSE(list_remove(list, &x));
65  EXPECT_FALSE(list_is_empty(list));
66  EXPECT_EQ(list_length(list), 1U);
67  list_free(list);
68}
69
70TEST_F(ListTest, test_list_front) {
71  int x[] = { 1, 2, 3, 4, 5 };
72  list_t *list = list_new(NULL);
73
74  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
75    list_append(list, &x[i]);
76
77  EXPECT_EQ(list_front(list), &x[0]);
78
79  list_free(list);
80}
81
82TEST_F(ListTest, test_list_back) {
83  int x[] = { 1, 2, 3, 4, 5 };
84  list_t *list = list_new(NULL);
85
86  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
87    list_append(list, &x[i]);
88
89  EXPECT_EQ(list_back(list), &x[ARRAY_SIZE(x) - 1]);
90
91  list_free(list);
92}
93
94TEST_F(ListTest, test_list_clear) {
95  int x[] = { 1, 2, 3, 4, 5 };
96  list_t *list = list_new(NULL);
97
98  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
99    list_append(list, &x[i]);
100
101  list_clear(list);
102  EXPECT_TRUE(list_is_empty(list));
103  EXPECT_EQ(list_length(list), 0U);
104
105  list_free(list);
106}
107
108TEST_F(ListTest, test_list_append_multiple) {
109  int x[] = { 1, 2, 3, 4, 5 };
110  list_t *list = list_new(NULL);
111
112  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
113    list_append(list, &x[i]);
114
115  int i = 0;
116  for (const list_node_t *node = list_begin(list); node != list_end(list); node = list_next(node), ++i)
117    EXPECT_EQ(list_node(node), &x[i]);
118
119  list_free(list);
120}
121
122TEST_F(ListTest, test_list_prepend_multiple) {
123  int x[] = { 1, 2, 3, 4, 5 };
124  list_t *list = list_new(NULL);
125
126  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
127    list_prepend(list, &x[i]);
128
129  int i = ARRAY_SIZE(x) - 1;
130  for (const list_node_t *node = list_begin(list); node != list_end(list); node = list_next(node), --i)
131    EXPECT_EQ(list_node(node), &x[i]);
132
133  list_free(list);
134}
135
136TEST_F(ListTest, test_list_begin_empty_list) {
137  list_t *list = list_new(NULL);
138  EXPECT_EQ(list_begin(list), list_end(list));
139  list_free(list);
140}
141
142TEST_F(ListTest, test_list_next) {
143  list_t *list = list_new(NULL);
144  list_append(list, &list);
145  EXPECT_NE(list_begin(list), list_end(list));
146  EXPECT_EQ(list_next(list_begin(list)), list_end(list));
147  list_free(list);
148}
149