diff --git a/res/cases/v1/const.wasm b/res/cases/v1/const.wasm new file mode 100644 index 0000000..95d7dc3 Binary files /dev/null and b/res/cases/v1/const.wasm differ diff --git a/res/cases/v1/const.wast b/res/cases/v1/const.wast new file mode 100644 index 0000000..188fb26 --- /dev/null +++ b/res/cases/v1/const.wast @@ -0,0 +1,12 @@ +(module + (type (;0;) (func (result i32))) + (func (;0;) (type 0) (result i32) + i32.const 1024 + i32.const 2048 + i32.const 4096 + i32.const 8192 + i32.const 16384 + i32.const 32767 + return + ) +) diff --git a/src/elements/module.rs b/src/elements/module.rs index 6d90f40..9f89df1 100644 --- a/src/elements/module.rs +++ b/src/elements/module.rs @@ -238,4 +238,20 @@ mod integration_tests { "There should be equal amount of function bodies before and after serialization" ); } + + #[test] + fn const_() { + use super::super::Opcode::*; + + let module = deserialize_file("./res/cases/v1/const.wasm").expect("Should be deserialized"); + let func = &module.code_section().expect("Code section to exist").bodies()[0]; + assert_eq!(func.code().elements().len(), 8); + + assert_eq!(I32Const(1024), func.code().elements()[0]); + assert_eq!(I32Const(2048), func.code().elements()[1]); + assert_eq!(I32Const(4096), func.code().elements()[2]); + assert_eq!(I32Const(8192), func.code().elements()[3]); + assert_eq!(I32Const(16384), func.code().elements()[4]); + assert_eq!(I32Const(32767), func.code().elements()[5]); + } } \ No newline at end of file diff --git a/src/elements/ops.rs b/src/elements/ops.rs index 8566984..3195906 100644 --- a/src/elements/ops.rs +++ b/src/elements/ops.rs @@ -6,7 +6,7 @@ use super::{ }; /// Collection of opcodes (usually inside a block section). -#[derive(Debug)] +#[derive(Debug, PartialEq)] pub struct Opcodes(Vec); impl Opcodes { @@ -88,7 +88,7 @@ impl Deserialize for InitExpr { } /// Opcode -#[derive(Debug)] +#[derive(Debug, PartialEq)] #[allow(missing_docs)] pub enum Opcode { Unreachable,