static void run_queries(skiatest::Reporter* reporter, SkRandom& rand, DataRect rects[], SkBBoxHierarchy& tree) { for (size_t i = 0; i < NUM_QUERIES; ++i) { SkTDArray<void*> hits; SkIRect query = random_rect(rand); tree.search(query, &hits); REPORTER_ASSERT(reporter, verify_query(query, rects, hits)); } }
static void run_queries(skiatest::Reporter* reporter, SkRandom& rand, SkRect rects[], const SkRTree& tree) { for (size_t i = 0; i < NUM_QUERIES; ++i) { SkTDArray<unsigned> hits; SkRect query = random_rect(rand); tree.search(query, &hits); REPORTER_ASSERT(reporter, verify_query(query, rects, hits)); } }
DEF_TEST(RTree, reporter) { int expectedDepthMin = -1; int tmp = NUM_RECTS; while (tmp > 0) { tmp -= static_cast<int>(pow(static_cast<double>(SkRTree::kMaxChildren), static_cast<double>(expectedDepthMin + 1))); ++expectedDepthMin; } int expectedDepthMax = -1; tmp = NUM_RECTS; while (tmp > 0) { tmp -= static_cast<int>(pow(static_cast<double>(SkRTree::kMinChildren), static_cast<double>(expectedDepthMax + 1))); ++expectedDepthMax; } SkRandom rand; SkAutoTMalloc<SkRect> rects(NUM_RECTS); for (size_t i = 0; i < NUM_ITERATIONS; ++i) { SkRTree rtree; REPORTER_ASSERT(reporter, 0 == rtree.getCount()); for (int j = 0; j < NUM_RECTS; j++) { rects[j] = random_rect(rand); } rtree.insert(rects.get(), NUM_RECTS); SkASSERT(rects); // SkRTree doesn't take ownership of rects. run_queries(reporter, rand, rects, rtree); REPORTER_ASSERT(reporter, NUM_RECTS == rtree.getCount()); REPORTER_ASSERT(reporter, expectedDepthMin <= rtree.getDepth() && expectedDepthMax >= rtree.getDepth()); } }
static void random_data_rects(SkRandom& rand, DataRect out[], int n) { for (int i = 0; i < n; ++i) { out[i].rect = random_rect(rand); out[i].data = reinterpret_cast<void*>(i); } }