Skip to content

Commit 32eedad

Browse files
committed
Add tests
1 parent a5734ca commit 32eedad

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/liballoc/tests/boxed.rs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,39 @@ fn unitialized_zero_size_box() {
1616
NonNull::<MaybeUninit<String>>::dangling().as_ptr(),
1717
);
1818
}
19+
20+
#[derive(Clone, PartialEq, Eq, Debug)]
21+
struct Dummy {
22+
_data: u8,
23+
}
24+
25+
#[test]
26+
fn box_clone_and_clone_from_equivalence() {
27+
for size in (0..8).map(|i| 2usize.pow(i)) {
28+
let control = vec![Dummy { _data: 42 }; size].into_boxed_slice();
29+
let clone = control.clone();
30+
let mut copy = vec![Dummy { _data: 84 }; size].into_boxed_slice();
31+
copy.clone_from(&control);
32+
assert_eq!(control, clone);
33+
assert_eq!(control, copy);
34+
}
35+
}
36+
37+
#[test]
38+
fn box_clone_from_ptr_stability() {
39+
for size in (0..8).map(|i| 2usize.pow(i)) {
40+
let control = vec![Dummy { _data: 42 }; size].into_boxed_slice();
41+
let mut copy = vec![Dummy { _data: 84 }; size].into_boxed_slice();
42+
let copy_raw = copy.as_ptr() as usize;
43+
copy.clone_from(&control);
44+
assert_eq!(copy.as_ptr() as usize, copy_raw);
45+
}
46+
47+
for size in (0..8).map(|i| 2usize.pow(i)) {
48+
let control = vec![Dummy { _data: 42 }; size].into_boxed_slice();
49+
let mut copy = vec![Dummy { _data: 84 }; size + 1].into_boxed_slice();
50+
let copy_raw = copy.as_ptr() as usize;
51+
copy.clone_from(&control);
52+
assert_ne!(copy.as_ptr() as usize, copy_raw);
53+
}
54+
}

0 commit comments

Comments
 (0)