blob: 3b8991addac90820c9d47c2084eed01138b6b785 [file] [log] [blame]
reed@google.com4c09d5c2011-02-22 13:16:38 +00001#include "Test.h"
2#include "SkDeque.h"
3
4static 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
25static 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
38static void TestDeque(skiatest::Reporter* reporter) {
39 SkDeque deq(sizeof(int));
40 int i;
41
42 assert_count(reporter, deq, 0);
43 for (i = 1; i <= 10; i++) {
44 *(int*)deq.push_front() = i;
45 }
46 assert_count(reporter, deq, 10);
47 assert_f2biter(reporter, deq, 10, 1);
48
49 for (i = 0; i < 5; i++) {
50 deq.pop_front();
51 }
52 assert_count(reporter, deq, 5);
53 assert_f2biter(reporter, deq, 5, 1);
54
55 for (i = 0; i < 5; i++) {
56 deq.pop_front();
57 }
58 assert_count(reporter, deq, 0);
59}
60
61#include "TestClassDef.h"
62DEFINE_TESTCLASS("Deque", TestDequeClass, TestDeque)