extendr-api 0.3.1

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

#[test]
fn test_debug() {
    test! {
        let r = r!(());
        assert_eq!(format!("{:?}", r), "()");
        let r : Symbol = sym!("xyz").try_into().unwrap();
        assert_eq!(format!("{:?}", r), "sym!(\"xyz\")");
        let r : Pairlist = pairlist!(x=1);
        assert_eq!(format!("{:?}", r), "pairlist!(x=1)");
        let r : Function = R!("function() 1").unwrap().try_into().unwrap();
        assert_eq!(format!("{:?}", r), "function () 1");
        let r = global_env();
        assert_eq!(format!("{:?}", r), "global_env()");
        let r = empty_env();
        assert_eq!(format!("{:?}", r), "empty_env()");
        let r = base_env();
        assert_eq!(format!("{:?}", r), "base_env()");
        let r = Environment::new_with_parent(global_env());
        assert_eq!(format!("{:?}", r), "<environment>");
        let r = Promise::from_parts(r!(1), global_env())?;
        assert_eq!(format!("{:?}", r), "Promise { code: 1, environment: global_env() }");
        let r : Language = lang!("x").try_into()?;
        assert_eq!(format!("{:?}", r), "lang!(sym!(x))");
        let r : Language = lang!("x", 1, 2).try_into()?;
        assert_eq!(format!("{:?}", r), "lang!(sym!(x), 1, 2)");
        let r : Primitive = R!("`+`")?.try_into()?;
        assert_eq!(format!("{:?}", r), "\".Primitive(\\\"+\\\")\"");
        let r : Primitive  = R!("`if`")?.try_into()?;
        assert_eq!(format!("{:?}", r), "\".Primitive(\\\"if\\\")\"");
        let r : Rstr = Rstr::from_string("xyz");
        assert_eq!(format!("{:?}", r), "\"xyz\"");
        let r : Logicals = Logicals::from_values([TRUE]);
        assert_eq!(format!("{:?}", r), "TRUE");
        let r : Logicals = Logicals::from_values([TRUE, FALSE, NA_LOGICAL]);
        assert_eq!(format!("{:?}", r), "[TRUE, FALSE, NA_LOGICAL]");
        let r : Integers = Integers::new(1);
        assert_eq!(format!("{:?}", r), "0");
        let r : Integers = Integers::new(2);
        assert_eq!(format!("{:?}", r), "[0, 0]");
        let r : Doubles = Doubles::new(1);
        assert_eq!(format!("{:?}", r), "0.0");
        let r : Doubles = Doubles::new(2);
        assert_eq!(format!("{:?}", r), "[0.0, 0.0]");
        let r : Strings = Strings::from_values(["xyz"]);
        assert_eq!(format!("{:?}", r), "\"xyz\"");
        let r : Strings = Strings::from_values(["xyz", "abc"]);
        assert_eq!(format!("{:?}", r), "[\"xyz\", \"abc\"]");
        let r : List = list!(a=1, b=2);
        assert_eq!(format!("{:?}", r), "list!(a=1, b=2)");
        let r : List = list!(1, 2);
        assert_eq!(format!("{:?}", r), "list!(1, 2)");
        let r : List = list!(1, b=2);
        assert_eq!(format!("{:?}", r), "list!(1, b=2)");
        let r : Expressions = parse("1 + 2").unwrap();
        assert_eq!(format!("{:?}", r), "Expressions { values: [lang!(sym!(+), 1.0, 2.0)] }");
        let r : Raw = Raw::new(2);
        assert_eq!(format!("{:02x?}", r), "Raw[00, 00]");
        S4::set_class("fred", pairlist!(x="numeric"), r!(()))?;
        let r : S4 = S4::new("fred")?;
        assert_eq!(format!("{:?}", r), "S4");
    }
}