Skip to content

Commit 7420fe7

Browse files
committed
tests for Unpack operation
1 parent 1483afa commit 7420fe7

File tree

1 file changed

+38
-0
lines changed
  • crates/move-bytecode-verifier/src/type_safety_tests

1 file changed

+38
-0
lines changed

crates/move-bytecode-verifier/src/type_safety_tests/mod.rs

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -691,3 +691,41 @@ fn test_pack_too_few_args() {
691691
let fun_context = get_fun_context(&module);
692692
let _result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
693693
}
694+
695+
696+
#[test]
697+
fn test_unpack_correct_types() {
698+
let code = vec![
699+
Bytecode::LdU32(42), Bytecode::LdTrue,
700+
Bytecode::Pack(StructDefinitionIndex(0)),
701+
Bytecode::Unpack(StructDefinitionIndex(0)),
702+
];
703+
let mut module: CompiledModule = make_module(code);
704+
add_simple_struct(&mut module);
705+
let fun_context = get_fun_context(&module);
706+
let result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
707+
assert!(result.is_ok());
708+
}
709+
710+
#[test]
711+
fn test_unpack_wrong_type() {
712+
let code = vec![Bytecode::LdU32(42), Bytecode::Unpack(StructDefinitionIndex(0))];
713+
let mut module: CompiledModule = make_module(code);
714+
add_simple_struct(&mut module);
715+
let fun_context = get_fun_context(&module);
716+
let result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
717+
assert_eq!(
718+
result.unwrap_err().major_status(),
719+
StatusCode::UNPACK_TYPE_MISMATCH_ERROR
720+
);
721+
}
722+
723+
#[test]
724+
#[should_panic]
725+
fn test_unpack_no_arg() {
726+
let code = vec![Bytecode::Unpack(StructDefinitionIndex(0))];
727+
let mut module: CompiledModule = make_module(code);
728+
add_simple_struct(&mut module);
729+
let fun_context = get_fun_context(&module);
730+
let _result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
731+
}

0 commit comments

Comments
 (0)