From 097a3513535ad854c1b049c32c080ec875ab1411 Mon Sep 17 00:00:00 2001 From: "reed@android.com" Date: Tue, 13 Jul 2010 18:35:14 +0000 Subject: add SkRegion::setRects(), and its unit tests git-svn-id: http://skia.googlecode.com/svn/trunk@588 2bbb7eff-a529-9590-31e7-b0007b416f81 --- tests/RegionTest.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 tests/RegionTest.cpp (limited to 'tests/RegionTest.cpp') diff --git a/tests/RegionTest.cpp b/tests/RegionTest.cpp new file mode 100644 index 0000000000..ee34d8ba83 --- /dev/null +++ b/tests/RegionTest.cpp @@ -0,0 +1,63 @@ +#include "Test.h" +#include "SkRegion.h" +#include "SkRandom.h" + +static void rand_rect(SkIRect* rect, SkRandom& rand) { + int bits = 6; + int shift = 32 - bits; + rect->set(rand.nextU() >> shift, rand.nextU() >> shift, + rand.nextU() >> shift, rand.nextU() >> shift); + rect->sort(); +} + +static bool test_rects(const SkIRect rect[], int count) { + SkRegion rgn0, rgn1; + + for (int i = 0; i < count; i++) { + rgn0.op(rect[i], SkRegion::kUnion_Op); + } + rgn1.setRects(rect, count); + + if (rgn0 != rgn1) { + SkDebugf("\n"); + for (int i = 0; i < count; i++) { + SkDebugf(" { %d, %d, %d, %d },\n", + rect[i].fLeft, rect[i].fTop, + rect[i].fRight, rect[i].fBottom); + } + SkDebugf("\n"); + return false; + } + return true; +} + +static void TestRegion(skiatest::Reporter* reporter) { + const SkIRect r2[] = { + { 0, 0, 1, 1 }, + { 2, 2, 3, 3 }, + }; + REPORTER_ASSERT(reporter, test_rects(r2, SK_ARRAY_COUNT(r2))); + + const SkIRect rects[] = { + { 0, 0, 1, 2 }, + { 2, 1, 3, 3 }, + { 4, 0, 5, 1 }, + { 6, 0, 7, 4 }, + }; + REPORTER_ASSERT(reporter, test_rects(rects, SK_ARRAY_COUNT(rects))); + + SkRandom rand; + for (int i = 0; i < 1000; i++) { + SkRegion rgn0, rgn1; + + const int N = 8; + SkIRect rect[N]; + for (int j = 0; j < N; j++) { + rand_rect(&rect[j], rand); + } + REPORTER_ASSERT(reporter, test_rects(rect, N)); + } +} + +#include "TestClassDef.h" +DEFINE_TESTCLASS("Region", RegionTestClass, TestRegion) -- cgit v1.2.3