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);
+}