| /* | |
| * Copyright 2021 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "experimental/graphite/src/geom/IntersectionTree.h" | |
| #include "include/utils/SkRandom.h" | |
| #include "tests/Test.h" | |
| namespace skgpu { | |
| class SimpleIntersectionTree { | |
| public: | |
| bool add(SkRect rect) { | |
| for (const SkRect& r : fRects) { | |
| if (r.intersects(rect)) { | |
| return false; | |
| } | |
| } | |
| fRects.push_back(rect); | |
| return true; | |
| } | |
| private: | |
| std::vector<SkRect> fRects; | |
| }; | |
| #define CHECK(A) REPORTER_ASSERT(reporter, A) | |
| DEF_GRAPHITE_TEST(skgpu_IntersectionTree, reporter) { | |
| SkRandom rand; | |
| { | |
| SimpleIntersectionTree simpleTree; | |
| IntersectionTree tree; | |
| for (int i = 0; i < 1000; ++i) { | |
| Rect rect = Rect::XYWH(rand.nextRangeF(0, 500), | |
| rand.nextRangeF(0, 500), | |
| rand.nextRangeF(0, 70), | |
| rand.nextRangeF(0, 70)); | |
| CHECK(tree.add(rect) == simpleTree.add({rect.left(), | |
| rect.top(), | |
| rect.right(), | |
| rect.bot()})); | |
| } | |
| } | |
| { | |
| SimpleIntersectionTree simpleTree; | |
| IntersectionTree tree; | |
| for (int i = 0; i < 100; ++i) { | |
| Rect rect = Rect::XYWH(rand.nextRangeF(0, 500), | |
| rand.nextRangeF(0, 500), | |
| rand.nextRangeF(0, 200), | |
| rand.nextRangeF(0, 200)); | |
| CHECK(tree.add(rect) == simpleTree.add({rect.left(), | |
| rect.top(), | |
| rect.right(), | |
| rect.bot()})); | |
| } | |
| } | |
| { | |
| SimpleIntersectionTree simpleTree; | |
| IntersectionTree tree; | |
| CHECK(tree.add(Rect(float2(-std::numeric_limits<float>::infinity()), | |
| float2(std::numeric_limits<float>::infinity())))); | |
| CHECK(!tree.add(Rect::WH(1,1))); | |
| CHECK(!tree.add(Rect::WH(1,std::numeric_limits<float>::infinity()))); | |
| CHECK(tree.add(Rect::WH(0, 0))); | |
| CHECK(tree.add(Rect::WH(-1, 1))); | |
| CHECK(tree.add(Rect::WH(1, std::numeric_limits<float>::quiet_NaN()))); | |
| } | |
| } | |
| } // namespace skgpu |