@@ -1504,6 +1504,24 @@ pub struct IntoIter<A: Array> {
1504
1504
end : usize ,
1505
1505
}
1506
1506
1507
+ /*impl<A: Array + Clone> Clone for IntoIter<A>
1508
+ where
1509
+ A::Item: Copy,
1510
+ {
1511
+ fn clone(&self) -> IntoIter<A> {
1512
+ SmallVec::from_slice(self.as_slice()).into_iter()
1513
+ }
1514
+ }*/
1515
+
1516
+ impl < A : Array + Clone > Clone for IntoIter < A >
1517
+ where
1518
+ A :: Item : Clone ,
1519
+ {
1520
+ fn clone ( & self ) -> IntoIter < A > {
1521
+ SmallVec :: from ( self . as_slice ( ) ) . into_iter ( )
1522
+ }
1523
+ }
1524
+
1507
1525
impl < A : Array > Drop for IntoIter < A > {
1508
1526
fn drop ( & mut self ) {
1509
1527
for _ in self { }
@@ -2248,6 +2266,37 @@ mod tests {
2248
2266
assert_eq ! ( iter. as_mut_slice( ) , & [ 2 ] ) ;
2249
2267
}
2250
2268
2269
+ #[ test]
2270
+ fn test_into_iter_clone ( ) {
2271
+ // Test that the cloned iterator yields identical elements and that it owns its own copy
2272
+ // (i.e. no use after move errors).
2273
+ let mut iter = SmallVec :: < [ u8 ; 2 ] > :: from_iter ( 0 ..3 ) . into_iter ( ) ;
2274
+ let mut clone_iter = iter. clone ( ) ;
2275
+ while let Some ( x) = iter. next ( ) {
2276
+ assert_eq ! ( x, clone_iter. next( ) . unwrap( ) ) ;
2277
+ }
2278
+ assert_eq ! ( clone_iter. next( ) , None ) ;
2279
+ }
2280
+
2281
+ #[ test]
2282
+ fn test_into_iter_clone_partially_consumed_iterator ( ) {
2283
+ // Test that the cloned iterator only contains the remaining elements of the original iterator.
2284
+ let mut iter = SmallVec :: < [ u8 ; 2 ] > :: from_iter ( 0 ..3 ) . into_iter ( ) . skip ( 1 ) ;
2285
+ let mut clone_iter = iter. clone ( ) ;
2286
+ while let Some ( x) = iter. next ( ) {
2287
+ assert_eq ! ( x, clone_iter. next( ) . unwrap( ) ) ;
2288
+ }
2289
+ assert_eq ! ( clone_iter. next( ) , None ) ;
2290
+ }
2291
+
2292
+ #[ test]
2293
+ fn test_into_iter_clone_empty_smallvec ( ) {
2294
+ let mut iter = SmallVec :: < [ u8 ; 2 ] > :: new ( ) . into_iter ( ) ;
2295
+ let mut clone_iter = iter. clone ( ) ;
2296
+ assert_eq ! ( iter. next( ) , None ) ;
2297
+ assert_eq ! ( clone_iter. next( ) , None ) ;
2298
+ }
2299
+
2251
2300
#[ test]
2252
2301
fn shrink_to_fit_unspill ( ) {
2253
2302
let mut vec = SmallVec :: < [ u8 ; 2 ] > :: from_iter ( 0 ..3 ) ;
0 commit comments