@@ -36,6 +36,7 @@ pub fn write_byte_string(f: &mut Formatter, byte_string: &[u8]) -> fmt::Result {
36
36
Ok ( ( ) )
37
37
}
38
38
39
+ /// An iterator that merges two sorted iterators into one sorted iterator
39
40
pub ( crate ) struct MergeIter < It1 , It2 >
40
41
where
41
42
It1 : Iterator ,
@@ -284,4 +285,30 @@ mod tests {
284
285
] ) ;
285
286
assert_eq ! ( format!( "{:?}" , bytes) , r##""Class IRI=\"#B\"""## ) ;
286
287
}
288
+
289
+ #[ test]
290
+ fn merge_empty ( ) {
291
+ let iter = MergeIter :: new ( vec ! [ ] . into_iter ( ) , vec ! [ ] . into_iter ( ) ) ;
292
+ assert_eq ! ( iter. collect:: <Vec <usize >>( ) , vec![ ] ) ;
293
+ }
294
+
295
+ #[ test]
296
+ fn merge_single_empty ( ) {
297
+ let iter = MergeIter :: new ( vec ! [ 1 ] . into_iter ( ) , vec ! [ ] . into_iter ( ) ) ;
298
+ assert_eq ! ( iter. collect:: <Vec <usize >>( ) , vec![ 1 ] ) ;
299
+ let iter = MergeIter :: new ( vec ! [ ] . into_iter ( ) , vec ! [ 1 ] . into_iter ( ) ) ;
300
+ assert_eq ! ( iter. collect:: <Vec <usize >>( ) , vec![ 1 ] ) ;
301
+ }
302
+
303
+ #[ test]
304
+ fn merge_whole_side_before ( ) {
305
+ let iter = MergeIter :: new ( vec ! [ 1 , 2 , 3 ] . into_iter ( ) , vec ! [ 4 , 5 , 6 ] . into_iter ( ) ) ;
306
+ assert_eq ! ( iter. collect:: <Vec <usize >>( ) , vec![ 1 , 2 , 3 , 4 , 5 , 6 ] ) ;
307
+ }
308
+
309
+ #[ test]
310
+ fn merge_interleave ( ) {
311
+ let iter = MergeIter :: new ( vec ! [ 1 , 2 , 8 , 20 ] . into_iter ( ) , vec ! [ 3 , 4 , 22 , 23 ] . into_iter ( ) ) ;
312
+ assert_eq ! ( iter. collect:: <Vec <usize >>( ) , vec![ 1 , 2 , 3 , 4 , 8 , 20 , 22 , 23 ] ) ;
313
+ }
287
314
}
0 commit comments