|  | 
 | /* | 
 |  * Copyright 2011 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 | #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) |