From ba712e007dbc16503cd24fa676be35a3ad4d8f97 Mon Sep 17 00:00:00 2001 From: Ivan Enderlin Date: Mon, 17 Feb 2020 13:54:12 +0100 Subject: [PATCH] test(interface-types) Test roundtrip: AST to binary to AST. --- lib/interface-types/tests/binary.rs | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 lib/interface-types/tests/binary.rs 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); +}