@@ -3,12 +3,13 @@ use indexset::core::node::NodeLike;
33
44use std:: borrow:: Borrow ;
55use std:: collections:: Bound ;
6+ use std:: fmt:: Debug ;
67use std:: ops:: Deref ;
78use std:: slice:: Iter ;
89
910pub const UNSIZED_HEADER_LENGTH : u32 = 64 ;
1011
11- #[ derive( Debug ) ]
12+ #[ derive( Debug , Clone ) ]
1213pub struct UnsizedNode < T >
1314where
1415 T : SizeMeasurable ,
4950
5051impl < T > NodeLike < T > for UnsizedNode < T >
5152where
52- T : SizeMeasurable + Ord + Default + VariableSizeMeasurable ,
53+ T : SizeMeasurable + Ord + Default + Debug + VariableSizeMeasurable ,
5354{
5455 fn with_capacity ( capacity : usize ) -> Self {
5556 Self {
7576 let mut middle_idx = 0 ;
7677 let mut iter = self . inner . iter ( ) ;
7778 while !ind {
78- let val = iter. next ( ) . expect ( "we stop before node's end" ) ;
79+ let val = iter. next ( ) . expect ( "we should stop before node's end" ) ;
7980 current_length += val. aligned_size ( ) ;
8081 current_length += UnsizedIndexPageUtility :: < T > :: slots_value_size ( ) ;
8182 let current_middle_variance =
@@ -192,9 +193,11 @@ where
192193
193194#[ cfg( test) ]
194195mod test {
195- use indexset:: core:: node:: NodeLike ;
196-
197196 use crate :: index:: unsized_node:: UnsizedNode ;
197+ use data_bucket:: Link ;
198+ use indexset:: concurrent:: multimap:: BTreeMultiMap ;
199+ use indexset:: core:: multipair:: MultiPair ;
200+ use indexset:: core:: node:: NodeLike ;
198201
199202 #[ test]
200203 fn test_split_basic ( ) {
@@ -223,4 +226,26 @@ mod test {
223226 assert_eq ! ( split. length, 136 ) ;
224227 assert_eq ! ( split. inner. len( ) , 1 ) ;
225228 }
229+
230+ #[ test]
231+ fn test_get_works_as_expected_at_big_amounts ( ) {
232+ let maximum_node_size = 1000 ;
233+ let map = BTreeMultiMap :: < String , Link , UnsizedNode < MultiPair < String , Link > > > :: with_maximum_node_size ( maximum_node_size) ;
234+
235+ for i in 1 ..2000 {
236+ map. insert (
237+ format ! ( "ValueNum{}" , i % 200 ) ,
238+ Link {
239+ page_id : Default :: default ( ) ,
240+ offset : i,
241+ length : i,
242+ } ,
243+ ) ;
244+ }
245+
246+ for i in 1 ..200 {
247+ let range = map. get ( & format ! ( "ValueNum{}" , i) ) . collect :: < Vec < _ > > ( ) ;
248+ assert_eq ! ( range. len( ) , 10 )
249+ }
250+ }
226251}
0 commit comments