diff options
author | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-04-28 20:09:19 +0000 |
---|---|---|
committer | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-04-28 20:09:19 +0000 |
commit | 67c3184a67c66e2e6f3d24ba6bccf1f3b32a5b7b (patch) | |
tree | 1ba82d9bc0f072afac0d9cf5c141bae554bad4f2 /tests/RegionTest.cpp | |
parent | ded44149856373072a8c6d2b2eacb213a1273a6e (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.cpp | 61 |
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" |