File tree Expand file tree Collapse file tree 1 file changed +18
-0
lines changed Expand file tree Collapse file tree 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> {
654654 }
655655 self . data = SmallVecData :: from_inline ( mem:: uninitialized ( ) ) ;
656656 ptr:: copy_nonoverlapping ( ptr, self . data . inline_mut ( ) . ptr_mut ( ) , len) ;
657+ self . capacity = len;
657658 } else if new_cap != cap {
658659 let mut vec = Vec :: with_capacity ( new_cap) ;
659660 let new_alloc = vec. as_mut_ptr ( ) ;
@@ -2311,4 +2312,21 @@ mod tests {
23112312 let decoded: SmallVec < [ i32 ; 2 ] > = deserialize ( & encoded) . unwrap ( ) ;
23122313 assert_eq ! ( small_vec, decoded) ;
23132314 }
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+ }
23142332}
You can’t perform that action at this time.
0 commit comments