diff options
author | cdalton <cdalton@nvidia.com> | 2015-04-16 10:42:49 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-16 10:42:49 -0700 |
commit | 72badbd99e2321bfbcb22f78218bbafa71af4698 (patch) | |
tree | b8bbe4a69fdb0d3bc584fdfc30d69e3c84ca2fd1 /tests | |
parent | bdb0bf5f8858043878d8a4fa8130c6c87bef3fd4 (diff) |
Add ReverseIter to GrTRecorder
BUG=skia:
Review URL: https://codereview.chromium.org/1035083004
Diffstat (limited to 'tests')
-rw-r--r-- | tests/GrTRecorderTest.cpp | 69 |
1 files changed, 49 insertions, 20 deletions
diff --git a/tests/GrTRecorderTest.cpp b/tests/GrTRecorderTest.cpp index fde70ac8e8..cef870fa90 100644 --- a/tests/GrTRecorderTest.cpp +++ b/tests/GrTRecorderTest.cpp @@ -5,14 +5,15 @@ * found in the LICENSE file. */ -#if SK_SUPPORT_GPU - -#include "GrTRecorder.h" #include "SkMatrix.h" #include "SkRandom.h" #include "SkString.h" #include "Test.h" +#if SK_SUPPORT_GPU + +#include "GrTRecorder.h" + //////////////////////////////////////////////////////////////////////////////// static int activeRecorderItems = 0; @@ -101,6 +102,15 @@ static void test_extra_data(skiatest::Reporter* reporter) { } REPORTER_ASSERT(reporter, !iter.next()); + ExtraData::Recorder::ReverseIter reverseIter(recorder); + for (int i = 99; i >= 0; --i) { + REPORTER_ASSERT(reporter, i == reverseIter->fData); + for (int j = 0; j < i; j++) { + REPORTER_ASSERT(reporter, i == reverseIter->extraData()[j]); + } + REPORTER_ASSERT(reporter, reverseIter.previous() == !!i); + } + recorder.reset(); REPORTER_ASSERT(reporter, 0 == activeRecorderItems); } @@ -197,19 +207,20 @@ public: virtual ClassType getType() { return kSubclassEmpty_ClassType; } }; +class Order { +public: + Order() { this->reset(); } + void reset() { fCurrent = 0; } + ClassType next() { + fCurrent = 1664525 * fCurrent + 1013904223; + return static_cast<ClassType>(fCurrent % kNumClassTypes); + } +private: + uint32_t fCurrent; +}; +static void test_subclasses_iters(skiatest::Reporter*, Order&, Base::Recorder::Iter&, + Base::Recorder::ReverseIter&, int = 0); static void test_subclasses(skiatest::Reporter* reporter) { - class Order { - public: - Order() { this->reset(); } - void reset() { fCurrent = 0; } - ClassType next() { - fCurrent = 1664525 * fCurrent + 1013904223; - return static_cast<ClassType>(fCurrent % kNumClassTypes); - } - private: - uint32_t fCurrent; - }; - Base::Recorder recorder(1024); Order order; @@ -244,15 +255,33 @@ static void test_subclasses(skiatest::Reporter* reporter) { order.reset(); Base::Recorder::Iter iter(recorder); - for (int i = 0; i < 1000; ++i) { - REPORTER_ASSERT(reporter, iter.next()); - REPORTER_ASSERT(reporter, order.next() == iter->getType()); - iter->validate(reporter); - } + Base::Recorder::ReverseIter reverseIter(recorder); + + test_subclasses_iters(reporter, order, iter, reverseIter); + REPORTER_ASSERT(reporter, !iter.next()); // Don't reset the recorder. It should automatically destruct all its items. } +static void test_subclasses_iters(skiatest::Reporter* reporter, Order& order, + Base::Recorder::Iter& iter, + Base::Recorder::ReverseIter& reverseIter, int i) { + if (i >= 1000) { + return; + } + + ClassType classType = order.next(); + + REPORTER_ASSERT(reporter, iter.next()); + REPORTER_ASSERT(reporter, classType == iter->getType()); + iter->validate(reporter); + + test_subclasses_iters(reporter, order, iter, reverseIter, i + 1); + + REPORTER_ASSERT(reporter, classType == reverseIter->getType()); + reverseIter->validate(reporter); + REPORTER_ASSERT(reporter, reverseIter.previous() == !!i); +} DEF_GPUTEST(GrTRecorder, reporter, factory) { test_empty_back_and_pop(reporter); |