Index: tests/WindowRectanglesTest.cpp |
diff --git a/tests/WindowRectanglesTest.cpp b/tests/WindowRectanglesTest.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d569f1d7aa2320fdae27d3896e5cf9ec3a8819ec |
--- /dev/null |
+++ b/tests/WindowRectanglesTest.cpp |
@@ -0,0 +1,92 @@ |
+/* |
+ * Copyright 2016 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#include "SkTypes.h" |
+#include "Test.h" |
+ |
+#if SK_SUPPORT_GPU |
+ |
+#include "GrWindowRectangles.h" |
+ |
+static SkIRect next_irect(SkRandom& r) { |
+ return {r.nextS(), r.nextS(), r.nextS(), r.nextS()}; |
+} |
+ |
+DEF_TEST(WindowRectangles, reporter) { |
+ SkRandom r; |
+ |
+ SkIRect windowData[GrWindowRectangles::kMaxWindows]; |
+ for (int i = 0; i < GrWindowRectangles::kMaxWindows; ++i) { |
+ windowData[i] = next_irect(r); |
+ } |
+ |
+ GrWindowRectangles wr; |
+ for (int i = 0; i < GrWindowRectangles::kMaxWindows - 1; ++i) { |
+ REPORTER_ASSERT(reporter, wr.count() == i); |
+ REPORTER_ASSERT(reporter, !memcmp(wr.data(), windowData, i * sizeof(SkIRect))); |
+ |
+ GrWindowRectangles wr2(wr); |
+ REPORTER_ASSERT(reporter, wr2 == wr); |
+ REPORTER_ASSERT(reporter, wr2.mode() == wr.mode()); |
+ REPORTER_ASSERT(reporter, wr2.count() == wr.count()); |
+ REPORTER_ASSERT(reporter, !memcmp(wr2.data(), wr.data(), i * sizeof(SkIRect))); |
+ |
+ wr.addWindow(windowData[i]); |
+ } |
+ |
+ SkASSERT(wr.count() == GrWindowRectangles::kMaxWindows - 1); |
+ { |
+ GrWindowRectangles A(wr), B(wr); |
+ REPORTER_ASSERT(reporter, B == A); |
+ REPORTER_ASSERT(reporter, B.data() == A.data()); // Should use copy-on-write. |
+ |
+ A.addWindow(windowData[GrWindowRectangles::kMaxWindows - 1]); |
+ REPORTER_ASSERT(reporter, B.data() != A.data()); |
+ REPORTER_ASSERT(reporter, B != A); |
+ |
+ B.addWindow(SkIRect::MakeLargest()); |
+ REPORTER_ASSERT(reporter, B != A); |
+ |
+ REPORTER_ASSERT(reporter, !memcmp(A.data(), windowData, |
+ GrWindowRectangles::kMaxWindows * sizeof(SkIRect))); |
+ REPORTER_ASSERT(reporter, !memcmp(B.data(), windowData, |
+ (GrWindowRectangles::kMaxWindows - 1) * sizeof(SkIRect))); |
+ REPORTER_ASSERT(reporter, |
+ B.data()[GrWindowRectangles::kMaxWindows - 1] == SkIRect::MakeLargest()); |
+ } |
+ { |
+ GrWindowRectangles A(wr), B(wr); |
+ REPORTER_ASSERT(reporter, B == A); |
+ REPORTER_ASSERT(reporter, B.data() == A.data()); // Should use copy-on-write. |
+ |
+ A.addWindow(windowData[GrWindowRectangles::kMaxWindows - 1]); |
+ B.addWindow(windowData[GrWindowRectangles::kMaxWindows - 1]); |
+ REPORTER_ASSERT(reporter, B == A); |
+ REPORTER_ASSERT(reporter, B.data() != A.data()); |
+ REPORTER_ASSERT(reporter, !memcmp(B.data(), A.data(), |
+ GrWindowRectangles::kMaxWindows * sizeof(SkIRect))); |
+ REPORTER_ASSERT(reporter, !memcmp(A.data(), windowData, |
+ GrWindowRectangles::kMaxWindows * sizeof(SkIRect))); |
+ } |
+ |
+ GrWindowRectangles wrI(GrWindowRectangles::Mode::kInclusive); |
+ for (int i = 0; i < wr.count(); ++i) { |
+ wrI.addWindow(windowData[i]); |
+ } |
+ REPORTER_ASSERT(reporter, wrI != wr); |
+ REPORTER_ASSERT(reporter, wrI.mode() != wr.mode()); |
+ REPORTER_ASSERT(reporter, wrI.count() == wr.count()); |
+ REPORTER_ASSERT(reporter, !memcmp(wrI.data(), wr.data(), wr.count() * sizeof(SkIRect))); |
+ |
+ wr.reset(GrWindowRectangles::Mode::kInclusive); |
+ for (int i = 0; i < wrI.count(); ++i) { |
+ wr.addWindow(windowData[i]); |
+ } |
+ REPORTER_ASSERT(reporter, wrI == wr); |
+} |
+ |
+#endif |