rustup
This commit is contained in:
parent
9f3e7cf2c2
commit
39e6baeb91
2 changed files with 16 additions and 16 deletions
|
|
@ -1 +1 @@
|
|||
c4b6d9411f939c1ad7b3521b907fa101f3360462
|
||||
18b0585b52741ca158dfebef7968326e2704352e
|
||||
|
|
|
|||
|
|
@ -6,39 +6,39 @@ use std::slice;
|
|||
|
||||
fn check_alloc<T: AllocRef>(mut allocator: T) { unsafe {
|
||||
for &align in &[4, 8, 16, 32] {
|
||||
let layout = Layout::from_size_align(20, align).unwrap();
|
||||
let layout_20 = Layout::from_size_align(20, align).unwrap();
|
||||
let layout_40 = Layout::from_size_align(40, 4*align).unwrap();
|
||||
let layout_10 = Layout::from_size_align(10, align/2).unwrap();
|
||||
|
||||
for _ in 0..32 {
|
||||
let a = allocator.alloc(layout).unwrap().as_non_null_ptr();
|
||||
assert_eq!(a.as_ptr() as usize % align, 0, "pointer is incorrectly aligned");
|
||||
allocator.dealloc(a, layout);
|
||||
let a = allocator.alloc(layout_20).unwrap().as_non_null_ptr();
|
||||
assert_eq!(a.as_ptr() as usize % layout_20.align(), 0, "pointer is incorrectly aligned");
|
||||
allocator.dealloc(a, layout_20);
|
||||
}
|
||||
|
||||
let p1 = allocator.alloc_zeroed(layout).unwrap().as_non_null_ptr();
|
||||
assert_eq!(p1.as_ptr() as usize % align, 0, "pointer is incorrectly aligned");
|
||||
let p1 = allocator.alloc_zeroed(layout_20).unwrap().as_non_null_ptr();
|
||||
assert_eq!(p1.as_ptr() as usize % layout_20.align(), 0, "pointer is incorrectly aligned");
|
||||
assert_eq!(*p1.as_ptr(), 0);
|
||||
|
||||
// old size < new size
|
||||
let p2 = allocator.grow(p1, layout, 40).unwrap().as_non_null_ptr();
|
||||
let layout = Layout::from_size_align(40, align).unwrap();
|
||||
assert_eq!(p2.as_ptr() as usize % align, 0, "pointer is incorrectly aligned");
|
||||
let p2 = allocator.grow(p1, layout_20, layout_40).unwrap().as_non_null_ptr();
|
||||
assert_eq!(p2.as_ptr() as usize % layout_40.align(), 0, "pointer is incorrectly aligned");
|
||||
let slice = slice::from_raw_parts(p2.as_ptr(), 20);
|
||||
assert_eq!(&slice, &[0_u8; 20]);
|
||||
|
||||
// old size == new size
|
||||
let p3 = allocator.grow(p2, layout, 40).unwrap().as_non_null_ptr();
|
||||
assert_eq!(p3.as_ptr() as usize % align, 0, "pointer is incorrectly aligned");
|
||||
let p3 = allocator.grow(p2, layout_40, layout_40).unwrap().as_non_null_ptr();
|
||||
assert_eq!(p3.as_ptr() as usize % layout_40.align(), 0, "pointer is incorrectly aligned");
|
||||
let slice = slice::from_raw_parts(p3.as_ptr(), 20);
|
||||
assert_eq!(&slice, &[0_u8; 20]);
|
||||
|
||||
// old size > new size
|
||||
let p4 = allocator.shrink(p3, layout, 10).unwrap().as_non_null_ptr();
|
||||
let layout = Layout::from_size_align(10, align).unwrap();
|
||||
assert_eq!(p4.as_ptr() as usize % align, 0, "pointer is incorrectly aligned");
|
||||
let p4 = allocator.shrink(p3, layout_40, layout_10).unwrap().as_non_null_ptr();
|
||||
assert_eq!(p4.as_ptr() as usize % layout_10.align(), 0, "pointer is incorrectly aligned");
|
||||
let slice = slice::from_raw_parts(p4.as_ptr(), 10);
|
||||
assert_eq!(&slice, &[0_u8; 10]);
|
||||
|
||||
allocator.dealloc(p4, layout);
|
||||
allocator.dealloc(p4, layout_10);
|
||||
}
|
||||
} }
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue