///|
/// CLI diagnostic samples for MoonSTRtree.
fn main {
println("================================================================")
println(" MoonSTRtree: Packed Spatial Index Diagnostics ")
println("================================================================")
let distributions : Array[(String, Array[(@lib.Rect, Int)])] = [
("Uniform Random", @lib.generate_uniform(@lib.Rng::new(42), 1000)),
(
"Clustered Gaussian",
@lib.generate_clustered(@lib.Rng::new(43), 1000, num_clusters=8),
),
("Diagonal Degenerate", @lib.generate_diagonal(@lib.Rng::new(44), 1000)),
("Nested Concentric", @lib.generate_concentric(1000)),
("Regular Grid", @lib.generate_grid(25, 40)),
]
let query_window = @lib.Rect::new(200.0, 200.0, 600.0, 600.0)
for d = 0; d < distributions.length(); d = d + 1 {
let (name, items) = distributions[d]
let tree = @lib.StrTree::build(items, node_capacity=16)
let s = tree.stats()
let hits = tree.query(query_window)
let count_fast = tree.query_count(query_window)
let pt_hits = tree.query_point(400.0, 400.0)
let pt_count_fast = tree.query_point_count(400.0, 400.0)
let first_even = tree.query_first(query_window, fn(id) { id % 2 == 0 })
let circle_hits = tree.query_circle(400.0, 400.0, 150.0)
let circle_count = tree.query_circle_count(400.0, 400.0, 150.0)
let knn_hits = tree.query_knn(500.0, 500.0, 5)
let seg_hits = tree.query_segment(0.0, 0.0, 1000.0, 1000.0)
let join_pairs = if d < 2 { tree.spatial_join(tree).length() } else { 0 }
// FlatBuffers round-trip check
let buf = tree.to_flat_buffers()
let reloaded = @lib.StrTree::from_flat_buffers(buf)
let buf_check = reloaded.query(query_window).length() == hits.length()
println("Distribution: \{name}")
println(
" Items: \{s.num_items} | Nodes: \{s.num_nodes} | Height: \{s.height} | Fill: \{s.fill_factor}",
)
println(
" Numeric payload estimate: \{s.estimated_memory_bytes} B | Serialized Buffers: \{buf_check}",
)
let first_str = match first_even {
Some(id) => "Some(\{id})"
None => "None"
}
println(
" Range: \{hits.length()} (Count: \{count_fast}) | Point: \{pt_hits.length()} (Count: \{pt_count_fast}) | First Even: \{first_str}",
)
println(
" Circle (r=150): \{circle_hits.length()} (Count: \{circle_count}) | k-NN (k=5): \{knn_hits.length()} | Segment: \{seg_hits.length()}",
)
if join_pairs > 0 {
println(" Self Spatial Join Overlapping Pairs: \{join_pairs}")
}
println("----------------------------------------------------------------")
}
println("Diagnostic samples complete. Run moon test for regression coverage.")
println("================================================================")
}