File tree 1 file changed +18
-0
lines changed
1 file changed +18
-0
lines changed Original file line number Diff line number Diff line change @@ -654,6 +654,7 @@ impl<A: Array> SmallVec<A> {
654
654
}
655
655
self . data = SmallVecData :: from_inline ( mem:: uninitialized ( ) ) ;
656
656
ptr:: copy_nonoverlapping ( ptr, self . data . inline_mut ( ) . ptr_mut ( ) , len) ;
657
+ self . capacity = len;
657
658
} else if new_cap != cap {
658
659
let mut vec = Vec :: with_capacity ( new_cap) ;
659
660
let new_alloc = vec. as_mut_ptr ( ) ;
@@ -2311,4 +2312,21 @@ mod tests {
2311
2312
let decoded: SmallVec < [ i32 ; 2 ] > = deserialize ( & encoded) . unwrap ( ) ;
2312
2313
assert_eq ! ( small_vec, decoded) ;
2313
2314
}
2315
+
2316
+ #[ test]
2317
+ fn grow_to_shrink ( ) {
2318
+ let mut v: SmallVec < [ u8 ; 2 ] > = SmallVec :: new ( ) ;
2319
+ v. push ( 1 ) ;
2320
+ v. push ( 2 ) ;
2321
+ v. push ( 3 ) ;
2322
+ assert ! ( v. spilled( ) ) ;
2323
+ v. clear ( ) ;
2324
+ // Shrink to inline.
2325
+ v. grow ( 2 ) ;
2326
+ assert ! ( !v. spilled( ) ) ;
2327
+ assert_eq ! ( v. capacity( ) , 2 ) ;
2328
+ assert_eq ! ( v. len( ) , 0 ) ;
2329
+ v. push ( 4 ) ;
2330
+ assert_eq ! ( v[ ..] , [ 4 ] ) ;
2331
+ }
2314
2332
}
You can’t perform that action at this time.
0 commit comments