OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 26 matching lines...) Expand all Loading... | |
37 Call<const char>(carr); | 37 Call<const char>(carr); |
38 Call<char>(arr); | 38 Call<char>(arr); |
39 // Call<char>(carr); // Compile error, because can't drop const. | 39 // Call<char>(carr); // Compile error, because can't drop const. |
40 // Call<int>(arr); // Compile error, because incompatible types. | 40 // Call<int>(arr); // Compile error, because incompatible types. |
41 ArrayView<int*> x; | 41 ArrayView<int*> x; |
42 EXPECT_EQ(0u, x.size()); | 42 EXPECT_EQ(0u, x.size()); |
43 EXPECT_EQ(nullptr, x.data()); | 43 EXPECT_EQ(nullptr, x.data()); |
44 ArrayView<char> y = arr; | 44 ArrayView<char> y = arr; |
45 EXPECT_EQ(6u, y.size()); | 45 EXPECT_EQ(6u, y.size()); |
46 EXPECT_EQ(arr, y.data()); | 46 EXPECT_EQ(arr, y.data()); |
47 ArrayView<char, 6> yf = arr; | |
48 static_assert(yf.size() == 6, ""); | |
49 EXPECT_EQ(arr, yf.data()); | |
47 ArrayView<const char> z(arr + 1, 3); | 50 ArrayView<const char> z(arr + 1, 3); |
48 EXPECT_EQ(3u, z.size()); | 51 EXPECT_EQ(3u, z.size()); |
49 EXPECT_EQ(arr + 1, z.data()); | 52 EXPECT_EQ(arr + 1, z.data()); |
53 ArrayView<const char, 3> zf(arr + 1, 3); | |
54 static_assert(zf.size() == 3, ""); | |
55 EXPECT_EQ(arr + 1, zf.data()); | |
50 ArrayView<const char> w(arr, 2); | 56 ArrayView<const char> w(arr, 2); |
51 EXPECT_EQ(2u, w.size()); | 57 EXPECT_EQ(2u, w.size()); |
52 EXPECT_EQ(arr, w.data()); | 58 EXPECT_EQ(arr, w.data()); |
59 ArrayView<const char, 2> wf(arr, 2); | |
60 static_assert(wf.size() == 2, ""); | |
61 EXPECT_EQ(arr, wf.data()); | |
53 ArrayView<char> q(arr, 0); | 62 ArrayView<char> q(arr, 0); |
54 EXPECT_EQ(0u, q.size()); | 63 EXPECT_EQ(0u, q.size()); |
55 EXPECT_EQ(nullptr, q.data()); | 64 EXPECT_EQ(nullptr, q.data()); |
65 ArrayView<char, 0> qf(arr, 0); | |
66 static_assert(qf.size() == 0, ""); | |
67 EXPECT_EQ(nullptr, qf.data()); | |
56 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | 68 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
57 // DCHECK error (nullptr with nonzero size). | 69 // DCHECK error (nullptr with nonzero size). |
58 EXPECT_DEATH(ArrayView<int>(static_cast<int*>(nullptr), 5), ""); | 70 EXPECT_DEATH(ArrayView<int>(static_cast<int*>(nullptr), 5), ""); |
59 #endif | 71 #endif |
60 // These are compile errors, because incompatible types. | 72 // These are compile errors, because incompatible types. |
61 // ArrayView<int> m = arr; | 73 // ArrayView<int> m = arr; |
62 // ArrayView<float> n(arr + 2, 2); | 74 // ArrayView<float> n(arr + 2, 2); |
63 } | 75 } |
64 | 76 |
65 TEST(ArrayViewTest, TestCopyConstructor) { | 77 TEST(ArrayViewTest, TestCopyConstructorVariable) { |
66 char arr[] = "Arrr!"; | 78 char arr[] = "Arrr!"; |
67 ArrayView<char> x = arr; | 79 ArrayView<char> x = arr; |
68 EXPECT_EQ(6u, x.size()); | 80 EXPECT_EQ(6u, x.size()); |
69 EXPECT_EQ(arr, x.data()); | 81 EXPECT_EQ(arr, x.data()); |
70 ArrayView<char> y = x; // Copy non-const -> non-const. | 82 ArrayView<char> y = x; // Copy non-const -> non-const. |
71 EXPECT_EQ(6u, y.size()); | 83 EXPECT_EQ(6u, y.size()); |
72 EXPECT_EQ(arr, y.data()); | 84 EXPECT_EQ(arr, y.data()); |
73 ArrayView<const char> z = x; // Copy non-const -> const. | 85 ArrayView<const char> z = x; // Copy non-const -> const. |
74 EXPECT_EQ(6u, z.size()); | 86 EXPECT_EQ(6u, z.size()); |
75 EXPECT_EQ(arr, z.data()); | 87 EXPECT_EQ(arr, z.data()); |
76 ArrayView<const char> w = z; // Copy const -> const. | 88 ArrayView<const char> w = z; // Copy const -> const. |
77 EXPECT_EQ(6u, w.size()); | 89 EXPECT_EQ(6u, w.size()); |
78 EXPECT_EQ(arr, w.data()); | 90 EXPECT_EQ(arr, w.data()); |
79 // ArrayView<char> v = z; // Compile error, because can't drop const. | 91 // ArrayView<char> v = z; // Compile error, because can't drop const. |
80 } | 92 } |
81 | 93 |
82 TEST(ArrayViewTest, TestCopyAssignment) { | 94 TEST(ArrayViewTest, TestCopyConstructorFixed) { |
95 char arr[] = "Arrr!"; | |
96 ArrayView<char, 6> x = arr; | |
97 static_assert(x.size() == 6, ""); | |
98 EXPECT_EQ(arr, x.data()); | |
99 | |
100 // Copy fixed -> fixed. | |
101 ArrayView<char, 6> y = x; // Copy non-const -> non-const. | |
102 static_assert(y.size() == 6, ""); | |
103 EXPECT_EQ(arr, y.data()); | |
104 ArrayView<const char, 6> z = x; // Copy non-const -> const. | |
105 static_assert(z.size() == 6, ""); | |
106 EXPECT_EQ(arr, z.data()); | |
107 ArrayView<const char, 6> w = z; // Copy const -> const. | |
108 static_assert(w.size() == 6, ""); | |
109 EXPECT_EQ(arr, w.data()); | |
110 // ArrayView<char, 6> v = z; // Compile error, because can't drop const. | |
111 | |
112 // Copy fixed -> variable. | |
113 ArrayView<char> yv = x; // Copy non-const -> non-const. | |
114 EXPECT_EQ(6u, yv.size()); | |
115 EXPECT_EQ(arr, yv.data()); | |
116 ArrayView<const char> zv = x; // Copy non-const -> const. | |
117 EXPECT_EQ(6u, zv.size()); | |
118 EXPECT_EQ(arr, zv.data()); | |
119 ArrayView<const char> wv = z; // Copy const -> const. | |
120 EXPECT_EQ(6u, wv.size()); | |
121 EXPECT_EQ(arr, wv.data()); | |
122 // ArrayView<char> vv = z; // Compile error, because can't drop const. | |
123 } | |
124 | |
125 TEST(ArrayViewTest, TestCopyAssignmentVariable) { | |
83 char arr[] = "Arrr!"; | 126 char arr[] = "Arrr!"; |
84 ArrayView<char> x(arr); | 127 ArrayView<char> x(arr); |
85 EXPECT_EQ(6u, x.size()); | 128 EXPECT_EQ(6u, x.size()); |
86 EXPECT_EQ(arr, x.data()); | 129 EXPECT_EQ(arr, x.data()); |
87 ArrayView<char> y; | 130 ArrayView<char> y; |
88 y = x; // Copy non-const -> non-const. | 131 y = x; // Copy non-const -> non-const. |
89 EXPECT_EQ(6u, y.size()); | 132 EXPECT_EQ(6u, y.size()); |
90 EXPECT_EQ(arr, y.data()); | 133 EXPECT_EQ(arr, y.data()); |
91 ArrayView<const char> z; | 134 ArrayView<const char> z; |
92 z = x; // Copy non-const -> const. | 135 z = x; // Copy non-const -> const. |
93 EXPECT_EQ(6u, z.size()); | 136 EXPECT_EQ(6u, z.size()); |
94 EXPECT_EQ(arr, z.data()); | 137 EXPECT_EQ(arr, z.data()); |
95 ArrayView<const char> w; | 138 ArrayView<const char> w; |
96 w = z; // Copy const -> const. | 139 w = z; // Copy const -> const. |
97 EXPECT_EQ(6u, w.size()); | 140 EXPECT_EQ(6u, w.size()); |
98 EXPECT_EQ(arr, w.data()); | 141 EXPECT_EQ(arr, w.data()); |
99 // ArrayView<char> v; | 142 // ArrayView<char> v; |
100 // v = z; // Compile error, because can't drop const. | 143 // v = z; // Compile error, because can't drop const. |
101 } | 144 } |
102 | 145 |
146 TEST(ArrayViewTest, TestCopyAssignmentFixed) { | |
147 char arr[] = "Arrr!"; | |
148 char init[] = "Init!"; | |
149 ArrayView<char, 6> x(arr); | |
150 EXPECT_EQ(arr, x.data()); | |
151 | |
152 // Copy fixed -> fixed. | |
153 ArrayView<char, 6> y(init); | |
154 y = x; // Copy non-const -> non-const. | |
155 EXPECT_EQ(arr, y.data()); | |
156 ArrayView<const char, 6> z(init); | |
157 z = x; // Copy non-const -> const. | |
158 EXPECT_EQ(arr, z.data()); | |
159 ArrayView<const char, 6> w(init); | |
160 w = z; // Copy const -> const. | |
161 EXPECT_EQ(arr, w.data()); | |
162 // ArrayView<char, 6> v(init); | |
163 // v = z; // Compile error, because can't drop const. | |
164 | |
165 // Copy fixed -> variable. | |
166 ArrayView<char> yv; | |
167 yv = x; // Copy non-const -> non-const. | |
168 EXPECT_EQ(6u, yv.size()); | |
169 EXPECT_EQ(arr, yv.data()); | |
170 ArrayView<const char> zv; | |
171 zv = x; // Copy non-const -> const. | |
172 EXPECT_EQ(6u, zv.size()); | |
173 EXPECT_EQ(arr, zv.data()); | |
174 ArrayView<const char> wv; | |
175 wv = z; // Copy const -> const. | |
176 EXPECT_EQ(6u, wv.size()); | |
177 EXPECT_EQ(arr, wv.data()); | |
178 // ArrayView<char> v; | |
179 // v = z; // Compile error, because can't drop const. | |
180 } | |
181 | |
103 TEST(ArrayViewTest, TestStdVector) { | 182 TEST(ArrayViewTest, TestStdVector) { |
104 std::vector<int> v; | 183 std::vector<int> v; |
105 v.push_back(3); | 184 v.push_back(3); |
106 v.push_back(11); | 185 v.push_back(11); |
107 Call<const int>(v); | 186 Call<const int>(v); |
108 Call<int>(v); | 187 Call<int>(v); |
109 // Call<unsigned int>(v); // Compile error, because incompatible types. | 188 // Call<unsigned int>(v); // Compile error, because incompatible types. |
110 ArrayView<int> x = v; | 189 ArrayView<int> x = v; |
111 EXPECT_EQ(2u, x.size()); | 190 EXPECT_EQ(2u, x.size()); |
112 EXPECT_EQ(v.data(), x.data()); | 191 EXPECT_EQ(v.data(), x.data()); |
(...skipping 26 matching lines...) Expand all Loading... | |
139 // ArrayView<char> d = b; // Compile error, because incompatible types. | 218 // ArrayView<char> d = b; // Compile error, because incompatible types. |
140 const rtc::Buffer cb = "very const"; | 219 const rtc::Buffer cb = "very const"; |
141 Call<const uint8_t>(cb); | 220 Call<const uint8_t>(cb); |
142 // Call<uint8_t>(cb); // Compile error, because can't drop const. | 221 // Call<uint8_t>(cb); // Compile error, because can't drop const. |
143 ArrayView<const uint8_t> z = cb; | 222 ArrayView<const uint8_t> z = cb; |
144 EXPECT_EQ(11u, z.size()); | 223 EXPECT_EQ(11u, z.size()); |
145 EXPECT_EQ(cb.data(), z.data()); | 224 EXPECT_EQ(cb.data(), z.data()); |
146 // ArrayView<uint8_t> w = cb; // Compile error, because can't drop const. | 225 // ArrayView<uint8_t> w = cb; // Compile error, because can't drop const. |
147 } | 226 } |
148 | 227 |
149 TEST(ArrayViewTest, TestSwap) { | 228 TEST(ArrayViewTest, TestSwapVariable) { |
150 const char arr[] = "Arrr!"; | 229 const char arr[] = "Arrr!"; |
151 const char aye[] = "Aye, Cap'n!"; | 230 const char aye[] = "Aye, Cap'n!"; |
152 ArrayView<const char> x(arr); | 231 ArrayView<const char> x(arr); |
153 EXPECT_EQ(6u, x.size()); | 232 EXPECT_EQ(6u, x.size()); |
154 EXPECT_EQ(arr, x.data()); | 233 EXPECT_EQ(arr, x.data()); |
155 ArrayView<const char> y(aye); | 234 ArrayView<const char> y(aye); |
156 EXPECT_EQ(12u, y.size()); | 235 EXPECT_EQ(12u, y.size()); |
157 EXPECT_EQ(aye, y.data()); | 236 EXPECT_EQ(aye, y.data()); |
158 using std::swap; | 237 using std::swap; |
159 swap(x, y); | 238 swap(x, y); |
160 EXPECT_EQ(12u, x.size()); | 239 EXPECT_EQ(12u, x.size()); |
161 EXPECT_EQ(aye, x.data()); | 240 EXPECT_EQ(aye, x.data()); |
162 EXPECT_EQ(6u, y.size()); | 241 EXPECT_EQ(6u, y.size()); |
163 EXPECT_EQ(arr, y.data()); | 242 EXPECT_EQ(arr, y.data()); |
164 // ArrayView<char> z; | 243 // ArrayView<char> z; |
165 // swap(x, z); // Compile error, because can't drop const. | 244 // swap(x, z); // Compile error, because can't drop const. |
166 } | 245 } |
167 | 246 |
247 TEST(FixArrayViewTest, TestSwapFixed) { | |
248 const char arr[] = "Arr!"; | |
249 char aye[] = "Aye!"; | |
250 ArrayView<const char, 5> x(arr); | |
251 EXPECT_EQ(arr, x.data()); | |
252 ArrayView<const char, 5> y(aye); | |
253 EXPECT_EQ(aye, y.data()); | |
254 using std::swap; | |
255 swap(x, y); | |
256 EXPECT_EQ(aye, x.data()); | |
257 EXPECT_EQ(arr, y.data()); | |
258 // ArrayView<char, 5> z(aye); | |
259 // swap(x, z); // Compile error, because can't drop const. | |
260 // ArrayView<const char, 4> w(aye, 4); | |
261 // swap(x, w); // Compile error, because different sizes. | |
262 } | |
263 | |
168 TEST(ArrayViewTest, TestIndexing) { | 264 TEST(ArrayViewTest, TestIndexing) { |
169 char arr[] = "abcdefg"; | 265 char arr[] = "abcdefg"; |
170 ArrayView<char> x(arr); | 266 ArrayView<char> x(arr); |
171 const ArrayView<char> y(arr); | 267 const ArrayView<char> y(arr); |
172 ArrayView<const char> z(arr); | 268 ArrayView<const char, 8> z(arr); |
173 EXPECT_EQ(8u, x.size()); | 269 EXPECT_EQ(8u, x.size()); |
174 EXPECT_EQ(8u, y.size()); | 270 EXPECT_EQ(8u, y.size()); |
175 EXPECT_EQ(8u, z.size()); | 271 EXPECT_EQ(8u, z.size()); |
176 EXPECT_EQ('b', x[1]); | 272 EXPECT_EQ('b', x[1]); |
177 EXPECT_EQ('c', y[2]); | 273 EXPECT_EQ('c', y[2]); |
178 EXPECT_EQ('d', z[3]); | 274 EXPECT_EQ('d', z[3]); |
179 x[3] = 'X'; | 275 x[3] = 'X'; |
180 y[2] = 'Y'; | 276 y[2] = 'Y'; |
181 // z[1] = 'Z'; // Compile error, because z's element type is const char. | 277 // z[1] = 'Z'; // Compile error, because z's element type is const char. |
182 EXPECT_EQ('b', x[1]); | 278 EXPECT_EQ('b', x[1]); |
183 EXPECT_EQ('Y', y[2]); | 279 EXPECT_EQ('Y', y[2]); |
184 EXPECT_EQ('X', z[3]); | 280 EXPECT_EQ('X', z[3]); |
185 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) | 281 #if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID) |
186 EXPECT_DEATH(z[8], ""); // DCHECK error (index out of bounds). | 282 EXPECT_DEATH(z[8], ""); // DCHECK error (index out of bounds). |
187 #endif | 283 #endif |
188 } | 284 } |
189 | 285 |
190 TEST(ArrayViewTest, TestIterationEmpty) { | 286 TEST(ArrayViewTest, TestIterationEmpty) { |
287 // Variable-size. | |
191 ArrayView<std::vector<std::vector<std::vector<std::string>>>> av; | 288 ArrayView<std::vector<std::vector<std::vector<std::string>>>> av; |
192 EXPECT_FALSE(av.begin()); | 289 EXPECT_FALSE(av.begin()); |
ossu
2017/03/01 23:16:00
Wouldn't the "correct" test be to check that av.be
kwiberg-webrtc
2017/03/02 03:00:39
You're right. .data() is required to be null for a
| |
193 EXPECT_FALSE(av.cbegin()); | 290 EXPECT_FALSE(av.cbegin()); |
194 EXPECT_FALSE(av.end()); | 291 EXPECT_FALSE(av.end()); |
195 EXPECT_FALSE(av.cend()); | 292 EXPECT_FALSE(av.cend()); |
196 for (auto& e : av) { | 293 for (auto& e : av) { |
197 EXPECT_TRUE(false); | 294 EXPECT_TRUE(false); |
198 EXPECT_EQ(42u, e.size()); // Dummy use of e to prevent unused var warning. | 295 EXPECT_EQ(42u, e.size()); // Dummy use of e to prevent unused var warning. |
199 } | 296 } |
297 | |
298 // Fixed-size. | |
299 ArrayView<std::vector<std::vector<std::vector<std::string>>>, 0> af; | |
300 EXPECT_FALSE(af.begin()); | |
301 EXPECT_FALSE(af.cbegin()); | |
302 EXPECT_FALSE(af.end()); | |
303 EXPECT_FALSE(af.cend()); | |
304 for (auto& e : af) { | |
305 EXPECT_TRUE(false); | |
306 EXPECT_EQ(42u, e.size()); // Dummy use of e to prevent unused var warning. | |
307 } | |
200 } | 308 } |
201 | 309 |
202 TEST(ArrayViewTest, TestIteration) { | 310 TEST(ArrayViewTest, TestIterationVariable) { |
203 char arr[] = "Arrr!"; | 311 char arr[] = "Arrr!"; |
204 ArrayView<char> av(arr); | 312 ArrayView<char> av(arr); |
205 EXPECT_EQ('A', *av.begin()); | 313 EXPECT_EQ('A', *av.begin()); |
206 EXPECT_EQ('A', *av.cbegin()); | 314 EXPECT_EQ('A', *av.cbegin()); |
207 EXPECT_EQ('\0', *(av.end() - 1)); | 315 EXPECT_EQ('\0', *(av.end() - 1)); |
208 EXPECT_EQ('\0', *(av.cend() - 1)); | 316 EXPECT_EQ('\0', *(av.cend() - 1)); |
209 char i = 0; | 317 char i = 0; |
210 for (auto& e : av) { | 318 for (auto& e : av) { |
211 EXPECT_EQ(arr + i, &e); | 319 EXPECT_EQ(arr + i, &e); |
212 e = 's' + i; | 320 e = 's' + i; |
213 ++i; | 321 ++i; |
214 } | 322 } |
215 i = 0; | 323 i = 0; |
216 for (auto& e : ArrayView<const char>(av)) { | 324 for (auto& e : ArrayView<const char>(av)) { |
217 EXPECT_EQ(arr + i, &e); | 325 EXPECT_EQ(arr + i, &e); |
218 // e = 'q' + i; // Compile error, because e is a const char&. | 326 // e = 'q' + i; // Compile error, because e is a const char&. |
219 ++i; | 327 ++i; |
220 } | 328 } |
221 } | 329 } |
222 | 330 |
331 TEST(ArrayViewTest, TestIterationFixed) { | |
332 char arr[] = "Arrr!"; | |
333 ArrayView<char, 6> av(arr); | |
334 EXPECT_EQ('A', *av.begin()); | |
335 EXPECT_EQ('A', *av.cbegin()); | |
336 EXPECT_EQ('\0', *(av.end() - 1)); | |
337 EXPECT_EQ('\0', *(av.cend() - 1)); | |
338 char i = 0; | |
339 for (auto& e : av) { | |
340 EXPECT_EQ(arr + i, &e); | |
341 e = 's' + i; | |
342 ++i; | |
343 } | |
344 i = 0; | |
345 for (auto& e : ArrayView<const char, 6>(av)) { | |
346 EXPECT_EQ(arr + i, &e); | |
347 // e = 'q' + i; // Compile error, because e is a const char&. | |
348 ++i; | |
349 } | |
350 } | |
351 | |
223 TEST(ArrayViewTest, TestEmpty) { | 352 TEST(ArrayViewTest, TestEmpty) { |
224 EXPECT_TRUE(ArrayView<int>().empty()); | 353 EXPECT_TRUE(ArrayView<int>().empty()); |
225 const int a[] = {1, 2, 3}; | 354 const int a[] = {1, 2, 3}; |
226 EXPECT_FALSE(ArrayView<const int>(a).empty()); | 355 EXPECT_FALSE(ArrayView<const int>(a).empty()); |
356 | |
357 static_assert(ArrayView<int, 0>::empty(), ""); | |
358 static_assert(!ArrayView<int, 3>::empty(), ""); | |
227 } | 359 } |
228 | 360 |
229 TEST(ArrayViewTest, TestCompare) { | 361 TEST(ArrayViewTest, TestCompare) { |
230 int a[] = {1, 2, 3}; | 362 int a[] = {1, 2, 3}; |
231 int b[] = {1, 2, 3}; | 363 int b[] = {1, 2, 3}; |
364 | |
232 EXPECT_EQ(ArrayView<int>(a), ArrayView<int>(a)); | 365 EXPECT_EQ(ArrayView<int>(a), ArrayView<int>(a)); |
366 EXPECT_EQ((ArrayView<int, 3>(a)), (ArrayView<int, 3>(a))); | |
367 EXPECT_EQ(ArrayView<int>(a), (ArrayView<int, 3>(a))); | |
233 EXPECT_EQ(ArrayView<int>(), ArrayView<int>()); | 368 EXPECT_EQ(ArrayView<int>(), ArrayView<int>()); |
369 EXPECT_EQ(ArrayView<int>(), ArrayView<int>(a, 0)); | |
370 EXPECT_EQ(ArrayView<int>(a, 0), ArrayView<int>(b, 0)); | |
371 EXPECT_EQ((ArrayView<int, 0>(a, 0)), ArrayView<int>()); | |
372 | |
234 EXPECT_NE(ArrayView<int>(a), ArrayView<int>(b)); | 373 EXPECT_NE(ArrayView<int>(a), ArrayView<int>(b)); |
374 EXPECT_NE((ArrayView<int, 3>(a)), (ArrayView<int, 3>(b))); | |
375 EXPECT_NE((ArrayView<int, 3>(a)), ArrayView<int>(b)); | |
235 EXPECT_NE(ArrayView<int>(a), ArrayView<int>()); | 376 EXPECT_NE(ArrayView<int>(a), ArrayView<int>()); |
236 EXPECT_NE(ArrayView<int>(a), ArrayView<int>(a, 2)); | 377 EXPECT_NE(ArrayView<int>(a), ArrayView<int>(a, 2)); |
378 EXPECT_NE((ArrayView<int, 3>(a)), (ArrayView<int, 2>(a, 2))); | |
237 } | 379 } |
238 | 380 |
239 TEST(ArrayViewTest, TestSubView) { | 381 TEST(ArrayViewTest, TestSubViewVariable) { |
240 int a[] = {1, 2, 3}; | 382 int a[] = {1, 2, 3}; |
241 ArrayView<int> av(a); | 383 ArrayView<int> av(a); |
242 | 384 |
243 EXPECT_EQ(av.subview(0), av); | 385 EXPECT_EQ(av.subview(0), av); |
244 | 386 |
245 EXPECT_THAT(av.subview(1), ElementsAre(2, 3)); | 387 EXPECT_THAT(av.subview(1), ElementsAre(2, 3)); |
246 EXPECT_THAT(av.subview(2), ElementsAre(3)); | 388 EXPECT_THAT(av.subview(2), ElementsAre(3)); |
247 EXPECT_THAT(av.subview(3), IsEmpty()); | 389 EXPECT_THAT(av.subview(3), IsEmpty()); |
248 EXPECT_THAT(av.subview(4), IsEmpty()); | 390 EXPECT_THAT(av.subview(4), IsEmpty()); |
249 | 391 |
250 EXPECT_THAT(av.subview(1, 0), IsEmpty()); | 392 EXPECT_THAT(av.subview(1, 0), IsEmpty()); |
251 EXPECT_THAT(av.subview(1, 1), ElementsAre(2)); | 393 EXPECT_THAT(av.subview(1, 1), ElementsAre(2)); |
252 EXPECT_THAT(av.subview(1, 2), ElementsAre(2, 3)); | 394 EXPECT_THAT(av.subview(1, 2), ElementsAre(2, 3)); |
253 EXPECT_THAT(av.subview(1, 3), ElementsAre(2, 3)); | 395 EXPECT_THAT(av.subview(1, 3), ElementsAre(2, 3)); |
254 } | 396 } |
255 | 397 |
398 TEST(ArrayViewTest, TestSubViewFixed) { | |
399 int a[] = {1, 2, 3}; | |
400 ArrayView<int, 3> av(a); | |
401 | |
402 EXPECT_EQ(av.subview(0), av); | |
403 | |
404 EXPECT_THAT(av.subview(1), ElementsAre(2, 3)); | |
405 EXPECT_THAT(av.subview(2), ElementsAre(3)); | |
406 EXPECT_THAT(av.subview(3), IsEmpty()); | |
407 EXPECT_THAT(av.subview(4), IsEmpty()); | |
408 | |
409 EXPECT_THAT(av.subview(1, 0), IsEmpty()); | |
410 EXPECT_THAT(av.subview(1, 1), ElementsAre(2)); | |
411 EXPECT_THAT(av.subview(1, 2), ElementsAre(2, 3)); | |
412 EXPECT_THAT(av.subview(1, 3), ElementsAre(2, 3)); | |
413 } | |
414 | |
256 } // namespace rtc | 415 } // namespace rtc |
OLD | NEW |