Index: tests/GrTRecorderTest.cpp |
diff --git a/tests/GrTRecorderTest.cpp b/tests/GrTRecorderTest.cpp |
index 83bc445b5f19a7847d3bf9c317957f2bc9cb42c2..fde70ac8e8dc56b4914cb1c1811d8b5c19669a17 100644 |
--- a/tests/GrTRecorderTest.cpp |
+++ b/tests/GrTRecorderTest.cpp |
@@ -7,9 +7,10 @@ |
#if SK_SUPPORT_GPU |
+#include "GrTRecorder.h" |
#include "SkMatrix.h" |
+#include "SkRandom.h" |
#include "SkString.h" |
-#include "GrTRecorder.h" |
#include "Test.h" |
//////////////////////////////////////////////////////////////////////////////// |
@@ -25,22 +26,43 @@ private: |
int fValue; |
}; |
-static void test_empty_back(skiatest::Reporter* reporter) { |
- GrTRecorder<IntWrapper, int> recorder(0); |
- |
- REPORTER_ASSERT(reporter, recorder.empty()); |
- |
- for (int i = 0; i < 100; ++i) { |
- REPORTER_ASSERT(reporter, i == *GrNEW_APPEND_TO_RECORDER(recorder, IntWrapper, (i))); |
- REPORTER_ASSERT(reporter, !recorder.empty()); |
- REPORTER_ASSERT(reporter, i == recorder.back()); |
+static void test_empty_back_and_pop(skiatest::Reporter* reporter) { |
+ SkRandom rand; |
+ for (int data = 0; data < 2; ++data) { |
+ // Do this with different starting sizes to have different alignment between blocks and pops. |
+ // pops. We want to test poping the first guy off, guys in the middle of the block, and the |
+ // first guy on a non-head block. |
+ for (int j = 0; j < 8; ++j) { |
+ GrTRecorder<IntWrapper, int> recorder(j); |
+ |
+ REPORTER_ASSERT(reporter, recorder.empty()); |
+ |
+ for (int i = 0; i < 100; ++i) { |
+ if (data) { |
+ REPORTER_ASSERT(reporter, i == *GrNEW_APPEND_TO_RECORDER(recorder, |
+ IntWrapper, (i))); |
+ } else { |
+ REPORTER_ASSERT(reporter, i == |
+ *GrNEW_APPEND_WITH_DATA_TO_RECORDER(recorder, |
+ IntWrapper, (i), |
+ rand.nextULessThan(10))); |
+ } |
+ REPORTER_ASSERT(reporter, !recorder.empty()); |
+ REPORTER_ASSERT(reporter, i == recorder.back()); |
+ if (0 == (i % 7)) { |
+ recorder.pop_back(); |
+ if (i > 0) { |
+ REPORTER_ASSERT(reporter, !recorder.empty()); |
+ REPORTER_ASSERT(reporter, i-1 == recorder.back()); |
+ } |
+ } |
+ } |
+ |
+ REPORTER_ASSERT(reporter, !recorder.empty()); |
+ recorder.reset(); |
+ REPORTER_ASSERT(reporter, recorder.empty()); |
+ } |
} |
- |
- REPORTER_ASSERT(reporter, !recorder.empty()); |
- |
- recorder.reset(); |
- |
- REPORTER_ASSERT(reporter, recorder.empty()); |
} |
struct ExtraData { |
@@ -233,7 +255,7 @@ static void test_subclasses(skiatest::Reporter* reporter) { |
} |
DEF_GPUTEST(GrTRecorder, reporter, factory) { |
- test_empty_back(reporter); |
+ test_empty_back_and_pop(reporter); |
test_extra_data(reporter); |
REPORTER_ASSERT(reporter, 0 == activeRecorderItems); // test_extra_data should call reset(). |