• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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