Skip to content

Commit 5053b3e

Browse files
committed
tests: tests multiple R-tree variants
also allow SpatialElem-based RTree construction without specifying key type (defaults to Nothing)
1 parent f297c84 commit 5053b3e

2 files changed

Lines changed: 96 additions & 42 deletions

File tree

src/rtree/rtree.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@ mutable struct RTree{T,N,V} <: SpatialIndex{T,N,V}
125125
end
126126
end
127127

128+
RTree{T,N}(::Type{V}; kwargs...) where {T,N,V} =
129+
RTree{T,N,SpatialElem{T,N,Nothing,V}}(; kwargs...)
130+
128131
RTree{T,N}(::Type{K}, ::Type{V}; kwargs...) where {T,N,K,V} =
129132
RTree{T,N,SpatialElem{T,N,K,V}}(; kwargs...)
130133

test/rtree.jl

Lines changed: 93 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -11,47 +11,97 @@
1111
end
1212

1313
@testset "Basic Operations" begin
14-
ambr = SI.Rect((0.0, 0.0), (0.0, 0.0))
15-
bmbr = SI.Rect((0.0, 1.0), (0.0, 1.0))
16-
tree = RTree{Float64, 2}(Int, Int)
17-
18-
@test tree isa RTree{Float64, 2, SpatialElem{Float64, 2, Int, Int}}
19-
@test SI.variant(tree) === SI.RTreeStar
20-
@test eltype(tree) === SpatialElem{Float64, 2, Int, Int}
21-
@test SI.regiontype(tree) === SI.Rect{Float64, 2}
22-
@test SI.dimtype(tree) === Float64
23-
@test ndims(tree) === 2
24-
@test length(tree) == 0
25-
@test SI.height(tree) == 1
26-
@test isempty(tree)
27-
@test isempty(tree, ambr)
28-
@test isequal(SI.mbr(tree.root), SI.empty(SI.regiontype(tree)))
29-
@test SI.check(tree)
30-
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)), 1)
31-
@test SI.check(tree)
32-
33-
@test insert!(tree, ambr, 1, 2) === tree
34-
@test length(tree) == 1
35-
@test !isempty(tree)
36-
@test !isempty(tree, ambr)
37-
@test SI.height(tree) == 1
38-
@test isequal(SI.mbr(tree.root), ambr)
39-
@test SI.check(tree)
40-
@test_throws KeyError delete!(tree, bmbr, 1)
41-
@test_throws KeyError delete!(tree, ambr, 2)
42-
@test SI.check(tree)
43-
44-
@test insert!(tree, bmbr, 2, 2) === tree
45-
@test length(tree) == 2
46-
@test SI.height(tree) == 1
47-
@test isequal(SI.mbr(tree.root), SI.combine(ambr, bmbr))
48-
@test SI.check(tree)
49-
@test_throws KeyError delete!(tree, bmbr, 1)
50-
@test_throws KeyError delete!(tree, ambr, 2)
51-
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)), 1)
52-
@test delete!(tree, ambr, 1) === tree
53-
@test length(tree) == 1
54-
@test SI.check(tree)
14+
tree_vars = [SI.RTreeStar, SI.RTreeLinear, SI.RTreeQuadratic]
15+
@testset "RTree{Float,2,Int32,Int}(variant=$tree_var)" for tree_var in tree_vars
16+
ambr = SI.Rect((0.0, 0.0), (0.0, 0.0))
17+
bmbr = SI.Rect((0.0, 1.0), (0.0, 1.0))
18+
19+
tree = RTree{Float64, 2}(Int32, Int, variant=tree_var)
20+
@test tree isa RTree{Float64, 2, SpatialElem{Float64, 2, Int32, Int}}
21+
@test SI.variant(tree) === tree_var
22+
23+
@test eltype(tree) === SpatialElem{Float64, 2, Int32, Int}
24+
@test SI.regiontype(tree) === SI.Rect{Float64, 2}
25+
@test SI.dimtype(tree) === Float64
26+
@test ndims(tree) === 2
27+
@test length(tree) == 0
28+
@test SI.height(tree) == 1
29+
@test isempty(tree)
30+
@test isempty(tree, ambr)
31+
@test isequal(SI.mbr(tree.root), SI.empty(SI.regiontype(tree)))
32+
@test SI.check(tree)
33+
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)), 1)
34+
@test SI.check(tree)
35+
36+
@test insert!(tree, ambr, 1, 2) === tree
37+
@test length(tree) == 1
38+
@test !isempty(tree)
39+
@test !isempty(tree, ambr)
40+
@test SI.height(tree) == 1
41+
@test isequal(SI.mbr(tree.root), ambr)
42+
@test SI.check(tree)
43+
@test_throws KeyError delete!(tree, bmbr, 1)
44+
@test_throws KeyError delete!(tree, ambr, 2)
45+
@test SI.check(tree)
46+
47+
@test insert!(tree, bmbr, 2, 2) === tree
48+
@test length(tree) == 2
49+
@test SI.height(tree) == 1
50+
@test isequal(SI.mbr(tree.root), SI.combine(ambr, bmbr))
51+
@test SI.check(tree)
52+
@test_throws KeyError delete!(tree, bmbr, 1)
53+
@test_throws KeyError delete!(tree, ambr, 2)
54+
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)), 1)
55+
@test delete!(tree, ambr, 1) === tree
56+
@test length(tree) == 1
57+
@test SI.check(tree)
58+
end
59+
60+
@testset "RTree{Int,3,String,Nothing}(variant=$tree_var) (no id)" for tree_var in tree_vars
61+
ambr = SI.Rect((0, 0, 0), (0, 0, 0))
62+
bmbr = SI.Rect((0, 1, 1), (0, 1, 1))
63+
tree = RTree{Int, 3}(String, variant=tree_var)
64+
@test tree isa RTree{Int, 3, SpatialElem{Int, 3, Nothing, String}}
65+
@test SI.variant(tree) === tree_var
66+
@test eltype(tree) === SpatialElem{Int, 3, Nothing, String}
67+
@test SI.regiontype(tree) === SI.Rect{Int, 3}
68+
@test SI.dimtype(tree) === Int
69+
@test ndims(tree) === 3
70+
@test length(tree) == 0
71+
@test SI.height(tree) == 1
72+
@test isempty(tree)
73+
@test isempty(tree, ambr)
74+
@test isequal(SI.mbr(tree.root), SI.empty(SI.regiontype(tree)))
75+
@test SI.check(tree)
76+
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)), 1)
77+
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)))
78+
@test SI.check(tree)
79+
80+
@test_throws MethodError insert!(tree, ambr, 1, "2")
81+
@test insert!(tree, ambr, "2") === tree
82+
@test length(tree) == 1
83+
@test !isempty(tree)
84+
@test !isempty(tree, ambr)
85+
@test SI.height(tree) == 1
86+
@test isequal(SI.mbr(tree.root), ambr)
87+
@test SI.check(tree)
88+
@test_throws MethodError delete!(tree, bmbr, 1)
89+
@test_throws KeyError delete!(tree, bmbr)
90+
@test SI.check(tree)
91+
92+
@test insert!(tree, bmbr, "3") === tree
93+
@test length(tree) == 2
94+
@test SI.height(tree) == 1
95+
@test isequal(SI.mbr(tree.root), SI.combine(ambr, bmbr))
96+
@test SI.check(tree)
97+
@test_throws MethodError delete!(tree, bmbr, 1)
98+
@test_throws MethodError delete!(tree, SI.empty(SI.Rect{Int, 2}))
99+
@test_throws MethodError delete!(tree, SI.empty(SI.Rect{Float64, 3}))
100+
@test_throws KeyError delete!(tree, SI.empty(SI.regiontype(tree)))
101+
@test delete!(tree, bmbr) === tree
102+
@test length(tree) == 1
103+
@test SI.check(tree)
104+
end
55105
end
56106

57107
@testset "1000 vertices" begin
@@ -94,7 +144,8 @@ end
94144
end
95145

96146
@testset "bulk load" begin
97-
tree = RTree{SI.dimtype(eltype(mbrs)), ndims(eltype(mbrs))}(Int, String, leaf_capacity = 20, branch_capacity = 20)
147+
tree = RTree{SI.dimtype(eltype(mbrs)), ndims(eltype(mbrs))}(Int, String,
148+
leaf_capacity = 20, branch_capacity = 20)
98149
@test tree === SI.load!(tree, enumerate(mbrs), method=:OMT,
99150
getid = x -> x[1], getmbr = x -> x[2], getval = x -> string(x[1]))
100151
@test SI.check(tree)

0 commit comments

Comments
 (0)