diff --git a/lib/interface-types/tests/binary.rs b/lib/interface-types/tests/binary.rs new file mode 100644 index 00000000000..233fe342228 --- /dev/null +++ b/lib/interface-types/tests/binary.rs @@ -0,0 +1,46 @@ +use wasmer_interface_types::{ + ast::*, decoders::binary::parse, encoders::binary::ToBytes, interpreter::Instruction, +}; + +/// Tests an AST to binary, then binary to AST roundtrip. +#[test] +fn test_binary_encoding_decoding_roundtrip() { + let original_ast = Interfaces { + exports: vec![Export { + name: "ab", + input_types: vec![InterfaceType::I32], + output_types: vec![InterfaceType::I32], + }], + types: vec![Type::new( + "ab", + vec!["cd", "e"], + vec![InterfaceType::I32, InterfaceType::I32], + )], + imports: vec![Import { + namespace: "a", + name: "b", + input_types: vec![InterfaceType::I32], + output_types: vec![InterfaceType::I64], + }], + adapters: vec![Adapter::Import { + namespace: "a", + name: "b", + input_types: vec![InterfaceType::I32], + output_types: vec![InterfaceType::I32], + instructions: vec![Instruction::ArgumentGet { index: 1 }], + }], + forwards: vec![Forward { name: "a" }], + }; + + let mut binary = vec![]; + + original_ast + .to_bytes(&mut binary) + .expect("Failed to encode the AST."); + + let (remainder, ast) = parse::<()>(binary.as_slice()).expect("Failed to decode the AST."); + + assert!(remainder.is_empty()); + + assert_eq!(original_ast, ast); +}