allocator_api2_tests/
lib.rs

1#![cfg_attr(feature = "nightly", feature(allocator_api))]
2
3use std::alloc::Layout;
4
5#[cfg(not(feature = "nightly"))]
6use allocator_api2::{alloc::Allocator, boxed::Box, vec::Vec};
7#[cfg(feature = "nightly")]
8extern crate alloc as alloc_crate;
9#[cfg(feature = "nightly")]
10use alloc_crate::{alloc::Allocator, boxed::Box, vec::Vec};
11
12#[macro_export]
13macro_rules! make_test {
14    ($($test_name:ident($($arg:expr),* $(,)?)),* $(,)?) => {
15        $(
16            #[test]
17            fn $test_name() {
18                $crate::$test_name($($arg),*);
19            }
20        )*
21    };
22}
23
24pub fn test_allocate_layout<A: Allocator>(alloc: A, layout: Layout) {
25    if let Ok(ptr) = alloc.allocate(layout) {
26        unsafe { alloc.deallocate(ptr.cast(), layout) }
27    }
28}
29
30pub fn test_sizes<A: Allocator>(alloc: A) {
31    test_allocate_layout(&alloc, Layout::new::<u8>());
32    test_allocate_layout(&alloc, Layout::new::<u16>());
33    test_allocate_layout(&alloc, Layout::new::<u32>());
34    test_allocate_layout(&alloc, Layout::new::<u64>());
35    test_allocate_layout(&alloc, Layout::new::<[u8; 17]>());
36    test_allocate_layout(&alloc, Layout::new::<[u8; 67]>());
37    test_allocate_layout(&alloc, Layout::new::<[u8; 129]>());
38    test_allocate_layout(&alloc, Layout::new::<[u8; 654]>());
39    test_allocate_layout(&alloc, Layout::new::<[u8; 2345]>());
40    test_allocate_layout(&alloc, Layout::new::<[u8; 32578]>());
41    test_allocate_layout(&alloc, Layout::new::<[u8; 8603461]>());
42}
43
44pub fn test_vec<A: Allocator>(alloc: A) {
45    let mut vec = Vec::<u8, A>::new_in(alloc);
46
47    vec.push(1);
48    vec.push(2);
49    vec.shrink_to_fit();
50    vec.push(3);
51
52    vec.resize(10, 0xba);
53    vec.shrink_to_fit();
54
55    vec.resize(12467, 0xfe);
56    drop(vec);
57}
58
59pub fn test_many_boxes<A: Allocator + Copy>(alloc: A) {
60    let mut boxes = Vec::new_in(alloc);
61
62    for i in 0..15 {
63        boxes.push(Box::new_in(i, alloc));
64    }
65
66    for i in 0..15 {
67        assert_eq!(*boxes[i], i);
68    }
69
70    drop(boxes);
71}