use extendr_api::prelude::*;
/// Return a+b to R.
/// @export
#[extendr]
fn add(a:f64,b:f64) -> f64 {
    a+b
}
/// raise panic.
/// @export
#[extendr]
fn panic() -> f64 {
    panic!("error occurs")
}

// Macro to generate exports.
// This ensures exported functions are registered with R.
// See corresponding C code in `entrypoint.c`.
extendr_module! {
    mod rext;
    fn add;
    fn panic;
}
/* test code
 * LC_ALL=C r -e "devtools::load_all('.');system.time(sapply(1:100000,function(x)tryCatch(.Call(wrap__panic),error=I)))" 2>/dev/null && LC_ALL=C r -e "devtools::load_all('.');system.time(sapply(1:1000000,function(x).Call(wrap__add,1.,2.)));system.time(sapply(1:1000000,function(x).Call(wrap__add,1.,2.)))"
 */
