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_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_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_rest_vec(first: u8, second: u8, rest: Vec<u8>) -> u8;
}
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);
}
};
}
variadic_test_int!(u8, variadic_sum_u8);
variadic_test_int!(u16, variadic_sum_u16);
variadic_test_int!(u32, variadic_sum_u32);
variadic_test_int!(i8, variadic_sum_i8);
variadic_test_int!(i16, variadic_sum_i16);
variadic_test_int!(i32, variadic_sum_i32);
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);
#[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);
}