@@ -142,8 +142,8 @@ impl<N: IndexableNum> RTreeBuilder<N> {
142142
143143 let ( boxes, mut indices) = split_data_borrow ( & mut self . data , & self . metadata ) ;
144144
145- if self . metadata . num_items ( ) = = 1 {
146- // Only one item, we don't even have a root node to fill
145+ if self . metadata . num_items ( ) < = 1 {
146+ // Empty or only one item, we don't even have a root node to fill
147147 return RTree {
148148 buffer : self . data ,
149149 metadata : self . metadata ,
@@ -253,7 +253,7 @@ fn split_data_borrow<'a, N: IndexableNum>(
253253
254254#[ cfg( test) ]
255255mod test {
256- use crate :: rtree:: sort:: HilbertSort ;
256+ use crate :: rtree:: sort:: { HilbertSort , STRSort } ;
257257 use crate :: rtree:: RTreeIndex ;
258258
259259 use super :: * ;
@@ -266,4 +266,37 @@ mod test {
266266 let result = tree. search ( 0. , 0. , 0. , 0. ) ;
267267 assert_eq ! ( result, vec![ 0 ] ) ;
268268 }
269+
270+ #[ test]
271+ fn build_str_index_with_various_items ( ) {
272+ let num_items_arr = [ 0 , 1 , 4 , 8 , 16 , 20 , 40 , 80 ] ;
273+ for num_items in num_items_arr {
274+ build_index_with_various_items :: < STRSort > ( num_items) ;
275+ }
276+ }
277+
278+ #[ test]
279+ fn build_hilbert_index_with_various_items ( ) {
280+ let num_items_arr = [ 0 , 1 , 4 , 8 , 16 , 20 , 40 , 80 ] ;
281+ for num_items in num_items_arr {
282+ build_index_with_various_items :: < HilbertSort > ( num_items) ;
283+ }
284+ }
285+
286+ fn build_index_with_various_items < S : Sort < f64 > > ( num_items : u32 ) {
287+ let mut builder = RTreeBuilder :: < f64 > :: new ( num_items) ;
288+ for i in 0 ..num_items {
289+ builder. add ( i as f64 , i as f64 , i as f64 , i as f64 ) ;
290+ }
291+ let tree = builder. finish :: < S > ( ) ;
292+ assert_eq ! ( tree. num_items( ) , num_items) ;
293+ if num_items == 0 {
294+ assert ! ( tree. search( 0. , 0. , 0. , 0. ) . is_empty( ) ) ;
295+ } else {
296+ for i in 0 ..num_items {
297+ let results = tree. search ( i as f64 , i as f64 , i as f64 , i as f64 ) ;
298+ assert_eq ! ( results, vec![ i] ) ;
299+ }
300+ }
301+ }
269302}
0 commit comments