qadapt 1.0.4

The Quick And Dirty Allocation Profiling Tool
Documentation
use qadapt::assert_no_alloc;
use qadapt::QADAPT;

#[global_allocator]
static Q: QADAPT = QADAPT;

#[test]
fn math() {
    let x = assert_no_alloc!(2 + 2);
    assert_eq!(x, 4);
}

// Because the `exit_protected` guard is never run, the compiler
// warns us of unreachable code
#[allow(unreachable_code)]
fn early_return() -> usize {
    assert_no_alloc!(return 8)
}

#[test]
#[should_panic]
fn early_return_boxing() {
    // The release-mode compiler is able to optimize through the Box
    if cfg!(debug_assertions) {
        Box::new(early_return());
    } else {
        panic!("Intentional")
    }
}

#[test]
#[should_panic]
fn list_push() {
    let mut x = Vec::with_capacity(1);
    x.push(1);

    if cfg!(debug_assertions) {
        assert_no_alloc!(x.push(12))
    } else {
        panic!("Intentional")
    }
}