list_test.cc revision ee2aa45def216a3c4d6a23481fa96f1b02a5de8c
1540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati#include <gtest/gtest.h>
2540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
3ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach Johnson#include "AllocationTestHarness.h"
4ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach Johnson
5540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavatiextern "C" {
6540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati#include "list.h"
7540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati#include "osi.h"
8540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
9540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
10ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach Johnsonclass ListTest : public AllocationTestHarness {};
11540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
12ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_new_free_simple) {
13540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
14ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach Johnson  ASSERT_TRUE(list != NULL);
15540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
16540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
17540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
18ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_free_null) {
19540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  // In this test we just verify that list_free is callable with NULL.
20540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(NULL);
21540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
22540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
23ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_empty_list_is_empty) {
24540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
25540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_TRUE(list_is_empty(list));
26540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
27540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
28540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
29ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_empty_list_has_no_length) {
30540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
31540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_length(list), 0U);
32540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
33540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
34540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
35ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_simple_list_prepend) {
36540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
37540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_TRUE(list_prepend(list, &list));
38540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_FALSE(list_is_empty(list));
39540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_length(list), 1U);
40540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
41540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
42540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
43ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_simple_list_append) {
44540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
45540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_TRUE(list_append(list, &list));
46540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_FALSE(list_is_empty(list));
47540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_length(list), 1U);
48540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
49540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
50540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
51ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_remove_found) {
52540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
53540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_append(list, &list);
54540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_TRUE(list_remove(list, &list));
55540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_TRUE(list_is_empty(list));
56540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_length(list),  0U);
57540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
58540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
59540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
60ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_remove_not_found) {
61540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int x;
62540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
63540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_append(list, &list);
64540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_FALSE(list_remove(list, &x));
65540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_FALSE(list_is_empty(list));
66540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_length(list), 1U);
67540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
68540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
69540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
70ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_front) {
71540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int x[] = { 1, 2, 3, 4, 5 };
72540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
73540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
74540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
75540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    list_append(list, &x[i]);
76540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
77540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_front(list), &x[0]);
78540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
79540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
80540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
81540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
82ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_back) {
83540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int x[] = { 1, 2, 3, 4, 5 };
84540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
85540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
86540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
87540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    list_append(list, &x[i]);
88540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
89540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_back(list), &x[ARRAY_SIZE(x) - 1]);
90540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
91540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
92540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
93540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
94ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_clear) {
95540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int x[] = { 1, 2, 3, 4, 5 };
96540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
97540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
98540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
99540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    list_append(list, &x[i]);
100540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
101540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_clear(list);
102540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_TRUE(list_is_empty(list));
103540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  EXPECT_EQ(list_length(list), 0U);
104540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
105540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
106540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
107540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
108ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_append_multiple) {
109540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int x[] = { 1, 2, 3, 4, 5 };
110540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
111540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
112540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
113540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    list_append(list, &x[i]);
114540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
115540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int i = 0;
116540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (const list_node_t *node = list_begin(list); node != list_end(list); node = list_next(node), ++i)
117540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    EXPECT_EQ(list_node(node), &x[i]);
118540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
119540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
120540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
121540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
122ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_prepend_multiple) {
123540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int x[] = { 1, 2, 3, 4, 5 };
124540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_t *list = list_new(NULL);
125540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
126540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (size_t i = 0; i < ARRAY_SIZE(x); ++i)
127540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    list_prepend(list, &x[i]);
128540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
129540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  int i = ARRAY_SIZE(x) - 1;
130540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  for (const list_node_t *node = list_begin(list); node != list_end(list); node = list_next(node), --i)
131540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati    EXPECT_EQ(list_node(node), &x[i]);
132540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati
133540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati  list_free(list);
134540e7cab4a9a47dc2d38f96e332e19d16dbfc1d2Sharvil Nanavati}
135bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati
136ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_begin_empty_list) {
137bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  list_t *list = list_new(NULL);
138bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  EXPECT_EQ(list_begin(list), list_end(list));
139bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  list_free(list);
140bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati}
141bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati
142ee2aa45def216a3c4d6a23481fa96f1b02a5de8cZach JohnsonTEST_F(ListTest, test_list_next) {
143bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  list_t *list = list_new(NULL);
144bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  list_append(list, &list);
145bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  EXPECT_NE(list_begin(list), list_end(list));
146bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  EXPECT_EQ(list_next(list_begin(list)), list_end(list));
147bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati  list_free(list);
148bfaea44aa24ad3d8b7aac98204ce8ee5c12857b5Sharvil Nanavati}
149