xref: /relibc/ralloc/tests/partial_free.rs (revision 5285a72bce125fda9b6d3db552fd381d5b5b8bbb)
1 extern crate ralloc;
2 
3 mod util;
4 
5 use std::ptr;
6 
7 #[test]
8 fn partial_free() {
9     util::multiply(|| {
10         let buf = ralloc::alloc(63, 3);
11 
12         unsafe {
13             util::acid(|| {
14                 ptr::write_bytes(buf, 0, 63);
15                 *buf = 4;
16             });
17 
18             util::acid(|| {
19                 ralloc::free(buf.offset(8), 55);
20                 *buf = 5;
21             });
22 
23             util::acid(|| {
24                 ralloc::free(buf, 4);
25                 *buf.offset(4) = 3;
26             });
27 
28             assert_eq!(*buf.offset(4), 3);
29         }
30     });
31 }
32 
33 #[test]
34 fn partial_free_double() {
35     util::multiply(|| {
36         let buf = ralloc::alloc(64, 4);
37 
38         unsafe {
39             util::acid(|| {
40                 ptr::write_bytes(buf, 0, 64);
41             });
42 
43             util::acid(|| {
44                 ralloc::free(buf.offset(32), 32);
45                 *buf = 5;
46             });
47 
48             assert_eq!(*buf, 5);
49 
50             util::acid(|| {
51                 *buf = 0xAA;
52                 ralloc::free(buf, 32);
53             });
54         }
55     });
56 }
57