binaryen_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5mod bindings;
6pub use bindings::*;
7pub mod passes;
8
9#[cfg(test)]
10mod tests {
11    use super::*;
12    use std::ffi::CString;
13    use std::ptr;
14
15    #[test]
16    fn test_fuzz() {
17        let vec: Vec<u8> = vec![0, 1, 2, 3, 4, 5];
18        unsafe {
19            let module = translateToFuzz(vec.as_ptr() as *const i8, vec.len(), true);
20            let result = BinaryenModuleValidate(module);
21            assert!(result != 0);
22        }
23    }
24
25    #[test]
26    fn test_sanity() {
27        // see https://github.com/WebAssembly/binaryen/blob/master/test/example/c-api-hello-world.c
28        unsafe {
29            let module = BinaryenModuleCreate();
30            let mut params = [BinaryenTypeInt32(), BinaryenTypeInt32()];
31
32            let params = BinaryenTypeCreate(params.as_mut_ptr(), 2);
33            let results = BinaryenTypeInt32();
34
35            let x = BinaryenLocalGet(module, 0, BinaryenTypeInt32());
36            let y = BinaryenLocalGet(module, 1, BinaryenTypeInt32());
37            let add = BinaryenBinary(module, BinaryenAddInt32(), x, y);
38
39            let func_name = CString::new("adder").unwrap();
40            let _ = BinaryenAddFunction(
41                module,
42                func_name.as_ptr(),
43                params,
44                results,
45                ptr::null_mut(),
46                0,
47                add,
48            );
49
50            BinaryenModulePrint(module);
51            BinaryenModuleDispose(module);
52        }
53    }
54}