@@ -382,6 +382,20 @@ impl<T: fmt::Debug, const N: usize> fmt::Debug for Deque<T, N> {
382382 }
383383}
384384
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+
385399/// An iterator that moves out of a [`Deque`].
386400///
387401/// This struct is created by calling the `into_iter` method.
@@ -661,6 +675,31 @@ mod tests {
661675 assert_eq ! ( v. back_mut( ) , None ) ;
662676 }
663677
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+
664703 #[ test]
665704 fn iter ( ) {
666705 let mut v: Deque < i32 , 4 > = Deque :: new ( ) ;
0 commit comments