| #include "Test.h" | 
 | #include "SkDeque.h" | 
 |  | 
 | static void assert_count(skiatest::Reporter* reporter, const SkDeque& deq, int count) { | 
 |     if (0 == count) { | 
 |         REPORTER_ASSERT(reporter, deq.empty()); | 
 |         REPORTER_ASSERT(reporter, 0 == deq.count()); | 
 |         REPORTER_ASSERT(reporter, sizeof(int) == deq.elemSize()); | 
 |         REPORTER_ASSERT(reporter, NULL == deq.front()); | 
 |         REPORTER_ASSERT(reporter, NULL == deq.back()); | 
 |     } else { | 
 |         REPORTER_ASSERT(reporter, !deq.empty()); | 
 |         REPORTER_ASSERT(reporter, count == deq.count()); | 
 |         REPORTER_ASSERT(reporter, sizeof(int) == deq.elemSize()); | 
 |         REPORTER_ASSERT(reporter, NULL != deq.front()); | 
 |         REPORTER_ASSERT(reporter, NULL != deq.back()); | 
 |         if (1 == count) { | 
 |             REPORTER_ASSERT(reporter, deq.back() == deq.front()); | 
 |         } else { | 
 |             REPORTER_ASSERT(reporter, deq.back() != deq.front()); | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | static void assert_f2biter(skiatest::Reporter* reporter, const SkDeque& deq, | 
 |                            int max, int min) { | 
 |     SkDeque::F2BIter iter(deq); | 
 |     void* ptr; | 
 |  | 
 |     int value = max; | 
 |     while ((ptr = iter.next()) != NULL) { | 
 |         REPORTER_ASSERT(reporter, value == *(int*)ptr); | 
 |         value -= 1; | 
 |     } | 
 |     REPORTER_ASSERT(reporter, value+1 == min); | 
 | } | 
 |  | 
 | static void TestDeque(skiatest::Reporter* reporter) { | 
 |     SkDeque deq(sizeof(int)); | 
 |     int i; | 
 |  | 
 |     // test pushing on the front | 
 |  | 
 |     assert_count(reporter, deq, 0); | 
 |     for (i = 1; i <= 10; i++) { | 
 |         *(int*)deq.push_front() = i; | 
 |     } | 
 |     assert_count(reporter, deq, 10); | 
 |     assert_f2biter(reporter, deq, 10, 1); | 
 |  | 
 |     for (i = 0; i < 5; i++) { | 
 |         deq.pop_front(); | 
 |     } | 
 |     assert_count(reporter, deq, 5); | 
 |     assert_f2biter(reporter, deq, 5, 1); | 
 |  | 
 |     for (i = 0; i < 5; i++) { | 
 |         deq.pop_front(); | 
 |     } | 
 |     assert_count(reporter, deq, 0); | 
 |  | 
 |     // now test pushing on the back | 
 |  | 
 |     for (i = 10; i >= 1; --i) { | 
 |         *(int*)deq.push_back() = i; | 
 |     } | 
 |     assert_count(reporter, deq, 10); | 
 |     assert_f2biter(reporter, deq, 10, 1); | 
 |  | 
 |     for (i = 0; i < 5; i++) { | 
 |         deq.pop_back(); | 
 |     } | 
 |     assert_count(reporter, deq, 5); | 
 |     assert_f2biter(reporter, deq, 10, 6); | 
 |  | 
 |     for (i = 0; i < 5; i++) { | 
 |         deq.pop_back(); | 
 |     } | 
 |     assert_count(reporter, deq, 0); | 
 |  | 
 |     // now tests pushing/poping on both ends | 
 |  | 
 |     *(int*)deq.push_front() = 5; | 
 |     *(int*)deq.push_back() = 4; | 
 |     *(int*)deq.push_front() = 6; | 
 |     *(int*)deq.push_back() = 3; | 
 |     *(int*)deq.push_front() = 7; | 
 |     *(int*)deq.push_back() = 2; | 
 |     *(int*)deq.push_front() = 8; | 
 |     *(int*)deq.push_back() = 1; | 
 |     assert_count(reporter, deq, 8); | 
 |     assert_f2biter(reporter, deq, 8, 1); | 
 | } | 
 |  | 
 | #include "TestClassDef.h" | 
 | DEFINE_TESTCLASS("Deque", TestDequeClass, TestDeque) |