stak-vm 0.12.13

Virtual machines for Stak Scheme
Documentation
cfg_select! {
    feature = "float62" => {
        mod float62;
    }
    feature = "float" => {
        mod float64;
    }
    _ => {
        mod integer63;
    }
}

cfg_select! {
    feature = "float62" => {
        pub(crate) use float62::*;
    }
    feature = "float" => {
        pub(crate) use float64::*;
    }
    _ => {
        pub(crate) use integer63::*;
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    const MAXIMUM_CONS: u64 = 424242;
    const MINIMUM_INTEGER: i64 = -424242;
    const MAXIMUM_INTEGER: i64 = 424242;

    #[test]
    fn cons() {
        for cons in 0..MAXIMUM_CONS {
            assert_eq!(unbox_cons(box_cons(cons)), cons);
        }
    }

    #[test]
    fn check_cons() {
        for cons in 0..MAXIMUM_CONS {
            assert!(is_cons(box_cons(cons)));
        }
    }

    #[test]
    fn integer() {
        for integer in MINIMUM_INTEGER..MAXIMUM_INTEGER {
            assert_eq!(to_i64(from_i64(integer)), integer);
        }
    }

    #[test]
    fn float() {
        for integer in MINIMUM_INTEGER..MAXIMUM_INTEGER {
            let float = integer as f64 / 100.0;

            assert_eq!(to_i64(from_f64(float)), float as i64);
        }
    }
}