mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-28 11:07:42 +00:00
Remove special-case handling of vec.split_off(0)
This commit is contained in:
parent
89110dafe7
commit
a655558b38
@ -2195,14 +2195,6 @@ impl<T, A: Allocator> Vec<T, A> {
|
|||||||
assert_failed(at, self.len());
|
assert_failed(at, self.len());
|
||||||
}
|
}
|
||||||
|
|
||||||
if at == 0 {
|
|
||||||
// the new vector can take over the original buffer and avoid the copy
|
|
||||||
return mem::replace(
|
|
||||||
self,
|
|
||||||
Vec::with_capacity_in(self.capacity(), self.allocator().clone()),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let other_len = self.len - at;
|
let other_len = self.len - at;
|
||||||
let mut other = Vec::with_capacity_in(other_len, self.allocator().clone());
|
let mut other = Vec::with_capacity_in(other_len, self.allocator().clone());
|
||||||
|
|
||||||
|
@ -958,23 +958,35 @@ fn test_append() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_split_off() {
|
fn test_split_off() {
|
||||||
let mut vec = vec![1, 2, 3, 4, 5, 6];
|
let mut vec = vec![1, 2, 3, 4, 5, 6];
|
||||||
|
let orig_ptr = vec.as_ptr();
|
||||||
let orig_capacity = vec.capacity();
|
let orig_capacity = vec.capacity();
|
||||||
let vec2 = vec.split_off(4);
|
|
||||||
|
let split_off = vec.split_off(4);
|
||||||
assert_eq!(vec, [1, 2, 3, 4]);
|
assert_eq!(vec, [1, 2, 3, 4]);
|
||||||
assert_eq!(vec2, [5, 6]);
|
assert_eq!(split_off, [5, 6]);
|
||||||
assert_eq!(vec.capacity(), orig_capacity);
|
assert_eq!(vec.capacity(), orig_capacity);
|
||||||
|
assert_eq!(vec.as_ptr(), orig_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_split_off_take_all() {
|
fn test_split_off_take_all() {
|
||||||
let mut vec = vec![1, 2, 3, 4, 5, 6];
|
// Allocate enough capacity that we can tell whether the split-off vector's
|
||||||
|
// capacity is based on its size, or (incorrectly) on the original capacity.
|
||||||
|
let mut vec = Vec::with_capacity(1000);
|
||||||
|
vec.extend([1, 2, 3, 4, 5, 6]);
|
||||||
let orig_ptr = vec.as_ptr();
|
let orig_ptr = vec.as_ptr();
|
||||||
let orig_capacity = vec.capacity();
|
let orig_capacity = vec.capacity();
|
||||||
let vec2 = vec.split_off(0);
|
|
||||||
|
let split_off = vec.split_off(0);
|
||||||
assert_eq!(vec, []);
|
assert_eq!(vec, []);
|
||||||
assert_eq!(vec2, [1, 2, 3, 4, 5, 6]);
|
assert_eq!(split_off, [1, 2, 3, 4, 5, 6]);
|
||||||
assert_eq!(vec.capacity(), orig_capacity);
|
assert_eq!(vec.capacity(), orig_capacity);
|
||||||
assert_eq!(vec2.as_ptr(), orig_ptr);
|
assert_eq!(vec.as_ptr(), orig_ptr);
|
||||||
|
|
||||||
|
// The split-off vector should be newly-allocated, and should not have
|
||||||
|
// stolen the original vector's allocation.
|
||||||
|
assert!(split_off.capacity() < orig_capacity);
|
||||||
|
assert_ne!(split_off.as_ptr(), orig_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user