40 lines
903 B
Rust
40 lines
903 B
Rust
#![feature(box_syntax)]
|
|
|
|
fn make_box() -> Box<(i16, i16)> {
|
|
Box::new((1, 2))
|
|
}
|
|
|
|
fn make_box_syntax() -> Box<(i16, i16)> {
|
|
box (1, 2)
|
|
}
|
|
|
|
fn allocate_reallocate() {
|
|
let mut s = String::new();
|
|
|
|
// 4 byte heap alloc (__rust_allocate)
|
|
s.push('f');
|
|
assert_eq!(s.len(), 1);
|
|
assert_eq!(s.capacity(), 4);
|
|
|
|
// heap size doubled to 8 (__rust_reallocate)
|
|
// FIXME: String::push_str is broken because it hits the std::vec::SetLenOnDrop code and we
|
|
// don't call destructors in miri yet.
|
|
s.push('o');
|
|
s.push('o');
|
|
s.push('o');
|
|
s.push('o');
|
|
assert_eq!(s.len(), 5);
|
|
assert_eq!(s.capacity(), 8);
|
|
|
|
// heap size reduced to 5 (__rust_reallocate)
|
|
s.shrink_to_fit();
|
|
assert_eq!(s.len(), 5);
|
|
assert_eq!(s.capacity(), 5);
|
|
}
|
|
|
|
fn main() {
|
|
assert_eq!(*make_box(), (1, 2));
|
|
assert_eq!(*make_box_syntax(), (1, 2));
|
|
allocate_reallocate();
|
|
}
|