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