@@ -36,6 +36,7 @@ pub fn write_byte_string(f: &mut Formatter, byte_string: &[u8]) -> fmt::Result {
3636 Ok ( ( ) )
3737}
3838
39+ /// An iterator that merges two sorted iterators into one sorted iterator
3940pub ( crate ) struct MergeIter < It1 , It2 >
4041where
4142 It1 : Iterator ,
@@ -284,4 +285,30 @@ mod tests {
284285 ] ) ;
285286 assert_eq ! ( format!( "{:?}" , bytes) , r##""Class IRI=\"#B\"""## ) ;
286287 }
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+ }
287314}
0 commit comments