1 #include "osi/include/array.h"
2
3 #include <android-base/silent_death_test.h>
4 #include <gtest/gtest.h>
5
6 #include "AllocationTestHarness.h"
7
8 class ArrayTest : public AllocationTestHarness {};
9
10 using ArrayDeathTest = ArrayTest;
11
TEST_F(ArrayTest,test_new_free_simple)12 TEST_F(ArrayTest, test_new_free_simple) {
13 array_t* array = array_new(4);
14 ASSERT_TRUE(array != NULL);
15 array_free(array);
16 }
17
TEST_F(ArrayTest,test_free_null)18 TEST_F(ArrayTest, test_free_null) { array_free(NULL); }
19
TEST_F(ArrayDeathTest,test_invalid_ptr)20 TEST_F(ArrayDeathTest, test_invalid_ptr) {
21 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
22 array_t* array = array_new(4);
23 {
24 // this will silent SIGABRT sent in EXPECT_DEATH below
25 ScopedSilentDeath _silentDeath;
26
27 ASSERT_DEATH(array_ptr(array), "");
28 }
29 array_free(array);
30 }
31
TEST_F(ArrayDeathTest,test_invalid_at)32 TEST_F(ArrayDeathTest, test_invalid_at) {
33 ::testing::FLAGS_gtest_death_test_style = "threadsafe";
34 array_t* array = array_new(4);
35 {
36 // this will silent SIGABRT sent in EXPECT_DEATH below
37 ScopedSilentDeath _silentDeath;
38
39 ASSERT_DEATH(array_at(array, 1), "");
40 }
41 array_free(array);
42 }
43
TEST_F(ArrayTest,test_append_value)44 TEST_F(ArrayTest, test_append_value) {
45 array_t* array = array_new(sizeof(int));
46 for (int i = 0; i < 100; ++i) {
47 array_append_value(array, i * i);
48 }
49 for (int i = 0; i < 100; ++i) {
50 EXPECT_EQ(*(int*)array_at(array, i), i * i);
51 }
52 array_free(array);
53 }
54
TEST_F(ArrayTest,test_append_ptr)55 TEST_F(ArrayTest, test_append_ptr) {
56 int items[100];
57 array_t* array = array_new(sizeof(int));
58 for (int i = 0; i < 100; ++i) {
59 items[i] = i * i;
60 array_append_ptr(array, &items[i]);
61 }
62 for (int i = 0; i < 100; ++i) {
63 EXPECT_EQ(*(int*)array_at(array, i), i * i);
64 }
65 array_free(array);
66 }
67
TEST_F(ArrayTest,test_large_element)68 TEST_F(ArrayTest, test_large_element) {
69 char strings[][128] = {
70 "string 1", "string 2", "string 3", "string 4",
71 "string 5", "string 6", "string 7", "string 8",
72 };
73
74 array_t* array = array_new(128);
75 for (int i = 0; i < 100; ++i) {
76 array_append_ptr(array, strings[i % 8]);
77 }
78 for (int i = 0; i < 100; ++i) {
79 EXPECT_TRUE(!memcmp(array_at(array, i), strings[i % 8], 128));
80 }
81 array_free(array);
82 }
83