doublysure 0.1.0

Using types to make sure that you're sure, sure, and doubly sure
Documentation
#![cfg(test)]

use crate::*;

#[test]
fn new() {
    AreYouSure::new(1);
}

#[test]
fn value() {
    assert_eq!(
        AreYouSure::new(2).yes_i_am_sure(),
        2
    );
}

#[test]
fn value_macro() {
    let x = make_sure!(3);
    assert_eq!(
        x.yes_i_am_sure(),
        3
    );
}

#[test]
fn deferred_macro() {
    use std::cmp::min;
    let x = make_sure!(min(4, 5));
    assert_eq!(
        x.yes_i_am_sure(),
        4
    );
}

#[test]
fn deferred_namespaced() {
    let x = make_sure!(std::cmp::min(4, 5));
    assert_eq!(
        x.yes_i_am_sure(),
        4
    );
}

#[test]
fn deferred_method() {
    let mut v = Vec::new();
    let x = make_sure!(v.push(5));
    x.yes_i_am_sure();
    assert_eq!(
        v,
        vec![5]
    );
}

fn sideeffecting(val: usize) -> usize {
        println!("{}", val);
        val
}

#[test]
fn deferred_sideffects_macro() {
    let x = make_sure!(sideeffecting(6));
    assert_eq!(
        x.yes_i_am_sure(),
        6
    );
}

#[test]
fn block_deferred_macro() {
    let x = make_sure!({
        let y = 7;
        println!("{}", y);
        y
    });
    assert_eq!(
        x.yes_i_am_sure(),
        7
    );
}

#[test]
fn value_macro_chain() {
    assert_eq!(
        make_sure!(8).yes_i_am_sure(),
        8
    )
}