use wasm_bindgen::prelude::*; use wasm_bindgen_test::*; #[wasm_bindgen(module = "tests/wasm/variadic.js")] extern "C" { #[wasm_bindgen(variadic)] fn variadic_sum_u8(first: u8, second: u8, rest: &[u8]) -> u8; #[wasm_bindgen(variadic)] fn variadic_sum_u16(first: u16, second: u16, rest: &[u16]) -> u16; #[wasm_bindgen(variadic)] fn variadic_sum_u32(first: u32, second: u32, rest: &[u32]) -> u32; #[wasm_bindgen(variadic)] fn variadic_sum_u64(first: u64, second: u64, rest: &[u64]) -> u64; //#[wasm_bindgen(variadic)] //fn variadic_sum_usize(first: usize, second: usize, rest: &[usize]) -> usize; #[wasm_bindgen(variadic)] fn variadic_sum_i8(first: i8, second: i8, rest: &[i8]) -> i8; #[wasm_bindgen(variadic)] fn variadic_sum_i16(first: i16, second: i16, rest: &[i16]) -> i16; #[wasm_bindgen(variadic)] fn variadic_sum_i32(first: i32, second: i32, rest: &[i32]) -> i32; #[wasm_bindgen(variadic)] fn variadic_sum_i64(first: i64, second: i64, rest: &[i64]) -> i64; //#[wasm_bindgen(variadic)] //fn variadic_sum_isize(first: isize, second: isize, rest: &[isize]) -> isize; #[wasm_bindgen(variadic)] fn variadic_sum_f32(first: f32, second: f32, rest: &[f32]) -> f32; #[wasm_bindgen(variadic)] fn variadic_sum_f64(first: f64, second: f64, rest: &[f64]) -> f64; //#[wasm_bindgen(variadic)] //fn variadic_sum_opt(first: Option, second: Option, rest: &[Option]) -> u32; //#[wasm_bindgen(variadic)] //fn variadic_concat_str(first: &str, second: &str, rest: &[&str]) -> String; //#[wasm_bindgen(variadic)] //fn variadic_concat_string(first: String, // second: String, // rest: Vec) -> String; #[wasm_bindgen(variadic)] fn variadic_sum_rest_vec(first: u8, second: u8, rest: Vec) -> u8; //#[wasm_bindgen(variadic)] //fn variadic_compare_pairs(first: JsValue, second: JsValue, rest: &[JsValue]); //TODO imported type } // ints macro_rules! variadic_test_int { ($fn_name:ident, $extern_name:ident) => { #[wasm_bindgen_test] fn $fn_name() { assert_eq!($extern_name(1, 2, &[]), 3); assert_eq!($extern_name(1, 2, &[3]), 6); assert_eq!($extern_name(1, 2, &[3, 4]), 10); } }; } // The 64 tests throw js `Cannot mix BigInt and other types, use explicit conversions` variadic_test_int!(u8, variadic_sum_u8); variadic_test_int!(u16, variadic_sum_u16); variadic_test_int!(u32, variadic_sum_u32); //variadic_test_int!(u64, variadic_sum_u64); //variadic_test_int!(usize, variadic_sum_usize); variadic_test_int!(i8, variadic_sum_i8); variadic_test_int!(i16, variadic_sum_i16); variadic_test_int!(i32, variadic_sum_i32); //variadic_test_int!(i64, variadic_sum_i64); //variadic_test_int!(isize, variadic_sum_isize); // floats macro_rules! variadic_test_float { ($fn_name:ident, $extern_name:ident) => { #[wasm_bindgen_test] fn $fn_name() { assert_eq!($extern_name(1., 2., &[]), 3.); assert_eq!($extern_name(1., 2., &[3.]), 6.); assert_eq!($extern_name(1., 2., &[3., 4.]), 10.); } }; } variadic_test_float!(f32, variadic_sum_f32); variadic_test_float!(f64, variadic_sum_f64); // strings // `the trait `wasm_bindgen::convert::IntoWasmAbi` is not implemented for `&[&str]` /* #[wasm_bindgen_test] fn str() { assert_eq!(variadic_concat_str("a ", "test", &[]), "a test"); assert_eq!(variadic_concat_str("a", "nother ", &["test"]), "another test"); assert_eq!(variadic_concat_str("yet ", "a", &["nother ", "test"]), "yet another test"); } #[wasm_bindgen_test] fn string() { assert_eq!(variadic_concat_string("a ".into(), "test".into(), vec![]), "a test"); assert_eq!(variadic_concat_string("a".into(), "nother ".into(), vec!["test".into()]), "another test"); assert_eq!(variadic_concat_string("yet ".into(), "a".into(), vec!["nother ".into(), "test".into()]), "yet another test"); } */ // options /* #[wasm_bindgen_test] fn opt() { assert_eq!(variadic_sum_opt(Some(1), None, &[]), 1); assert_eq!(variadic_sum_opt(Some(1), None, &[Some(2)]), 3); assert_eq!(variadic_sum_opt(Some(1), None, &[None, Some(2)]), 3); } */ // vec not slice #[wasm_bindgen_test] fn rest_vec() { assert_eq!(variadic_sum_rest_vec(1, 2, vec![]), 3); assert_eq!(variadic_sum_rest_vec(1, 2, vec![3]), 6); assert_eq!(variadic_sum_rest_vec(1, 2, vec![3, 4]), 10); } // JsValue //#[wasm_bindgen_test] //fn jsvalue() { // variadic_compare_pairs_jsvalue(true, true, vec![]); // variadic_compare_pairs_jsvalue(false, false, vec![3, 3]); //}