1 #include "Test.h" 2 #include "SkDeque.h" 3 4 static void assert_count(skiatest::Reporter* reporter, const SkDeque& deq, int count) { 5 if (0 == count) { 6 REPORTER_ASSERT(reporter, deq.empty()); 7 REPORTER_ASSERT(reporter, 0 == deq.count()); 8 REPORTER_ASSERT(reporter, sizeof(int) == deq.elemSize()); 9 REPORTER_ASSERT(reporter, NULL == deq.front()); 10 REPORTER_ASSERT(reporter, NULL == deq.back()); 11 } else { 12 REPORTER_ASSERT(reporter, !deq.empty()); 13 REPORTER_ASSERT(reporter, count == deq.count()); 14 REPORTER_ASSERT(reporter, sizeof(int) == deq.elemSize()); 15 REPORTER_ASSERT(reporter, NULL != deq.front()); 16 REPORTER_ASSERT(reporter, NULL != deq.back()); 17 if (1 == count) { 18 REPORTER_ASSERT(reporter, deq.back() == deq.front()); 19 } else { 20 REPORTER_ASSERT(reporter, deq.back() != deq.front()); 21 } 22 } 23 } 24 25 static void assert_f2biter(skiatest::Reporter* reporter, const SkDeque& deq, 26 int max, int min) { 27 SkDeque::F2BIter iter(deq); 28 void* ptr; 29 30 int value = max; 31 while ((ptr = iter.next()) != NULL) { 32 REPORTER_ASSERT(reporter, value == *(int*)ptr); 33 value -= 1; 34 } 35 REPORTER_ASSERT(reporter, value+1 == min); 36 } 37 38 static void TestDeque(skiatest::Reporter* reporter) { 39 SkDeque deq(sizeof(int)); 40 int i; 41 42 // test pushing on the front 43 44 assert_count(reporter, deq, 0); 45 for (i = 1; i <= 10; i++) { 46 *(int*)deq.push_front() = i; 47 } 48 assert_count(reporter, deq, 10); 49 assert_f2biter(reporter, deq, 10, 1); 50 51 for (i = 0; i < 5; i++) { 52 deq.pop_front(); 53 } 54 assert_count(reporter, deq, 5); 55 assert_f2biter(reporter, deq, 5, 1); 56 57 for (i = 0; i < 5; i++) { 58 deq.pop_front(); 59 } 60 assert_count(reporter, deq, 0); 61 62 // now test pushing on the back 63 64 for (i = 10; i >= 1; --i) { 65 *(int*)deq.push_back() = i; 66 } 67 assert_count(reporter, deq, 10); 68 assert_f2biter(reporter, deq, 10, 1); 69 70 for (i = 0; i < 5; i++) { 71 deq.pop_back(); 72 } 73 assert_count(reporter, deq, 5); 74 assert_f2biter(reporter, deq, 10, 6); 75 76 for (i = 0; i < 5; i++) { 77 deq.pop_back(); 78 } 79 assert_count(reporter, deq, 0); 80 81 // now tests pushing/poping on both ends 82 83 *(int*)deq.push_front() = 5; 84 *(int*)deq.push_back() = 4; 85 *(int*)deq.push_front() = 6; 86 *(int*)deq.push_back() = 3; 87 *(int*)deq.push_front() = 7; 88 *(int*)deq.push_back() = 2; 89 *(int*)deq.push_front() = 8; 90 *(int*)deq.push_back() = 1; 91 assert_count(reporter, deq, 8); 92 assert_f2biter(reporter, deq, 8, 1); 93 } 94 95 #include "TestClassDef.h" 96 DEFINE_TESTCLASS("Deque", TestDequeClass, TestDeque) 97