OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/public/cpp/bindings/array.h" | 5 #include "mojo/public/cpp/bindings/array.h" |
6 #include "mojo/public/cpp/bindings/lib/array_internal.h" | 6 #include "mojo/public/cpp/bindings/lib/array_internal.h" |
7 #include "mojo/public/cpp/bindings/lib/array_serialization.h" | 7 #include "mojo/public/cpp/bindings/lib/array_serialization.h" |
8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" | 8 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" |
9 #include "mojo/public/cpp/bindings/tests/container_test_util.h" | 9 #include "mojo/public/cpp/bindings/tests/container_test_util.h" |
10 #include "mojo/public/cpp/bindings/tests/iterator_test_util.h" | 10 #include "mojo/public/cpp/bindings/tests/iterator_test_util.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 class ArrayTest : public testing::Test { | 24 class ArrayTest : public testing::Test { |
25 public: | 25 public: |
26 ~ArrayTest() override {} | 26 ~ArrayTest() override {} |
27 | 27 |
28 private: | 28 private: |
29 Environment env_; | 29 Environment env_; |
30 }; | 30 }; |
31 | 31 |
32 // Tests that basic Array operations work. | 32 // Tests that basic Array operations work. |
33 TEST_F(ArrayTest, Basic) { | 33 TEST_F(ArrayTest, Basic) { |
34 Array<char> array(8); | 34 auto array = Array<char>::New(8); |
35 for (size_t i = 0; i < array.size(); ++i) { | 35 for (size_t i = 0; i < array.size(); ++i) { |
36 char val = static_cast<char>(i * 2); | 36 char val = static_cast<char>(i * 2); |
37 array[i] = val; | 37 array[i] = val; |
38 EXPECT_EQ(val, array.at(i)); | 38 EXPECT_EQ(val, array.at(i)); |
39 } | 39 } |
40 } | 40 } |
41 | 41 |
42 // Tests that basic Array<bool> operations work. | 42 // Tests that basic Array<bool> operations work. |
43 TEST_F(ArrayTest, Bool) { | 43 TEST_F(ArrayTest, Bool) { |
44 Array<bool> array(64); | 44 auto array = Array<bool>::New(64); |
45 for (size_t i = 0; i < array.size(); ++i) { | 45 for (size_t i = 0; i < array.size(); ++i) { |
46 bool val = i % 3 == 0; | 46 bool val = i % 3 == 0; |
47 array[i] = val; | 47 array[i] = val; |
48 EXPECT_EQ(val, array.at(i)); | 48 EXPECT_EQ(val, array.at(i)); |
49 } | 49 } |
50 } | 50 } |
51 | 51 |
52 // Tests that Array<ScopedMessagePipeHandle> supports transferring handles. | 52 // Tests that Array<ScopedMessagePipeHandle> supports transferring handles. |
53 TEST_F(ArrayTest, Handle) { | 53 TEST_F(ArrayTest, Handle) { |
54 MessagePipe pipe; | 54 MessagePipe pipe; |
55 Array<ScopedMessagePipeHandle> handles(2); | 55 auto handles = Array<ScopedMessagePipeHandle>::New(2); |
56 handles[0] = pipe.handle0.Pass(); | 56 handles[0] = pipe.handle0.Pass(); |
57 handles[1].reset(pipe.handle1.release()); | 57 handles[1].reset(pipe.handle1.release()); |
58 | 58 |
59 EXPECT_FALSE(pipe.handle0.is_valid()); | 59 EXPECT_FALSE(pipe.handle0.is_valid()); |
60 EXPECT_FALSE(pipe.handle1.is_valid()); | 60 EXPECT_FALSE(pipe.handle1.is_valid()); |
61 | 61 |
62 Array<ScopedMessagePipeHandle> handles2 = handles.Pass(); | 62 Array<ScopedMessagePipeHandle> handles2 = handles.Pass(); |
63 EXPECT_TRUE(handles2[0].is_valid()); | 63 EXPECT_TRUE(handles2[0].is_valid()); |
64 EXPECT_TRUE(handles2[1].is_valid()); | 64 EXPECT_TRUE(handles2[1].is_valid()); |
65 | 65 |
66 ScopedMessagePipeHandle pipe_handle = handles2[0].Pass(); | 66 ScopedMessagePipeHandle pipe_handle = handles2[0].Pass(); |
67 EXPECT_TRUE(pipe_handle.is_valid()); | 67 EXPECT_TRUE(pipe_handle.is_valid()); |
68 EXPECT_FALSE(handles2[0].is_valid()); | 68 EXPECT_FALSE(handles2[0].is_valid()); |
69 } | 69 } |
70 | 70 |
71 // Tests that Array<ScopedMessagePipeHandle> supports closing handles. | 71 // Tests that Array<ScopedMessagePipeHandle> supports closing handles. |
72 TEST_F(ArrayTest, HandlesAreClosed) { | 72 TEST_F(ArrayTest, HandlesAreClosed) { |
73 MessagePipe pipe; | 73 MessagePipe pipe; |
74 MojoHandle pipe0_value = pipe.handle0.get().value(); | 74 MojoHandle pipe0_value = pipe.handle0.get().value(); |
75 MojoHandle pipe1_value = pipe.handle0.get().value(); | 75 MojoHandle pipe1_value = pipe.handle0.get().value(); |
76 | 76 |
77 { | 77 { |
78 Array<ScopedMessagePipeHandle> handles(2); | 78 auto handles = Array<ScopedMessagePipeHandle>::New(2); |
79 handles[0] = pipe.handle0.Pass(); | 79 handles[0] = pipe.handle0.Pass(); |
80 handles[1].reset(pipe.handle0.release()); | 80 handles[1].reset(pipe.handle0.release()); |
81 } | 81 } |
82 | 82 |
83 // We expect the pipes to have been closed. | 83 // We expect the pipes to have been closed. |
84 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value)); | 84 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe0_value)); |
85 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value)); | 85 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(pipe1_value)); |
86 } | 86 } |
87 | 87 |
88 TEST_F(ArrayTest, Clone) { | 88 TEST_F(ArrayTest, Clone) { |
89 { | 89 { |
90 // Test POD. | 90 // Test POD. |
91 Array<int32_t> array(3); | 91 auto array = Array<int32_t>::New(3); |
92 for (size_t i = 0; i < array.size(); ++i) | 92 for (size_t i = 0; i < array.size(); ++i) |
93 array[i] = static_cast<int32_t>(i); | 93 array[i] = static_cast<int32_t>(i); |
94 | 94 |
95 Array<int32_t> clone_array = array.Clone(); | 95 Array<int32_t> clone_array = array.Clone(); |
96 EXPECT_EQ(array.size(), clone_array.size()); | 96 EXPECT_EQ(array.size(), clone_array.size()); |
97 for (size_t i = 0; i < array.size(); ++i) | 97 for (size_t i = 0; i < array.size(); ++i) |
98 EXPECT_EQ(array[i], clone_array[i]); | 98 EXPECT_EQ(array[i], clone_array[i]); |
99 } | 99 } |
100 | 100 |
101 { | 101 { |
102 // Test copyable object. | 102 // Test copyable object. |
103 Array<String> array(2); | 103 auto array = Array<String>::New(2); |
104 array[0] = "hello"; | 104 array[0] = "hello"; |
105 array[1] = "world"; | 105 array[1] = "world"; |
106 | 106 |
107 Array<String> clone_array = array.Clone(); | 107 Array<String> clone_array = array.Clone(); |
108 EXPECT_EQ(array.size(), clone_array.size()); | 108 EXPECT_EQ(array.size(), clone_array.size()); |
109 for (size_t i = 0; i < array.size(); ++i) | 109 for (size_t i = 0; i < array.size(); ++i) |
110 EXPECT_EQ(array[i], clone_array[i]); | 110 EXPECT_EQ(array[i], clone_array[i]); |
111 } | 111 } |
112 | 112 |
113 { | 113 { |
114 // Test struct. | 114 // Test struct. |
115 Array<RectPtr> array(2); | 115 auto array = Array<RectPtr>::New(2); |
116 array[1] = Rect::New(); | 116 array[1] = Rect::New(); |
117 array[1]->x = 1; | 117 array[1]->x = 1; |
118 array[1]->y = 2; | 118 array[1]->y = 2; |
119 array[1]->width = 3; | 119 array[1]->width = 3; |
120 array[1]->height = 4; | 120 array[1]->height = 4; |
121 | 121 |
122 Array<RectPtr> clone_array = array.Clone(); | 122 Array<RectPtr> clone_array = array.Clone(); |
123 EXPECT_EQ(array.size(), clone_array.size()); | 123 EXPECT_EQ(array.size(), clone_array.size()); |
124 EXPECT_TRUE(clone_array[0].is_null()); | 124 EXPECT_TRUE(clone_array[0].is_null()); |
125 EXPECT_EQ(array[1]->x, clone_array[1]->x); | 125 EXPECT_EQ(array[1]->x, clone_array[1]->x); |
126 EXPECT_EQ(array[1]->y, clone_array[1]->y); | 126 EXPECT_EQ(array[1]->y, clone_array[1]->y); |
127 EXPECT_EQ(array[1]->width, clone_array[1]->width); | 127 EXPECT_EQ(array[1]->width, clone_array[1]->width); |
128 EXPECT_EQ(array[1]->height, clone_array[1]->height); | 128 EXPECT_EQ(array[1]->height, clone_array[1]->height); |
129 } | 129 } |
130 | 130 |
131 { | 131 { |
132 // Test array of array. | 132 // Test array of array. |
133 Array<Array<int8_t>> array(2); | 133 auto array = Array<Array<int8_t>>::New(2); |
134 array[1] = Array<int8_t>(2); | 134 array[1] = Array<int8_t>::New(2); |
135 array[1][0] = 0; | 135 array[1][0] = 0; |
136 array[1][1] = 1; | 136 array[1][1] = 1; |
137 | 137 |
138 Array<Array<int8_t>> clone_array = array.Clone(); | 138 Array<Array<int8_t>> clone_array = array.Clone(); |
139 EXPECT_EQ(array.size(), clone_array.size()); | 139 EXPECT_EQ(array.size(), clone_array.size()); |
140 EXPECT_TRUE(clone_array[0].is_null()); | 140 EXPECT_TRUE(clone_array[0].is_null()); |
141 EXPECT_EQ(array[1].size(), clone_array[1].size()); | 141 EXPECT_EQ(array[1].size(), clone_array[1].size()); |
142 EXPECT_EQ(array[1][0], clone_array[1][0]); | 142 EXPECT_EQ(array[1][0], clone_array[1][0]); |
143 EXPECT_EQ(array[1][1], clone_array[1][1]); | 143 EXPECT_EQ(array[1][1], clone_array[1][1]); |
144 } | 144 } |
145 | 145 |
146 { | 146 { |
147 // Test that array of handles still works although Clone() is not available. | 147 // Test that array of handles still works although Clone() is not available. |
148 Array<ScopedMessagePipeHandle> array(10); | 148 auto array = Array<ScopedMessagePipeHandle>::New(10); |
149 EXPECT_FALSE(array[0].is_valid()); | 149 EXPECT_FALSE(array[0].is_valid()); |
150 } | 150 } |
151 } | 151 } |
152 | 152 |
153 TEST_F(ArrayTest, Serialization_ArrayOfPOD) { | 153 TEST_F(ArrayTest, Serialization_ArrayOfPOD) { |
154 Array<int32_t> array(4); | 154 auto array = Array<int32_t>::New(4); |
155 for (size_t i = 0; i < array.size(); ++i) | 155 for (size_t i = 0; i < array.size(); ++i) |
156 array[i] = static_cast<int32_t>(i); | 156 array[i] = static_cast<int32_t>(i); |
157 | 157 |
158 size_t size = GetSerializedSize_(array); | 158 size_t size = GetSerializedSize_(array); |
159 EXPECT_EQ(8U + 4 * 4U, size); | 159 EXPECT_EQ(8U + 4 * 4U, size); |
160 | 160 |
161 FixedBufferForTesting buf(size); | 161 FixedBufferForTesting buf(size); |
162 Array_Data<int32_t>* data; | 162 Array_Data<int32_t>* data; |
163 ArrayValidateParams validate_params(0, false, nullptr); | 163 ArrayValidateParams validate_params(0, false, nullptr); |
164 SerializeArray_(&array, &buf, &data, &validate_params); | 164 SerializeArray_(&array, &buf, &data, &validate_params); |
165 | 165 |
166 Array<int32_t> array2; | 166 Array<int32_t> array2; |
167 Deserialize_(data, &array2); | 167 Deserialize_(data, &array2); |
168 | 168 |
169 EXPECT_EQ(4U, array2.size()); | 169 EXPECT_EQ(4U, array2.size()); |
170 for (size_t i = 0; i < array2.size(); ++i) | 170 for (size_t i = 0; i < array2.size(); ++i) |
171 EXPECT_EQ(static_cast<int32_t>(i), array2[i]); | 171 EXPECT_EQ(static_cast<int32_t>(i), array2[i]); |
172 } | 172 } |
173 | 173 |
174 TEST_F(ArrayTest, Serialization_EmptyArrayOfPOD) { | 174 TEST_F(ArrayTest, Serialization_EmptyArrayOfPOD) { |
175 Array<int32_t> array(0); | 175 auto array = Array<int32_t>::New(0); |
176 size_t size = GetSerializedSize_(array); | 176 size_t size = GetSerializedSize_(array); |
177 EXPECT_EQ(8U, size); | 177 EXPECT_EQ(8U, size); |
178 | 178 |
179 FixedBufferForTesting buf(size); | 179 FixedBufferForTesting buf(size); |
180 Array_Data<int32_t>* data; | 180 Array_Data<int32_t>* data; |
181 ArrayValidateParams validate_params(0, false, nullptr); | 181 ArrayValidateParams validate_params(0, false, nullptr); |
182 SerializeArray_(&array, &buf, &data, &validate_params); | 182 SerializeArray_(&array, &buf, &data, &validate_params); |
183 | 183 |
184 Array<int32_t> array2; | 184 Array<int32_t> array2; |
185 Deserialize_(data, &array2); | 185 Deserialize_(data, &array2); |
186 EXPECT_EQ(0U, array2.size()); | 186 EXPECT_EQ(0U, array2.size()); |
187 } | 187 } |
188 | 188 |
189 TEST_F(ArrayTest, Serialization_ArrayOfArrayOfPOD) { | 189 TEST_F(ArrayTest, Serialization_ArrayOfArrayOfPOD) { |
190 Array<Array<int32_t>> array(2); | 190 auto array = Array<Array<int32_t>>::New(2); |
191 for (size_t j = 0; j < array.size(); ++j) { | 191 for (size_t j = 0; j < array.size(); ++j) { |
192 Array<int32_t> inner(4); | 192 auto inner = Array<int32_t>::New(4); |
193 for (size_t i = 0; i < inner.size(); ++i) | 193 for (size_t i = 0; i < inner.size(); ++i) |
194 inner[i] = static_cast<int32_t>(i + (j * 10)); | 194 inner[i] = static_cast<int32_t>(i + (j * 10)); |
195 array[j] = inner.Pass(); | 195 array[j] = inner.Pass(); |
196 } | 196 } |
197 | 197 |
198 size_t size = GetSerializedSize_(array); | 198 size_t size = GetSerializedSize_(array); |
199 EXPECT_EQ(8U + 2 * 8U + 2 * (8U + 4 * 4U), size); | 199 EXPECT_EQ(8U + 2 * 8U + 2 * (8U + 4 * 4U), size); |
200 | 200 |
201 FixedBufferForTesting buf(size); | 201 FixedBufferForTesting buf(size); |
202 Array_Data<Array_Data<int32_t>*>* data; | 202 Array_Data<Array_Data<int32_t>*>* data; |
203 ArrayValidateParams validate_params( | 203 ArrayValidateParams validate_params( |
204 0, false, new ArrayValidateParams(0, false, nullptr)); | 204 0, false, new ArrayValidateParams(0, false, nullptr)); |
205 SerializeArray_(&array, &buf, &data, &validate_params); | 205 SerializeArray_(&array, &buf, &data, &validate_params); |
206 | 206 |
207 Array<Array<int32_t>> array2; | 207 Array<Array<int32_t>> array2; |
208 Deserialize_(data, &array2); | 208 Deserialize_(data, &array2); |
209 | 209 |
210 EXPECT_EQ(2U, array2.size()); | 210 EXPECT_EQ(2U, array2.size()); |
211 for (size_t j = 0; j < array2.size(); ++j) { | 211 for (size_t j = 0; j < array2.size(); ++j) { |
212 const Array<int32_t>& inner = array2[j]; | 212 const Array<int32_t>& inner = array2[j]; |
213 EXPECT_EQ(4U, inner.size()); | 213 EXPECT_EQ(4U, inner.size()); |
214 for (size_t i = 0; i < inner.size(); ++i) | 214 for (size_t i = 0; i < inner.size(); ++i) |
215 EXPECT_EQ(static_cast<int32_t>(i + (j * 10)), inner[i]); | 215 EXPECT_EQ(static_cast<int32_t>(i + (j * 10)), inner[i]); |
216 } | 216 } |
217 } | 217 } |
218 | 218 |
219 TEST_F(ArrayTest, Serialization_ArrayOfBool) { | 219 TEST_F(ArrayTest, Serialization_ArrayOfBool) { |
220 Array<bool> array(10); | 220 auto array = Array<bool>::New(10); |
221 for (size_t i = 0; i < array.size(); ++i) | 221 for (size_t i = 0; i < array.size(); ++i) |
222 array[i] = i % 2 ? true : false; | 222 array[i] = i % 2 ? true : false; |
223 | 223 |
224 size_t size = GetSerializedSize_(array); | 224 size_t size = GetSerializedSize_(array); |
225 EXPECT_EQ(8U + 8U, size); | 225 EXPECT_EQ(8U + 8U, size); |
226 | 226 |
227 FixedBufferForTesting buf(size); | 227 FixedBufferForTesting buf(size); |
228 Array_Data<bool>* data; | 228 Array_Data<bool>* data; |
229 ArrayValidateParams validate_params(0, false, nullptr); | 229 ArrayValidateParams validate_params(0, false, nullptr); |
230 SerializeArray_(&array, &buf, &data, &validate_params); | 230 SerializeArray_(&array, &buf, &data, &validate_params); |
231 | 231 |
232 Array<bool> array2; | 232 Array<bool> array2; |
233 Deserialize_(data, &array2); | 233 Deserialize_(data, &array2); |
234 | 234 |
235 EXPECT_EQ(10U, array2.size()); | 235 EXPECT_EQ(10U, array2.size()); |
236 for (size_t i = 0; i < array2.size(); ++i) | 236 for (size_t i = 0; i < array2.size(); ++i) |
237 EXPECT_EQ(i % 2 ? true : false, array2[i]); | 237 EXPECT_EQ(i % 2 ? true : false, array2[i]); |
238 } | 238 } |
239 | 239 |
240 TEST_F(ArrayTest, Serialization_ArrayOfString) { | 240 TEST_F(ArrayTest, Serialization_ArrayOfString) { |
241 Array<String> array(10); | 241 auto array = Array<String>::New(10); |
242 for (size_t i = 0; i < array.size(); ++i) { | 242 for (size_t i = 0; i < array.size(); ++i) { |
243 char c = 'A' + static_cast<char>(i); | 243 char c = 'A' + static_cast<char>(i); |
244 array[i] = String(&c, 1); | 244 array[i] = String(&c, 1); |
245 } | 245 } |
246 | 246 |
247 size_t size = GetSerializedSize_(array); | 247 size_t size = GetSerializedSize_(array); |
248 EXPECT_EQ(8U + // array header | 248 EXPECT_EQ(8U + // array header |
249 10 * 8U + // array payload (10 pointers) | 249 10 * 8U + // array payload (10 pointers) |
250 10 * (8U + // string header | 250 10 * (8U + // string header |
251 8U), // string length of 1 padded to 8 | 251 8U), // string length of 1 padded to 8 |
(...skipping 10 matching lines...) Expand all Loading... |
262 | 262 |
263 EXPECT_EQ(10U, array2.size()); | 263 EXPECT_EQ(10U, array2.size()); |
264 for (size_t i = 0; i < array2.size(); ++i) { | 264 for (size_t i = 0; i < array2.size(); ++i) { |
265 char c = 'A' + static_cast<char>(i); | 265 char c = 'A' + static_cast<char>(i); |
266 EXPECT_EQ(String(&c, 1), array2[i]); | 266 EXPECT_EQ(String(&c, 1), array2[i]); |
267 } | 267 } |
268 } | 268 } |
269 | 269 |
270 TEST_F(ArrayTest, Resize_Copyable) { | 270 TEST_F(ArrayTest, Resize_Copyable) { |
271 ASSERT_EQ(0u, CopyableType::num_instances()); | 271 ASSERT_EQ(0u, CopyableType::num_instances()); |
272 mojo::Array<CopyableType> array(3); | 272 auto array = mojo::Array<CopyableType>::New(3); |
273 std::vector<CopyableType*> value_ptrs; | 273 std::vector<CopyableType*> value_ptrs; |
274 value_ptrs.push_back(array[0].ptr()); | 274 value_ptrs.push_back(array[0].ptr()); |
275 value_ptrs.push_back(array[1].ptr()); | 275 value_ptrs.push_back(array[1].ptr()); |
276 | 276 |
277 for (size_t i = 0; i < array.size(); i++) | 277 for (size_t i = 0; i < array.size(); i++) |
278 array[i].ResetCopied(); | 278 array[i].ResetCopied(); |
279 | 279 |
280 array.resize(2); | 280 array.resize(2); |
281 ASSERT_EQ(2u, array.size()); | 281 ASSERT_EQ(2u, array.size()); |
282 EXPECT_EQ(array.size(), CopyableType::num_instances()); | 282 EXPECT_EQ(array.size(), CopyableType::num_instances()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 array.reset(); | 314 array.reset(); |
315 EXPECT_EQ(0u, CopyableType::num_instances()); | 315 EXPECT_EQ(0u, CopyableType::num_instances()); |
316 EXPECT_FALSE(array); | 316 EXPECT_FALSE(array); |
317 array.resize(0); | 317 array.resize(0); |
318 EXPECT_EQ(0u, CopyableType::num_instances()); | 318 EXPECT_EQ(0u, CopyableType::num_instances()); |
319 EXPECT_TRUE(array); | 319 EXPECT_TRUE(array); |
320 } | 320 } |
321 | 321 |
322 TEST_F(ArrayTest, Resize_MoveOnly) { | 322 TEST_F(ArrayTest, Resize_MoveOnly) { |
323 ASSERT_EQ(0u, MoveOnlyType::num_instances()); | 323 ASSERT_EQ(0u, MoveOnlyType::num_instances()); |
324 mojo::Array<MoveOnlyType> array(3); | 324 auto array = mojo::Array<MoveOnlyType>::New(3); |
325 std::vector<MoveOnlyType*> value_ptrs; | 325 std::vector<MoveOnlyType*> value_ptrs; |
326 value_ptrs.push_back(array[0].ptr()); | 326 value_ptrs.push_back(array[0].ptr()); |
327 value_ptrs.push_back(array[1].ptr()); | 327 value_ptrs.push_back(array[1].ptr()); |
328 | 328 |
329 for (size_t i = 0; i < array.size(); i++) | 329 for (size_t i = 0; i < array.size(); i++) |
330 EXPECT_FALSE(array[i].moved()); | 330 EXPECT_FALSE(array[i].moved()); |
331 | 331 |
332 array.resize(2); | 332 array.resize(2); |
333 ASSERT_EQ(2u, array.size()); | 333 ASSERT_EQ(2u, array.size()); |
334 EXPECT_EQ(array.size(), MoveOnlyType::num_instances()); | 334 EXPECT_EQ(array.size(), MoveOnlyType::num_instances()); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
366 array.reset(); | 366 array.reset(); |
367 EXPECT_EQ(0u, MoveOnlyType::num_instances()); | 367 EXPECT_EQ(0u, MoveOnlyType::num_instances()); |
368 EXPECT_FALSE(array); | 368 EXPECT_FALSE(array); |
369 array.resize(0); | 369 array.resize(0); |
370 EXPECT_EQ(0u, MoveOnlyType::num_instances()); | 370 EXPECT_EQ(0u, MoveOnlyType::num_instances()); |
371 EXPECT_TRUE(array); | 371 EXPECT_TRUE(array); |
372 } | 372 } |
373 | 373 |
374 TEST_F(ArrayTest, PushBack_Copyable) { | 374 TEST_F(ArrayTest, PushBack_Copyable) { |
375 ASSERT_EQ(0u, CopyableType::num_instances()); | 375 ASSERT_EQ(0u, CopyableType::num_instances()); |
376 mojo::Array<CopyableType> array(2); | 376 auto array = mojo::Array<CopyableType>::New(2); |
377 array.reset(); | 377 array.reset(); |
378 std::vector<CopyableType*> value_ptrs; | 378 std::vector<CopyableType*> value_ptrs; |
379 size_t capacity = array.storage().capacity(); | 379 size_t capacity = array.storage().capacity(); |
380 for (size_t i = 0; i < capacity; i++) { | 380 for (size_t i = 0; i < capacity; i++) { |
381 CopyableType value; | 381 CopyableType value; |
382 value_ptrs.push_back(value.ptr()); | 382 value_ptrs.push_back(value.ptr()); |
383 array.push_back(value); | 383 array.push_back(value); |
384 ASSERT_EQ(i + 1, array.size()); | 384 ASSERT_EQ(i + 1, array.size()); |
385 ASSERT_EQ(i + 1, value_ptrs.size()); | 385 ASSERT_EQ(i + 1, value_ptrs.size()); |
386 EXPECT_EQ(array.size() + 1, CopyableType::num_instances()); | 386 EXPECT_EQ(array.size() + 1, CopyableType::num_instances()); |
(...skipping 14 matching lines...) Expand all Loading... |
401 for (size_t i = 0; i < array.size(); i++) { | 401 for (size_t i = 0; i < array.size(); i++) { |
402 EXPECT_TRUE(array[i].copied()); | 402 EXPECT_TRUE(array[i].copied()); |
403 EXPECT_EQ(value_ptrs[i], array[i].ptr()); | 403 EXPECT_EQ(value_ptrs[i], array[i].ptr()); |
404 } | 404 } |
405 array.reset(); | 405 array.reset(); |
406 EXPECT_EQ(0u, CopyableType::num_instances()); | 406 EXPECT_EQ(0u, CopyableType::num_instances()); |
407 } | 407 } |
408 | 408 |
409 TEST_F(ArrayTest, PushBack_MoveOnly) { | 409 TEST_F(ArrayTest, PushBack_MoveOnly) { |
410 ASSERT_EQ(0u, MoveOnlyType::num_instances()); | 410 ASSERT_EQ(0u, MoveOnlyType::num_instances()); |
411 mojo::Array<MoveOnlyType> array(2); | 411 auto array = mojo::Array<MoveOnlyType>::New(2); |
412 array.reset(); | 412 array.reset(); |
413 std::vector<MoveOnlyType*> value_ptrs; | 413 std::vector<MoveOnlyType*> value_ptrs; |
414 size_t capacity = array.storage().capacity(); | 414 size_t capacity = array.storage().capacity(); |
415 for (size_t i = 0; i < capacity; i++) { | 415 for (size_t i = 0; i < capacity; i++) { |
416 MoveOnlyType value; | 416 MoveOnlyType value; |
417 value_ptrs.push_back(value.ptr()); | 417 value_ptrs.push_back(value.ptr()); |
418 array.push_back(value.Pass()); | 418 array.push_back(value.Pass()); |
419 ASSERT_EQ(i + 1, array.size()); | 419 ASSERT_EQ(i + 1, array.size()); |
420 ASSERT_EQ(i + 1, value_ptrs.size()); | 420 ASSERT_EQ(i + 1, value_ptrs.size()); |
421 EXPECT_EQ(array.size() + 1, MoveOnlyType::num_instances()); | 421 EXPECT_EQ(array.size() + 1, MoveOnlyType::num_instances()); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 { | 486 { |
487 SCOPED_TRACE("Array iterator bidirectionality test."); | 487 SCOPED_TRACE("Array iterator bidirectionality test."); |
488 ExpectBidiIteratorConcept(arr.begin(), arr.end(), values); | 488 ExpectBidiIteratorConcept(arr.begin(), arr.end(), values); |
489 ExpectBidiMutableIteratorConcept(arr.begin(), arr.end(), values); | 489 ExpectBidiMutableIteratorConcept(arr.begin(), arr.end(), values); |
490 } | 490 } |
491 } | 491 } |
492 | 492 |
493 } // namespace | 493 } // namespace |
494 } // namespace test | 494 } // namespace test |
495 } // namespace mojo | 495 } // namespace mojo |
OLD | NEW |