ZLayout EDA Library v1.0.0
Advanced Electronic Design Automation Layout Library with Bilingual Documentation
Loading...
Searching...
No Matches
bench_quadtree.cpp
Go to the documentation of this file.
1
5
6#include <benchmark/benchmark.h>
9#include <random>
10
11using namespace zlayout::geometry;
12using namespace zlayout::spatial;
13
14// Benchmark QuadTree insertion performance
15static void BM_QuadTreeInsert(benchmark::State& state) {
16 Rectangle world_bounds(0, 0, 1000, 1000);
17 auto qt = QuadTree<Rectangle>(
18 world_bounds,
19 [](const Rectangle& rect) -> Rectangle { return rect; },
20 10, 6
21 );
22
23 std::random_device rd;
24 std::mt19937 gen(rd());
25 std::uniform_real_distribution<> dis(0.0, 900.0);
26
27 for (auto _ : state) {
28 Rectangle rect(dis(gen), dis(gen), 50, 50);
29 benchmark::DoNotOptimize(qt.insert(rect));
30 }
31
32 state.SetComplexityN(state.iterations());
33}
34BENCHMARK(BM_QuadTreeInsert)->Range(8, 8<<10)->Complexity();
35
36// Benchmark QuadTree query performance
37static void BM_QuadTreeQuery(benchmark::State& state) {
38 Rectangle world_bounds(0, 0, 1000, 1000);
39 auto qt = QuadTree<Rectangle>(
40 world_bounds,
41 [](const Rectangle& rect) -> Rectangle { return rect; },
42 10, 6
43 );
44
45 // Pre-populate quadtree
46 std::random_device rd;
47 std::mt19937 gen(42); // Fixed seed for consistency
48 std::uniform_real_distribution<> dis(0.0, 900.0);
49
50 for (int i = 0; i < state.range(0); ++i) {
51 Rectangle rect(dis(gen), dis(gen), 50, 50);
52 qt.insert(rect);
53 }
54
55 gen.seed(42); // Reset for consistent queries
56 for (auto _ : state) {
57 Rectangle query_rect(dis(gen), dis(gen), 100, 100);
58 auto results = qt.query_range(query_rect);
59 benchmark::DoNotOptimize(results);
60 }
61
62 state.SetComplexityN(state.range(0));
63}
64BENCHMARK(BM_QuadTreeQuery)->Range(8, 8<<10)->Complexity();
65
static void BM_QuadTreeInsert(benchmark::State &state)
BENCHMARK_MAIN()
static void BM_QuadTreeQuery(benchmark::State &state)
BENCHMARK(BM_QuadTreeInsert) -> Range(8, 8<< 10) ->Complexity()
Axis-aligned rectangle for bounding boxes and simple EDA components.
Definition rectangle.hpp:26
Quadtree spatial index for efficient range and intersection queries.
Definition quadtree.hpp:120
QuadTree spatial indexing for efficient geometric queries.
Axis-aligned rectangle class for bounding boxes and simple components.