• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <gtest/gtest.h>
17 
18 #include <base/containers/array_view.h>
19 #include <base/containers/string.h>
20 
21 using namespace BASE_NS;
22 using namespace testing::ext;
23 
24 class ArrayViewTest : public testing::Test {
25 public:
SetUpTestSuite()26     static void SetUpTestSuite() {}
TearDownTestSuite()27     static void TearDownTestSuite() {}
SetUp()28     void SetUp() override {}
TearDown()29     void TearDown() override {}
30 };
31 
32 HWTEST_F(ArrayViewTest, empty, TestSize.Level1)
33 {
34     BASE_NS::array_view<int> intAv({});
35     ASSERT_TRUE(intAv.size() == 0);
36     ASSERT_TRUE(intAv.size_bytes() == 0);
37     ASSERT_TRUE(intAv.empty());
38 
39     BASE_NS::array_view<bool> boolAv({});
40     ASSERT_TRUE(boolAv.size() == 0);
41     ASSERT_TRUE(boolAv.size_bytes() == 0);
42     ASSERT_TRUE(boolAv.empty());
43 
44     BASE_NS::array_view<uint32_t> uintAv({});
45     ASSERT_TRUE(uintAv.size() == 0);
46     ASSERT_TRUE(uintAv.size_bytes() == 0);
47     ASSERT_TRUE(uintAv.empty());
48 
49     BASE_NS::array_view<char> charAv({});
50     ASSERT_TRUE(charAv.size() == 0);
51     ASSERT_TRUE(charAv.size_bytes() == 0);
52     ASSERT_TRUE(charAv.empty());
53 
54     BASE_NS::array_view<int*> pAv({});
55     ASSERT_TRUE(pAv.size() == 0);
56     ASSERT_TRUE(pAv.size_bytes() == 0);
57     ASSERT_TRUE(pAv.empty());
58 
59     BASE_NS::array_view<array_view<int>> avAv({});
60     ASSERT_TRUE(avAv.size() == 0);
61     ASSERT_TRUE(avAv.size_bytes() == 0);
62     ASSERT_TRUE(avAv.empty());
63 }
64 
65 HWTEST_F(ArrayViewTest, dataAccess, TestSize.Level1)
66 {
67     int intData[] = { 3, 2, 1, 0 };
68     BASE_NS::array_view<int> intAv(intData);
69     ASSERT_TRUE(intAv.size() == 4);
70     ASSERT_TRUE(intAv.size_bytes() == 4 * sizeof(int));
71     ASSERT_FALSE(intAv.empty());
72 
73     ASSERT_TRUE(intAv.data() == intData);
74     ASSERT_TRUE(*intAv.begin() == intData[0]);
75     ASSERT_TRUE(*intAv.cbegin() == intData[0]);
76     ASSERT_TRUE(intAv[1] == intData[1]);
77     ASSERT_TRUE(intAv.at(2) == intData[2]);
78     ASSERT_TRUE(*(intAv.end() - 1) == intData[3]);
79     ASSERT_TRUE(*(intAv.cend() - 1) == intData[3]);
80 
81     const BASE_NS::array_view<int> cintAv(intData);
82 
83     ASSERT_TRUE(cintAv.size() == 4);
84     ASSERT_TRUE(cintAv.size_bytes() == 4 * sizeof(int));
85     ASSERT_FALSE(cintAv.empty());
86 
87     ASSERT_TRUE(cintAv.data() == intData);
88     ASSERT_TRUE(*cintAv.begin() == intData[0]);
89     ASSERT_TRUE(*cintAv.cbegin() == intData[0]);
90     ASSERT_TRUE(cintAv[1] == intData[1]);
91     ASSERT_TRUE(cintAv.at(2) == intData[2]);
92     ASSERT_TRUE(*(cintAv.end() - 1) == intData[3]);
93     ASSERT_TRUE(*(cintAv.cend() - 1) == intData[3]);
94 
95     bool boolData[] = { true, false };
96     BASE_NS::array_view<bool> boolAv(boolData);
97     ASSERT_TRUE(boolAv.size() == 2);
98     ASSERT_TRUE(boolAv.size_bytes() == 2 * sizeof(bool));
99     ASSERT_FALSE(boolAv.empty());
100 
101     ASSERT_TRUE(boolAv[0] == boolData[0]);
102     ASSERT_TRUE(boolAv[1] == boolData[1]);
103 }
104 
105 HWTEST_F(ArrayViewTest, constructors001, TestSize.Level1)
106 {
107     int intData[] = { 3, 2, 1, 0 };
108     {
109         BASE_NS::array_view<int> intAv = BASE_NS::array_view<int>();
110         ASSERT_TRUE(intAv.size() == 0);
111         ASSERT_TRUE(intAv.empty());
112     }
113     {
114         BASE_NS::array_view<int> intAv = BASE_NS::array_view<int>(intData);
115         ASSERT_TRUE(intAv.size() == 4);
116         ASSERT_TRUE(intAv[0] == intData[0]);
117         ASSERT_TRUE(intAv[1] == intData[1]);
118         ASSERT_TRUE(intAv[2] == intData[2]);
119         ASSERT_TRUE(intAv[3] == intData[3]);
120     }
121     {
122         BASE_NS::array_view<int> intAv = BASE_NS::array_view<int>(&intData[0], &intData[3]);
123         ASSERT_TRUE(intAv.size() == 3);
124         ASSERT_TRUE(intAv[0] == intData[0]);
125         ASSERT_TRUE(intAv[1] == intData[1]);
126         ASSERT_TRUE(intAv[2] == intData[2]);
127     }
128     {
129         BASE_NS::array_view<int> intAv = BASE_NS::array_view<int>(&intData[0], 4);
130         ASSERT_TRUE(intAv.size() == 4);
131         ASSERT_TRUE(intAv[0] == intData[0]);
132         ASSERT_TRUE(intAv[1] == intData[1]);
133         ASSERT_TRUE(intAv[2] == intData[2]);
134         ASSERT_TRUE(intAv[3] == intData[3]);
135     }
136 }
137 
138 HWTEST_F(ArrayViewTest, constructors002, TestSize.Level1)
139 {
140     int intData[] = { 3, 2, 1, 0 };
141     {
142         BASE_NS::array_view<int> intAv = BASE_NS::array_view<int>(intData);
143         BASE_NS::array_view<int> intAv2 = BASE_NS::array_view<int>(intAv);
144         ASSERT_TRUE(intAv2.size() == 4);
145         ASSERT_TRUE(intAv2[0] == intData[0]);
146         ASSERT_TRUE(intAv2[1] == intData[1]);
147         ASSERT_TRUE(intAv2[2] == intData[2]);
148         ASSERT_TRUE(intAv2[3] == intData[3]);
149     }
150     {
151         const BASE_NS::array_view<int> intAv = BASE_NS::array_view<int>(intData);
152         BASE_NS::array_view<const int> intAv2 = BASE_NS::array_view<const int>(intAv);
153         ASSERT_TRUE(intAv2.size() == 4);
154         ASSERT_TRUE(intAv2[0] == intData[0]);
155         ASSERT_TRUE(intAv2[1] == intData[1]);
156         ASSERT_TRUE(intAv2[2] == intData[2]);
157         ASSERT_TRUE(intAv2[3] == intData[3]);
158     }
159     {
160         BASE_NS::array_view<int> intAv = BASE_NS::arrayview<int, 4>(intData);
161         ASSERT_TRUE(intAv.size() == 4);
162         ASSERT_TRUE(intAv[0] == intData[0]);
163         ASSERT_TRUE(intAv[1] == intData[1]);
164         ASSERT_TRUE(intAv[2] == intData[2]);
165         ASSERT_TRUE(intAv[3] == intData[3]);
166     }
167 }
168 
169 HWTEST_F(ArrayViewTest, constructors003, TestSize.Level1)
170 {
171     {
172         uint8_t* uint8Data = new uint8_t[4]();
173         uint8Data[0] = 3;
174         uint8Data[1] = 2;
175         uint8Data[2] = 1;
176         uint8Data[3] = 0;
177         BASE_NS::array_view<const uint8_t> uintAv = BASE_NS::arrayviewU8<uint8_t>(*uint8Data);
178         ASSERT_TRUE(uintAv.size() == 1); // pointer size is 1 -> data is the same but size is always 1
179         ASSERT_TRUE(uintAv[0] == uint8Data[0]);
180         delete[] uint8Data;
181     }
182     {
183         uint8_t uint8Data[4] = { 3, 2, 1, 0 };
184         BASE_NS::array_view<const uint8_t> uintAv = BASE_NS::arrayviewU8<uint8_t>(*uint8Data);
185         ASSERT_TRUE(uintAv.size() == 1); // pointer size is 1 -> data is the same but size is always 1
186         ASSERT_TRUE(uintAv[0] == uint8Data[0]);
187     }
188     {
189         uint8_t uint8Data[4] = { 3, 2, 1, 0 };
190         BASE_NS::array_view<const uint8_t> uintAv = BASE_NS::arrayviewU8(uint8Data);
191         ASSERT_TRUE(uintAv.size() == 4); // array as input
192         ASSERT_TRUE(uintAv[0] == uint8Data[0]);
193         ASSERT_TRUE(uintAv[1] == uint8Data[1]);
194         ASSERT_TRUE(uintAv[2] == uint8Data[2]);
195         ASSERT_TRUE(uintAv[3] == uint8Data[3]);
196     }
197     {
__anon517a075b0102(BASE_NS::array_view<const int> intAv) 198         auto fun = [](BASE_NS::array_view<const int> intAv) {
199             ASSERT_TRUE(intAv.size() == 4);
200             ASSERT_TRUE(intAv[0] == 3);
201             ASSERT_TRUE(intAv[1] == 2);
202             ASSERT_TRUE(intAv[2] == 1);
203             ASSERT_TRUE(intAv[3] == 0);
204         };
205         fun((BASE_NS::array_view<const int>){ 3, 2, 1, 0 });
206     }
207     {
__anon517a075b0202(BASE_NS::array_view<const BASE_NS::string> stringAv) 208         auto fun = [](BASE_NS::array_view<const BASE_NS::string> stringAv) {
209             ASSERT_TRUE(stringAv.size() == 2);
210             ASSERT_TRUE(stringAv[0] == "foo");
211             ASSERT_TRUE(stringAv[1] == "A really, really, really long string.");
212         };
213         fun((BASE_NS::array_view<const BASE_NS::string>) {
214             BASE_NS::string("foo"), BASE_NS::string("A really, really, really long string.")});
215     }
216 }
217 
218 HWTEST_F(ArrayViewTest, hash, TestSize.Level1)
219 {
220     static constexpr const int data[] = { 1, 2, 3, 4 };
221     auto h1 = FNV1aHash(data);
222     auto h2 = hash(array_view(data));
223     EXPECT_EQ(h1, h2);
224 }