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
This commit is contained in:
mike@reedtribe.org 2012-04-28 20:09:19 +00:00
parent ded4414985
commit 67c3184a67

View File

@ -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"