@@ -142,6 +142,72 @@ fn test_iterator_chain() {
142
142
assert_eq ! ( i, expected. len( ) ) ;
143
143
}
144
144
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
+
145
211
#[ test]
146
212
fn test_iterator_chain_nth ( ) {
147
213
let xs = [ 0 , 1 , 2 , 3 , 4 , 5 ] ;
0 commit comments