@@ -142,6 +142,72 @@ fn test_iterator_chain() {
142142 assert_eq ! ( i, expected. len( ) ) ;
143143}
144144
145+ #[ test]
146+ fn test_iterator_chain_advance_by ( ) {
147+ fn test_chain ( xs : & [ i32 ] , ys : & [ i32 ] ) {
148+ let len = xs. len ( ) + ys. len ( ) ;
149+
150+ for i in 0 ..xs. len ( ) {
151+ let mut iter = xs. iter ( ) . chain ( ys) ;
152+ iter. advance_by ( i) . unwrap ( ) ;
153+ assert_eq ! ( iter. next( ) , Some ( & xs[ i] ) ) ;
154+ assert_eq ! ( iter. advance_by( 100 ) , Err ( len - i - 1 ) ) ;
155+ }
156+
157+ for i in 0 ..ys. len ( ) {
158+ let mut iter = xs. iter ( ) . chain ( ys) ;
159+ iter. advance_by ( xs. len ( ) + i) . unwrap ( ) ;
160+ assert_eq ! ( iter. next( ) , Some ( & ys[ i] ) ) ;
161+ assert_eq ! ( iter. advance_by( 100 ) , Err ( ys. len( ) - i - 1 ) ) ;
162+ }
163+
164+ let mut iter = xs. iter ( ) . chain ( ys) ;
165+ iter. advance_by ( len) . unwrap ( ) ;
166+ assert_eq ! ( iter. next( ) , None ) ;
167+
168+ let mut iter = xs. iter ( ) . chain ( ys) ;
169+ assert_eq ! ( iter. advance_by( len + 1 ) , Err ( len) ) ;
170+ }
171+
172+ test_chain ( & [ ] , & [ ] ) ;
173+ test_chain ( & [ ] , & [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
174+ test_chain ( & [ 0 , 1 , 2 , 3 , 4 , 5 ] , & [ ] ) ;
175+ test_chain ( & [ 0 , 1 , 2 , 3 , 4 , 5 ] , & [ 30 , 40 , 50 , 60 ] ) ;
176+ }
177+
178+ #[ test]
179+ fn test_iterator_chain_advance_back_by ( ) {
180+ fn test_chain ( xs : & [ i32 ] , ys : & [ i32 ] ) {
181+ let len = xs. len ( ) + ys. len ( ) ;
182+
183+ for i in 0 ..ys. len ( ) {
184+ let mut iter = xs. iter ( ) . chain ( ys) ;
185+ iter. advance_back_by ( i) . unwrap ( ) ;
186+ assert_eq ! ( iter. next_back( ) , Some ( & ys[ ys. len( ) - i - 1 ] ) ) ;
187+ assert_eq ! ( iter. advance_back_by( 100 ) , Err ( len - i - 1 ) ) ;
188+ }
189+
190+ for i in 0 ..xs. len ( ) {
191+ let mut iter = xs. iter ( ) . chain ( ys) ;
192+ iter. advance_back_by ( ys. len ( ) + i) . unwrap ( ) ;
193+ assert_eq ! ( iter. next_back( ) , Some ( & xs[ xs. len( ) - i - 1 ] ) ) ;
194+ assert_eq ! ( iter. advance_back_by( 100 ) , Err ( xs. len( ) - i - 1 ) ) ;
195+ }
196+
197+ let mut iter = xs. iter ( ) . chain ( ys) ;
198+ iter. advance_back_by ( len) . unwrap ( ) ;
199+ assert_eq ! ( iter. next_back( ) , None ) ;
200+
201+ let mut iter = xs. iter ( ) . chain ( ys) ;
202+ assert_eq ! ( iter. advance_back_by( len + 1 ) , Err ( len) ) ;
203+ }
204+
205+ test_chain ( & [ ] , & [ ] ) ;
206+ test_chain ( & [ ] , & [ 0 , 1 , 2 , 3 , 4 , 5 ] ) ;
207+ test_chain ( & [ 0 , 1 , 2 , 3 , 4 , 5 ] , & [ ] ) ;
208+ test_chain ( & [ 0 , 1 , 2 , 3 , 4 , 5 ] , & [ 30 , 40 , 50 , 60 ] ) ;
209+ }
210+
145211#[ test]
146212fn test_iterator_chain_nth ( ) {
147213 let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
0 commit comments