diff --git a/src/interpreter/instructions/strings.rs b/src/interpreter/instructions/strings.rs index d84da47..8a40ed2 100644 --- a/src/interpreter/instructions/strings.rs +++ b/src/interpreter/instructions/strings.rs @@ -222,6 +222,42 @@ mod tests { stack: [InterfaceValue::String("".into())], ); + test_executable_instruction!( + test_string_lift_memory__negative_pointer = + instructions: [ + Instruction::ArgumentGet { index: 0 }, + Instruction::ArgumentGet { index: 1 }, + Instruction::StringLiftMemory, + ], + invocation_inputs: [ + InterfaceValue::I32(-42), + InterfaceValue::I32(13), + ], + instance: Instance { + memory: Memory::new("Hello!".as_bytes().iter().map(|u| Cell::new(*u)).collect()), + ..Default::default() + }, + error: r#"`string.lift_memory` read the value of `pointer` which must be positive"#, + ); + + test_executable_instruction!( + test_string_lift_memory__negative_length = + instructions: [ + Instruction::ArgumentGet { index: 0 }, + Instruction::ArgumentGet { index: 1 }, + Instruction::StringLiftMemory, + ], + invocation_inputs: [ + InterfaceValue::I32(0), + InterfaceValue::I32(-1), + ], + instance: Instance { + memory: Memory::new("Hello!".as_bytes().iter().map(|u| Cell::new(*u)).collect()), + ..Default::default() + }, + error: r#"`string.lift_memory` read the value of `length` which must be positive"#, + ); + test_executable_instruction!( test_string_lift_memory__read_out_of_memory = instructions: [