1 use wasm_bindgen::prelude::*;
2 use wasm_bindgen_test::*;
3
4 #[wasm_bindgen(module = "tests/wasm/variadic.js")]
5 extern "C" {
6 #[wasm_bindgen(variadic)]
variadic_sum_u8(first: u8, second: u8, rest: &[u8]) -> u87 fn variadic_sum_u8(first: u8, second: u8, rest: &[u8]) -> u8;
8 #[wasm_bindgen(variadic)]
variadic_sum_u16(first: u16, second: u16, rest: &[u16]) -> u169 fn variadic_sum_u16(first: u16, second: u16, rest: &[u16]) -> u16;
10 #[wasm_bindgen(variadic)]
variadic_sum_u32(first: u32, second: u32, rest: &[u32]) -> u3211 fn variadic_sum_u32(first: u32, second: u32, rest: &[u32]) -> u32;
12 #[wasm_bindgen(variadic)]
variadic_sum_u64(first: u64, second: u64, rest: &[u64]) -> u6413 fn variadic_sum_u64(first: u64, second: u64, rest: &[u64]) -> u64;
14 //#[wasm_bindgen(variadic)]
15 //fn variadic_sum_usize(first: usize, second: usize, rest: &[usize]) -> usize;
16 #[wasm_bindgen(variadic)]
variadic_sum_i8(first: i8, second: i8, rest: &[i8]) -> i817 fn variadic_sum_i8(first: i8, second: i8, rest: &[i8]) -> i8;
18 #[wasm_bindgen(variadic)]
variadic_sum_i16(first: i16, second: i16, rest: &[i16]) -> i1619 fn variadic_sum_i16(first: i16, second: i16, rest: &[i16]) -> i16;
20 #[wasm_bindgen(variadic)]
variadic_sum_i32(first: i32, second: i32, rest: &[i32]) -> i3221 fn variadic_sum_i32(first: i32, second: i32, rest: &[i32]) -> i32;
22 #[wasm_bindgen(variadic)]
variadic_sum_i64(first: i64, second: i64, rest: &[i64]) -> i6423 fn variadic_sum_i64(first: i64, second: i64, rest: &[i64]) -> i64;
24 //#[wasm_bindgen(variadic)]
25 //fn variadic_sum_isize(first: isize, second: isize, rest: &[isize]) -> isize;
26 #[wasm_bindgen(variadic)]
variadic_sum_f32(first: f32, second: f32, rest: &[f32]) -> f3227 fn variadic_sum_f32(first: f32, second: f32, rest: &[f32]) -> f32;
28 #[wasm_bindgen(variadic)]
variadic_sum_f64(first: f64, second: f64, rest: &[f64]) -> f6429 fn variadic_sum_f64(first: f64, second: f64, rest: &[f64]) -> f64;
30 //#[wasm_bindgen(variadic)]
31 //fn variadic_sum_opt(first: Option<u32>, second: Option<u32>, rest: &[Option<u32>]) -> u32;
32 //#[wasm_bindgen(variadic)]
33 //fn variadic_concat_str(first: &str, second: &str, rest: &[&str]) -> String;
34 //#[wasm_bindgen(variadic)]
35 //fn variadic_concat_string(first: String,
36 // second: String,
37 // rest: Vec<String>) -> String;
38 #[wasm_bindgen(variadic)]
variadic_sum_rest_vec(first: u8, second: u8, rest: Vec<u8>) -> u839 fn variadic_sum_rest_vec(first: u8, second: u8, rest: Vec<u8>) -> u8;
40 //#[wasm_bindgen(variadic)]
41 //fn variadic_compare_pairs(first: JsValue, second: JsValue, rest: &[JsValue]);
42 //TODO imported type
43 }
44
45 // ints
46
47 macro_rules! variadic_test_int {
48 ($fn_name:ident, $extern_name:ident) => {
49 #[wasm_bindgen_test]
50 fn $fn_name() {
51 assert_eq!($extern_name(1, 2, &[]), 3);
52 assert_eq!($extern_name(1, 2, &[3]), 6);
53 assert_eq!($extern_name(1, 2, &[3, 4]), 10);
54 }
55 };
56 }
57
58 // The <int>64 tests throw js `Cannot mix BigInt and other types, use explicit conversions`
59 variadic_test_int!(u8, variadic_sum_u8);
60 variadic_test_int!(u16, variadic_sum_u16);
61 variadic_test_int!(u32, variadic_sum_u32);
62 //variadic_test_int!(u64, variadic_sum_u64);
63 //variadic_test_int!(usize, variadic_sum_usize);
64 variadic_test_int!(i8, variadic_sum_i8);
65 variadic_test_int!(i16, variadic_sum_i16);
66 variadic_test_int!(i32, variadic_sum_i32);
67 //variadic_test_int!(i64, variadic_sum_i64);
68 //variadic_test_int!(isize, variadic_sum_isize);
69
70 // floats
71
72 macro_rules! variadic_test_float {
73 ($fn_name:ident, $extern_name:ident) => {
74 #[wasm_bindgen_test]
75 fn $fn_name() {
76 assert_eq!($extern_name(1., 2., &[]), 3.);
77 assert_eq!($extern_name(1., 2., &[3.]), 6.);
78 assert_eq!($extern_name(1., 2., &[3., 4.]), 10.);
79 }
80 };
81 }
82
83 variadic_test_float!(f32, variadic_sum_f32);
84 variadic_test_float!(f64, variadic_sum_f64);
85
86 // strings
87
88 // `the trait `wasm_bindgen::convert::IntoWasmAbi` is not implemented for `&[&str]`
89 /*
90 #[wasm_bindgen_test]
91 fn str() {
92 assert_eq!(variadic_concat_str("a ", "test", &[]), "a test");
93 assert_eq!(variadic_concat_str("a", "nother ", &["test"]), "another test");
94 assert_eq!(variadic_concat_str("yet ", "a", &["nother ", "test"]), "yet another test");
95 }
96
97 #[wasm_bindgen_test]
98 fn string() {
99 assert_eq!(variadic_concat_string("a ".into(), "test".into(), vec![]), "a test");
100 assert_eq!(variadic_concat_string("a".into(), "nother ".into(), vec!["test".into()]),
101 "another test");
102 assert_eq!(variadic_concat_string("yet ".into(),
103 "a".into(),
104 vec!["nother ".into(), "test".into()]),
105 "yet another test");
106 }
107 */
108
109 // options
110
111 /*
112 #[wasm_bindgen_test]
113 fn opt() {
114 assert_eq!(variadic_sum_opt(Some(1), None, &[]), 1);
115 assert_eq!(variadic_sum_opt(Some(1), None, &[Some(2)]), 3);
116 assert_eq!(variadic_sum_opt(Some(1), None, &[None, Some(2)]), 3);
117 }
118 */
119
120 // vec not slice
121
122 #[wasm_bindgen_test]
rest_vec()123 fn rest_vec() {
124 assert_eq!(variadic_sum_rest_vec(1, 2, vec![]), 3);
125 assert_eq!(variadic_sum_rest_vec(1, 2, vec![3]), 6);
126 assert_eq!(variadic_sum_rest_vec(1, 2, vec![3, 4]), 10);
127 }
128
129 // JsValue
130 //#[wasm_bindgen_test]
131 //fn jsvalue() {
132 // variadic_compare_pairs_jsvalue(true, true, vec![]);
133 // variadic_compare_pairs_jsvalue(false, false, vec![3, 3]);
134 //}
135