aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/RegionTest.cpp
diff options
context:
space:
mode:
authorGravatar mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-04-28 20:09:19 +0000
committerGravatar mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-04-28 20:09:19 +0000
commit67c3184a67c66e2e6f3d24ba6bccf1f3b32a5b7b (patch)
tree1ba82d9bc0f072afac0d9cf5c141bae554bad4f2 /tests/RegionTest.cpp
parentded44149856373072a8c6d2b2eacb213a1273a6e (diff)
add test for contains and intersects, in advance of optimization work
git-svn-id: http://skia.googlecode.com/svn/trunk@3787 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'tests/RegionTest.cpp')
-rw-r--r--tests/RegionTest.cpp61
1 files changed, 61 insertions, 0 deletions
diff --git a/tests/RegionTest.cpp b/tests/RegionTest.cpp
index a1bf6994df..c1efe985dd 100644
--- a/tests/RegionTest.cpp
+++ b/tests/RegionTest.cpp
@@ -9,6 +9,64 @@
#include "SkRegion.h"
#include "SkRandom.h"
+enum {
+ W = 256,
+ H = 256
+};
+
+static SkIRect randRect(SkRandom& rand) {
+ int x = rand.nextU() % W;
+ int y = rand.nextU() % H;
+ int w = rand.nextU() % W;
+ int h = rand.nextU() % H;
+ return SkIRect::MakeXYWH(x, y, w >> 1, h >> 1);
+}
+
+static void randRgn(SkRandom& rand, SkRegion* rgn, int n) {
+ rgn->setEmpty();
+ for (int i = 0; i < n; ++i) {
+ rgn->op(randRect(rand), SkRegion::kUnion_Op);
+ }
+}
+
+static bool slow_contains(const SkRegion& outer, const SkRegion& inner) {
+ SkRegion tmp;
+ tmp.op(outer, inner, SkRegion::kUnion_Op);
+ return outer == tmp;
+}
+
+static bool slow_intersects(const SkRegion& outer, const SkRegion& inner) {
+ SkRegion tmp;
+ return tmp.op(outer, inner, SkRegion::kIntersect_Op);
+}
+
+static void contains_proc(skiatest::Reporter* reporter,
+ const SkRegion& a, const SkRegion& b) {
+ bool c0 = a.contains(b);
+ bool c1 = slow_contains(a, b);
+ REPORTER_ASSERT(reporter, c0 == c1);
+}
+
+static void intersects_proc(skiatest::Reporter* reporter,
+ const SkRegion& a, const SkRegion& b) {
+ bool c0 = a.intersects(b);
+ bool c1 = slow_intersects(a, b);
+ REPORTER_ASSERT(reporter, c0 == c1);
+}
+
+static void test_proc(skiatest::Reporter* reporter,
+ void (*proc)(skiatest::Reporter*,
+ const SkRegion& a, const SkRegion&)) {
+ SkRandom rand;
+ for (int i = 0; i < 10000; ++i) {
+ SkRegion outer;
+ randRgn(rand, &outer, 8);
+ SkRegion inner;
+ randRgn(rand, &inner, 2);
+ proc(reporter, outer, inner);
+ }
+}
+
static void rand_rect(SkIRect* rect, SkRandom& rand) {
int bits = 6;
int shift = 32 - bits;
@@ -64,6 +122,9 @@ static void TestRegion(skiatest::Reporter* reporter) {
}
REPORTER_ASSERT(reporter, test_rects(rect, N));
}
+
+ test_proc(reporter, contains_proc);
+ test_proc(reporter, intersects_proc);
}
#include "TestClassDef.h"