OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "cc/quads/list_container.h" | |
6 | |
7 #include <vector> | |
8 #include "cc/quads/draw_quad.h" | |
9 #include "cc/quads/largest_draw_quad.h" | |
10 #include "cc/quads/render_pass_draw_quad.h" | |
11 #include "cc/quads/shared_quad_state.h" | |
12 #include "cc/quads/stream_video_draw_quad.h" | |
13 #include "testing/gmock/include/gmock/gmock.h" | |
14 #include "testing/gtest/include/gtest/gtest.h" | |
15 | |
16 namespace cc { | |
17 namespace { | |
18 | |
19 int kMagicNumberToUseForDrawQuadOne = 42; | |
20 int kMagicNumberToUseForDrawQuadTwo = 314; | |
21 | |
22 bool isConstSharedQuadStatePointer(const SharedQuadState* ptr) { | |
23 return true; | |
24 } | |
25 | |
26 bool isConstSharedQuadStatePointer(SharedQuadState* ptr) { | |
27 return false; | |
28 } | |
29 | |
30 class SimpleDrawQuad : public DrawQuad { | |
31 public: | |
32 ~SimpleDrawQuad() override {} | |
33 void IterateResources(const ResourceIteratorCallback& callback) override {} | |
34 | |
35 void set_value(int val) { value = val; } | |
36 int get_value() { return value; } | |
37 void ExtendValue(base::trace_event::TracedValue* value) const override {} | |
38 | |
39 private: | |
40 int value; | |
41 }; | |
42 | |
43 class SimpleDrawQuadConstructMagicNumberOne : public SimpleDrawQuad { | |
44 public: | |
45 SimpleDrawQuadConstructMagicNumberOne() : SimpleDrawQuad() { | |
46 set_value(kMagicNumberToUseForDrawQuadOne); | |
47 } | |
48 }; | |
49 | |
50 class SimpleDrawQuadConstructMagicNumberTwo : public SimpleDrawQuad { | |
51 public: | |
52 SimpleDrawQuadConstructMagicNumberTwo() : SimpleDrawQuad() { | |
53 set_value(kMagicNumberToUseForDrawQuadTwo); | |
54 } | |
55 }; | |
56 | |
57 class MockDrawQuad : public DrawQuad { | |
58 public: | |
59 ~MockDrawQuad() override { Destruct(); } | |
60 void IterateResources(const ResourceIteratorCallback& callback) override {} | |
61 void ExtendValue(base::trace_event::TracedValue* value) const override {} | |
62 MOCK_METHOD0(Destruct, void()); | |
63 }; | |
64 | |
65 TEST(ListContainerTest, ConstructorCalledInAllocateAndConstruct) { | |
66 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
67 | |
68 size_t size = 2; | |
69 SimpleDrawQuadConstructMagicNumberOne* dq_1 = | |
70 list.AllocateAndConstruct<SimpleDrawQuadConstructMagicNumberOne>(); | |
71 SimpleDrawQuadConstructMagicNumberTwo* dq_2 = | |
72 list.AllocateAndConstruct<SimpleDrawQuadConstructMagicNumberTwo>(); | |
73 | |
74 EXPECT_EQ(size, list.size()); | |
75 EXPECT_EQ(dq_1, list.front()); | |
76 EXPECT_EQ(dq_2, list.back()); | |
77 | |
78 EXPECT_EQ(kMagicNumberToUseForDrawQuadOne, dq_1->get_value()); | |
79 EXPECT_EQ(kMagicNumberToUseForDrawQuadTwo, dq_2->get_value()); | |
80 } | |
81 | |
82 TEST(ListContainerTest, DestructorCalled) { | |
83 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
84 | |
85 size_t size = 1; | |
86 MockDrawQuad* dq_1 = list.AllocateAndConstruct<MockDrawQuad>(); | |
87 | |
88 EXPECT_CALL(*dq_1, Destruct()); | |
89 EXPECT_EQ(size, list.size()); | |
90 EXPECT_EQ(dq_1, list.front()); | |
91 } | |
92 | |
93 TEST(ListContainerTest, DestructorCalledOnceWhenClear) { | |
94 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
95 size_t size = 1; | |
96 MockDrawQuad* dq_1 = list.AllocateAndConstruct<MockDrawQuad>(); | |
97 | |
98 EXPECT_EQ(size, list.size()); | |
99 EXPECT_EQ(dq_1, list.front()); | |
100 | |
101 // Make sure destructor is called once during clear, and won't be called | |
102 // again. | |
103 testing::MockFunction<void()> separator; | |
104 { | |
105 testing::InSequence s; | |
106 EXPECT_CALL(*dq_1, Destruct()); | |
107 EXPECT_CALL(separator, Call()); | |
108 EXPECT_CALL(*dq_1, Destruct()).Times(0); | |
109 } | |
110 | |
111 list.clear(); | |
112 separator.Call(); | |
113 } | |
114 | |
115 TEST(ListContainerTest, DestructorCalledOnceWhenErase) { | |
116 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
117 size_t size = 1; | |
118 MockDrawQuad* dq_1 = list.AllocateAndConstruct<MockDrawQuad>(); | |
119 | |
120 EXPECT_EQ(size, list.size()); | |
121 EXPECT_EQ(dq_1, list.front()); | |
122 | |
123 // Make sure destructor is called once during clear, and won't be called | |
124 // again. | |
125 testing::MockFunction<void()> separator; | |
126 { | |
127 testing::InSequence s; | |
128 EXPECT_CALL(*dq_1, Destruct()); | |
129 EXPECT_CALL(separator, Call()); | |
130 EXPECT_CALL(*dq_1, Destruct()).Times(0); | |
131 } | |
132 | |
133 list.EraseAndInvalidateAllPointers(list.begin()); | |
134 separator.Call(); | |
135 } | |
136 | |
137 TEST(ListContainerTest, SimpleIndexAccessSharedQuadState) { | |
138 ListContainer<SharedQuadState> list; | |
139 | |
140 size_t size = 3; | |
141 SharedQuadState* sqs_1 = list.AllocateAndConstruct<SharedQuadState>(); | |
142 SharedQuadState* sqs_2 = list.AllocateAndConstruct<SharedQuadState>(); | |
143 SharedQuadState* sqs_3 = list.AllocateAndConstruct<SharedQuadState>(); | |
144 | |
145 EXPECT_EQ(size, list.size()); | |
146 EXPECT_EQ(sqs_1, list.front()); | |
147 EXPECT_EQ(sqs_3, list.back()); | |
148 EXPECT_EQ(list.front(), list.ElementAt(0)); | |
149 EXPECT_EQ(sqs_2, list.ElementAt(1)); | |
150 EXPECT_EQ(list.back(), list.ElementAt(2)); | |
151 } | |
152 | |
153 TEST(ListContainerTest, SimpleInsertionSharedQuadState) { | |
154 ListContainer<SharedQuadState> list; | |
155 | |
156 size_t size = 3; | |
157 SharedQuadState* sqs_1 = list.AllocateAndConstruct<SharedQuadState>(); | |
158 list.AllocateAndConstruct<SharedQuadState>(); | |
159 SharedQuadState* sqs_3 = list.AllocateAndConstruct<SharedQuadState>(); | |
160 | |
161 EXPECT_EQ(size, list.size()); | |
162 EXPECT_EQ(sqs_1, list.front()); | |
163 EXPECT_EQ(sqs_3, list.back()); | |
164 } | |
165 | |
166 TEST(ListContainerTest, SimpleInsertionAndClearSharedQuadState) { | |
167 ListContainer<SharedQuadState> list; | |
168 EXPECT_TRUE(list.empty()); | |
169 EXPECT_EQ(0u, list.size()); | |
170 | |
171 size_t size = 3; | |
172 SharedQuadState* sqs_1 = list.AllocateAndConstruct<SharedQuadState>(); | |
173 list.AllocateAndConstruct<SharedQuadState>(); | |
174 SharedQuadState* sqs_3 = list.AllocateAndConstruct<SharedQuadState>(); | |
175 | |
176 EXPECT_EQ(size, list.size()); | |
177 EXPECT_EQ(sqs_1, list.front()); | |
178 EXPECT_EQ(sqs_3, list.back()); | |
179 EXPECT_FALSE(list.empty()); | |
180 | |
181 list.clear(); | |
182 EXPECT_TRUE(list.empty()); | |
183 EXPECT_EQ(0u, list.size()); | |
184 } | |
185 | |
186 TEST(ListContainerTest, SimpleInsertionClearAndInsertAgainSharedQuadState) { | |
187 ListContainer<SharedQuadState> list; | |
188 EXPECT_TRUE(list.empty()); | |
189 EXPECT_EQ(0u, list.size()); | |
190 | |
191 size_t size = 2; | |
192 SharedQuadState* sqs_front = list.AllocateAndConstruct<SharedQuadState>(); | |
193 SharedQuadState* sqs_back = list.AllocateAndConstruct<SharedQuadState>(); | |
194 | |
195 EXPECT_EQ(size, list.size()); | |
196 EXPECT_EQ(sqs_front, list.front()); | |
197 EXPECT_EQ(sqs_back, list.back()); | |
198 EXPECT_FALSE(list.empty()); | |
199 | |
200 list.clear(); | |
201 EXPECT_TRUE(list.empty()); | |
202 EXPECT_EQ(0u, list.size()); | |
203 | |
204 size = 3; | |
205 sqs_front = list.AllocateAndConstruct<SharedQuadState>(); | |
206 list.AllocateAndConstruct<SharedQuadState>(); | |
207 sqs_back = list.AllocateAndConstruct<SharedQuadState>(); | |
208 | |
209 EXPECT_EQ(size, list.size()); | |
210 EXPECT_EQ(sqs_front, list.front()); | |
211 EXPECT_EQ(sqs_back, list.back()); | |
212 EXPECT_FALSE(list.empty()); | |
213 } | |
214 | |
215 // This test is used to test when there is more than one allocation needed | |
216 // for, ListContainer can still perform like normal vector. | |
217 TEST(ListContainerTest, | |
218 SimpleInsertionTriggerMoreThanOneAllocationSharedQuadState) { | |
219 ListContainer<SharedQuadState> list(sizeof(SharedQuadState), 2); | |
220 std::vector<SharedQuadState*> sqs_list; | |
221 size_t size = 10; | |
222 for (size_t i = 0; i < size; ++i) { | |
223 sqs_list.push_back(list.AllocateAndConstruct<SharedQuadState>()); | |
224 } | |
225 EXPECT_EQ(size, list.size()); | |
226 | |
227 ListContainer<SharedQuadState>::Iterator iter = list.begin(); | |
228 for (std::vector<SharedQuadState*>::const_iterator sqs_iter = | |
229 sqs_list.begin(); | |
230 sqs_iter != sqs_list.end(); | |
231 ++sqs_iter) { | |
232 EXPECT_EQ(*sqs_iter, *iter); | |
233 ++iter; | |
234 } | |
235 } | |
236 | |
237 TEST(ListContainerTest, | |
238 CorrectAllocationSizeForMoreThanOneAllocationSharedQuadState) { | |
239 // Constructor sets the allocation size to 2. Every time ListContainer needs | |
240 // to allocate again, it doubles allocation size. In this test, 10 elements is | |
241 // needed, thus ListContainerShould allocate spaces 2, 4 and 8 elements. | |
242 ListContainer<SharedQuadState> list(sizeof(SharedQuadState), 2); | |
243 std::vector<SharedQuadState*> sqs_list; | |
244 size_t size = 10; | |
245 for (size_t i = 0; i < size; ++i) { | |
246 // Before asking for a new element, space available without another | |
247 // allocation follows. | |
248 switch (i) { | |
249 case 2: | |
250 case 6: | |
251 EXPECT_EQ(0u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
252 break; | |
253 case 1: | |
254 case 5: | |
255 EXPECT_EQ(1u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
256 break; | |
257 case 0: | |
258 case 4: | |
259 EXPECT_EQ(2u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
260 break; | |
261 case 3: | |
262 EXPECT_EQ(3u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
263 break; | |
264 case 9: | |
265 EXPECT_EQ(5u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
266 break; | |
267 case 8: | |
268 EXPECT_EQ(6u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
269 break; | |
270 case 7: | |
271 EXPECT_EQ(7u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
272 break; | |
273 default: | |
274 break; | |
275 } | |
276 sqs_list.push_back(list.AllocateAndConstruct<SharedQuadState>()); | |
277 // After asking for a new element, space available without another | |
278 // allocation follows. | |
279 switch (i) { | |
280 case 1: | |
281 case 5: | |
282 EXPECT_EQ(0u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
283 break; | |
284 case 0: | |
285 case 4: | |
286 EXPECT_EQ(1u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
287 break; | |
288 case 3: | |
289 EXPECT_EQ(2u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
290 break; | |
291 case 2: | |
292 EXPECT_EQ(3u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
293 break; | |
294 case 9: | |
295 EXPECT_EQ(4u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
296 break; | |
297 case 8: | |
298 EXPECT_EQ(5u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
299 break; | |
300 case 7: | |
301 EXPECT_EQ(6u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
302 break; | |
303 case 6: | |
304 EXPECT_EQ(7u, list.AvailableSizeWithoutAnotherAllocationForTesting()); | |
305 break; | |
306 default: | |
307 break; | |
308 } | |
309 } | |
310 EXPECT_EQ(size, list.size()); | |
311 | |
312 ListContainer<SharedQuadState>::Iterator iter = list.begin(); | |
313 for (std::vector<SharedQuadState*>::const_iterator sqs_iter = | |
314 sqs_list.begin(); | |
315 sqs_iter != sqs_list.end(); | |
316 ++sqs_iter) { | |
317 EXPECT_EQ(*sqs_iter, *iter); | |
318 ++iter; | |
319 } | |
320 } | |
321 | |
322 TEST(ListContainerTest, SimpleIterationSharedQuadState) { | |
323 ListContainer<SharedQuadState> list; | |
324 std::vector<SharedQuadState*> sqs_list; | |
325 size_t size = 10; | |
326 for (size_t i = 0; i < size; ++i) { | |
327 sqs_list.push_back(list.AllocateAndConstruct<SharedQuadState>()); | |
328 } | |
329 EXPECT_EQ(size, list.size()); | |
330 | |
331 size_t num_iters_in_list = 0; | |
332 { | |
333 std::vector<SharedQuadState*>::const_iterator sqs_iter = sqs_list.begin(); | |
334 for (ListContainer<SharedQuadState>::Iterator iter = list.begin(); | |
335 iter != list.end(); | |
336 ++iter) { | |
337 EXPECT_EQ(*sqs_iter, *iter); | |
338 ++num_iters_in_list; | |
339 ++sqs_iter; | |
340 } | |
341 } | |
342 | |
343 size_t num_iters_in_vector = 0; | |
344 { | |
345 ListContainer<SharedQuadState>::Iterator iter = list.begin(); | |
346 for (std::vector<SharedQuadState*>::const_iterator sqs_iter = | |
347 sqs_list.begin(); | |
348 sqs_iter != sqs_list.end(); | |
349 ++sqs_iter) { | |
350 EXPECT_EQ(*sqs_iter, *iter); | |
351 ++num_iters_in_vector; | |
352 ++iter; | |
353 } | |
354 } | |
355 | |
356 EXPECT_EQ(num_iters_in_vector, num_iters_in_list); | |
357 } | |
358 | |
359 TEST(ListContainerTest, SimpleConstIteratorIterationSharedQuadState) { | |
360 ListContainer<SharedQuadState> list; | |
361 std::vector<const SharedQuadState*> sqs_list; | |
362 size_t size = 10; | |
363 for (size_t i = 0; i < size; ++i) { | |
364 sqs_list.push_back(list.AllocateAndConstruct<SharedQuadState>()); | |
365 } | |
366 EXPECT_EQ(size, list.size()); | |
367 | |
368 { | |
369 std::vector<const SharedQuadState*>::const_iterator sqs_iter = | |
370 sqs_list.begin(); | |
371 for (ListContainer<SharedQuadState>::ConstIterator iter = list.begin(); | |
372 iter != list.end(); | |
373 ++iter) { | |
374 EXPECT_TRUE(isConstSharedQuadStatePointer(*iter)); | |
375 EXPECT_EQ(*sqs_iter, *iter); | |
376 ++sqs_iter; | |
377 } | |
378 } | |
379 | |
380 { | |
381 std::vector<const SharedQuadState*>::const_iterator sqs_iter = | |
382 sqs_list.begin(); | |
383 for (ListContainer<SharedQuadState>::Iterator iter = list.begin(); | |
384 iter != list.end(); | |
385 ++iter) { | |
386 EXPECT_FALSE(isConstSharedQuadStatePointer(*iter)); | |
387 EXPECT_EQ(*sqs_iter, *iter); | |
388 ++sqs_iter; | |
389 } | |
390 } | |
391 | |
392 { | |
393 ListContainer<SharedQuadState>::ConstIterator iter = list.begin(); | |
394 for (std::vector<const SharedQuadState*>::const_iterator sqs_iter = | |
395 sqs_list.begin(); | |
396 sqs_iter != sqs_list.end(); | |
397 ++sqs_iter) { | |
398 EXPECT_EQ(*sqs_iter, *iter); | |
399 ++iter; | |
400 } | |
401 } | |
402 } | |
403 | |
404 TEST(ListContainerTest, SimpleReverseInsertionSharedQuadState) { | |
405 ListContainer<SharedQuadState> list; | |
406 std::vector<SharedQuadState*> sqs_list; | |
407 size_t size = 10; | |
408 for (size_t i = 0; i < size; ++i) { | |
409 sqs_list.push_back(list.AllocateAndConstruct<SharedQuadState>()); | |
410 } | |
411 EXPECT_EQ(size, list.size()); | |
412 | |
413 { | |
414 std::vector<SharedQuadState*>::const_reverse_iterator sqs_iter = | |
415 sqs_list.rbegin(); | |
416 for (ListContainer<SharedQuadState>::ReverseIterator iter = list.rbegin(); | |
417 iter != list.rend(); | |
418 ++iter) { | |
419 EXPECT_EQ(*sqs_iter, *iter); | |
420 ++sqs_iter; | |
421 } | |
422 } | |
423 | |
424 { | |
425 ListContainer<SharedQuadState>::ReverseIterator iter = list.rbegin(); | |
426 for (std::vector<SharedQuadState*>::reverse_iterator sqs_iter = | |
427 sqs_list.rbegin(); | |
428 sqs_iter != sqs_list.rend(); | |
429 ++sqs_iter) { | |
430 EXPECT_EQ(*sqs_iter, *iter); | |
431 ++iter; | |
432 } | |
433 } | |
434 } | |
435 | |
436 TEST(ListContainerTest, SimpleDeletion) { | |
437 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
438 std::vector<SimpleDrawQuad*> sdq_list; | |
439 size_t size = 10; | |
440 for (size_t i = 0; i < size; ++i) { | |
441 sdq_list.push_back(list.AllocateAndConstruct<SimpleDrawQuad>()); | |
442 sdq_list.back()->set_value(i); | |
443 } | |
444 EXPECT_EQ(size, list.size()); | |
445 | |
446 list.EraseAndInvalidateAllPointers(list.begin()); | |
447 --size; | |
448 EXPECT_EQ(size, list.size()); | |
449 int i = 1; | |
450 for (ListContainer<DrawQuad>::Iterator iter = list.begin(); | |
451 iter != list.end(); | |
452 ++iter) { | |
453 EXPECT_EQ(i, static_cast<SimpleDrawQuad*>(*iter)->get_value()); | |
454 ++i; | |
455 } | |
456 } | |
457 | |
458 TEST(ListContainerTest, SimpleIterationAndManipulation) { | |
459 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
460 std::vector<SimpleDrawQuad*> sdq_list; | |
461 size_t size = 10; | |
462 for (size_t i = 0; i < size; ++i) { | |
463 SimpleDrawQuad* simple_dq = list.AllocateAndConstruct<SimpleDrawQuad>(); | |
464 sdq_list.push_back(simple_dq); | |
465 } | |
466 EXPECT_EQ(size, list.size()); | |
467 | |
468 ListContainer<DrawQuad>::Iterator iter = list.begin(); | |
469 for (int i = 0; i < 10; ++i) { | |
470 static_cast<SimpleDrawQuad*>(*iter)->set_value(i); | |
471 ++iter; | |
472 } | |
473 | |
474 int i = 0; | |
475 for (std::vector<SimpleDrawQuad*>::const_iterator sdq_iter = sdq_list.begin(); | |
476 sdq_iter < sdq_list.end(); | |
477 ++sdq_iter) { | |
478 EXPECT_EQ(i, (*sdq_iter)->get_value()); | |
479 ++i; | |
480 } | |
481 } | |
482 | |
483 TEST(ListContainerTest, SimpleManipulationWithIndexSimpleDrawQuad) { | |
484 ListContainer<DrawQuad> list(LargestDrawQuadSize()); | |
485 std::vector<SimpleDrawQuad*> dq_list; | |
486 size_t size = 10; | |
487 for (size_t i = 0; i < size; ++i) { | |
488 dq_list.push_back(list.AllocateAndConstruct<SimpleDrawQuad>()); | |
489 } | |
490 EXPECT_EQ(size, list.size()); | |
491 | |
492 for (size_t i = 0; i < size; ++i) { | |
493 static_cast<SimpleDrawQuad*>(list.ElementAt(i))->set_value(i); | |
494 } | |
495 | |
496 int i = 0; | |
497 for (std::vector<SimpleDrawQuad*>::const_iterator dq_iter = dq_list.begin(); | |
498 dq_iter != dq_list.end(); | |
499 ++dq_iter, ++i) { | |
500 EXPECT_EQ(i, (*dq_iter)->get_value()); | |
501 } | |
502 } | |
503 | |
504 TEST(ListContainerTest, | |
505 SimpleManipulationWithIndexMoreThanOneAllocationSimpleDrawQuad) { | |
506 ListContainer<DrawQuad> list(LargestDrawQuadSize(), 2); | |
507 std::vector<SimpleDrawQuad*> dq_list; | |
508 size_t size = 10; | |
509 for (size_t i = 0; i < size; ++i) { | |
510 dq_list.push_back(list.AllocateAndConstruct<SimpleDrawQuad>()); | |
511 } | |
512 EXPECT_EQ(size, list.size()); | |
513 | |
514 for (size_t i = 0; i < size; ++i) { | |
515 static_cast<SimpleDrawQuad*>(list.ElementAt(i))->set_value(i); | |
516 } | |
517 | |
518 int i = 0; | |
519 for (std::vector<SimpleDrawQuad*>::const_iterator dq_iter = dq_list.begin(); | |
520 dq_iter != dq_list.end(); | |
521 ++dq_iter, ++i) { | |
522 EXPECT_EQ(i, (*dq_iter)->get_value()); | |
523 } | |
524 } | |
525 | |
526 TEST(ListContainerTest, | |
527 SimpleIterationAndReverseIterationWithIndexSharedQuadState) { | |
528 ListContainer<SharedQuadState> list; | |
529 std::vector<SharedQuadState*> sqs_list; | |
530 size_t size = 10; | |
531 for (size_t i = 0; i < size; ++i) { | |
532 sqs_list.push_back(list.AllocateAndConstruct<SharedQuadState>()); | |
533 } | |
534 EXPECT_EQ(size, list.size()); | |
535 | |
536 size_t i = 0; | |
537 for (ListContainer<SharedQuadState>::Iterator iter = list.begin(); | |
538 iter != list.end(); | |
539 ++iter) { | |
540 EXPECT_EQ(i, iter.index()); | |
541 ++i; | |
542 } | |
543 | |
544 i = 0; | |
545 for (ListContainer<SharedQuadState>::ReverseIterator iter = list.rbegin(); | |
546 iter != list.rend(); | |
547 ++iter) { | |
548 EXPECT_EQ(i, iter.index()); | |
549 ++i; | |
550 } | |
551 } | |
552 | |
553 } // namespace | |
554 } // namespace cc | |
OLD | NEW |