@@ -382,6 +382,20 @@ impl<T: fmt::Debug, const N: usize> fmt::Debug for Deque<T, N> {
382
382
}
383
383
}
384
384
385
+ /// As with the standard library's `VecDeque`, items are added via `push_back`.
386
+ impl < T , const N : usize > Extend < T > for Deque < T , N > {
387
+ fn extend < I : IntoIterator < Item = T > > ( & mut self , iter : I ) {
388
+ for item in iter {
389
+ self . push_back ( item) . ok ( ) . unwrap ( ) ;
390
+ }
391
+ }
392
+ }
393
+ impl < ' a , T : ' a + Copy , const N : usize > Extend < & ' a T > for Deque < T , N > {
394
+ fn extend < I : IntoIterator < Item = & ' a T > > ( & mut self , iter : I ) {
395
+ self . extend ( iter. into_iter ( ) . copied ( ) )
396
+ }
397
+ }
398
+
385
399
/// An iterator that moves out of a [`Deque`].
386
400
///
387
401
/// This struct is created by calling the `into_iter` method.
@@ -661,6 +675,31 @@ mod tests {
661
675
assert_eq ! ( v. back_mut( ) , None ) ;
662
676
}
663
677
678
+ #[ test]
679
+ fn extend ( ) {
680
+ let mut v: Deque < i32 , 4 > = Deque :: new ( ) ;
681
+ v. extend ( & [ 1 , 2 , 3 ] ) ;
682
+ assert_eq ! ( v. pop_front( ) . unwrap( ) , 1 ) ;
683
+ assert_eq ! ( v. pop_front( ) . unwrap( ) , 2 ) ;
684
+ assert_eq ! ( * v. front( ) . unwrap( ) , 3 ) ;
685
+
686
+ v. push_back ( 4 ) . unwrap ( ) ;
687
+ v. extend ( & [ 5 , 6 ] ) ;
688
+ assert_eq ! ( v. pop_front( ) . unwrap( ) , 3 ) ;
689
+ assert_eq ! ( v. pop_front( ) . unwrap( ) , 4 ) ;
690
+ assert_eq ! ( v. pop_front( ) . unwrap( ) , 5 ) ;
691
+ assert_eq ! ( v. pop_front( ) . unwrap( ) , 6 ) ;
692
+ assert ! ( v. pop_front( ) . is_none( ) ) ;
693
+ }
694
+
695
+ #[ test]
696
+ #[ should_panic]
697
+ fn extend_panic ( ) {
698
+ let mut v: Deque < i32 , 4 > = Deque :: new ( ) ;
699
+ // Is too many elements -> should panic
700
+ v. extend ( & [ 1 , 2 , 3 , 4 , 5 ] ) ;
701
+ }
702
+
664
703
#[ test]
665
704
fn iter ( ) {
666
705
let mut v: Deque < i32 , 4 > = Deque :: new ( ) ;
0 commit comments