Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2013 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 #include "PathOpsTestCommon.h"
      8 #include "SkPathOpsBounds.h"
      9 #include "SkPathOpsCurve.h"
     10 #include "Test.h"
     11 
     12 static const SkRect sectTests[][2] = {
     13     {{2, 0, 4, 1}, {4, 0, 6, 1}},
     14     {{2, 0, 4, 1}, {3, 0, 5, 1}},
     15     {{2, 0, 4, 1}, {3, 0, 5, 0}},
     16     {{2, 0, 4, 1}, {3, 1, 5, 2}},
     17     {{2, 1, 4, 2}, {1, 0, 5, 3}},
     18     {{2, 1, 5, 3}, {3, 1, 4, 2}},
     19     {{2, 0, 4, 1}, {3, 0, 3, 0}},  // intersecting an empty bounds is OK
     20     {{2, 0, 4, 1}, {4, 1, 5, 2}},  // touching just on a corner is OK
     21 };
     22 
     23 static const size_t sectTestsCount = SK_ARRAY_COUNT(sectTests);
     24 
     25 static const SkRect noSectTests[][2] = {
     26     {{2, 0, 4, 1}, {5, 0, 6, 1}},
     27     {{2, 0, 4, 1}, {3, 2, 5, 2}},
     28 };
     29 
     30 static const size_t noSectTestsCount = SK_ARRAY_COUNT(noSectTests);
     31 
     32 DEF_TEST(PathOpsBounds, reporter) {
     33     for (size_t index = 0; index < sectTestsCount; ++index) {
     34         const SkPathOpsBounds& bounds1 = static_cast<const SkPathOpsBounds&>(sectTests[index][0]);
     35         SkASSERT(ValidBounds(bounds1));
     36         const SkPathOpsBounds& bounds2 = static_cast<const SkPathOpsBounds&>(sectTests[index][1]);
     37         SkASSERT(ValidBounds(bounds2));
     38         bool touches = SkPathOpsBounds::Intersects(bounds1, bounds2);
     39         REPORTER_ASSERT(reporter, touches);
     40     }
     41     for (size_t index = 0; index < noSectTestsCount; ++index) {
     42         const SkPathOpsBounds& bounds1 = static_cast<const SkPathOpsBounds&>(noSectTests[index][0]);
     43         SkASSERT(ValidBounds(bounds1));
     44         const SkPathOpsBounds& bounds2 = static_cast<const SkPathOpsBounds&>(noSectTests[index][1]);
     45         SkASSERT(ValidBounds(bounds2));
     46         bool touches = SkPathOpsBounds::Intersects(bounds1, bounds2);
     47         REPORTER_ASSERT(reporter, !touches);
     48     }
     49     SkPathOpsBounds bounds;
     50     bounds.setEmpty();
     51     bounds.add(1, 2, 3, 4);
     52     SkPathOpsBounds expected;
     53     expected.set(0, 0, 3, 4);
     54     REPORTER_ASSERT(reporter, bounds == expected);
     55     bounds.setEmpty();
     56     SkPathOpsBounds ordinal;
     57     ordinal.set(1, 2, 3, 4);
     58     bounds.add(ordinal);
     59     REPORTER_ASSERT(reporter, bounds == expected);
     60     bounds.setEmpty();
     61     SkDPoint botRight = {3, 4};
     62     bounds.add(botRight);
     63     REPORTER_ASSERT(reporter, bounds == expected);
     64     const SkPoint curvePts[] = {{0, 0}, {1, 2}, {3, 4}, {5, 6}};
     65     SkDCurve curve;
     66     curve.fQuad.set(curvePts);
     67     curve.setQuadBounds(curvePts, 1, 0, 1, &bounds);
     68     expected.set(0, 0, 3, 4);
     69     REPORTER_ASSERT(reporter, bounds == expected);
     70     curve.fCubic.set(curvePts);
     71     curve.setCubicBounds(curvePts, 1, 0, 1, &bounds);
     72     expected.set(0, 0, 5, 6);
     73     REPORTER_ASSERT(reporter, bounds == expected);
     74 }
     75