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