extendr-api 0.3.1

Safe and user friendly bindings to the R programming language.
use extendr_api::prelude::*;

#[test]
fn test_float_na_is_na() {
    test! {
        assert!(f64::na().is_na());
        assert!(Rfloat::na().is_na());
    }
}

#[test]
fn test_float_from_bits_is_na() {
    test! {
        let na_bits = 0x7ff00000u64 << 32 | 1954;
        let na_r = Rfloat(unsafe {std::mem::transmute(na_bits)});
        let na_f64 : f64 = unsafe {std::mem::transmute(na_bits)};
        assert!(na_r.is_na());
        assert!(na_f64.is_na());
    }
}

#[test]
fn test_float_not_na_is_not_na() {
    test! {
        assert!(!Rfloat(42f64).is_na());
        assert!(!Rfloat(f64::NAN).is_na());
        assert!(!Rfloat(f64::INFINITY).is_na());
        assert!(!Rfloat(f64::NEG_INFINITY).is_na());
        assert!(!Rfloat(f64::MAX).is_na());
        assert!(!Rfloat(f64::MIN).is_na());
        assert!(!Rfloat(f64::MIN_POSITIVE).is_na());

        assert!(!42f64.is_na());
        assert!(!f64::NAN.is_na());
        assert!(!f64::INFINITY.is_na());
        assert!(!f64::NEG_INFINITY.is_na());
        assert!(!f64::MAX.is_na());
        assert!(!f64::MIN.is_na());
        assert!(!f64::MIN_POSITIVE.is_na());
    }
}