@@ -691,3 +691,41 @@ fn test_pack_too_few_args() {
691
691
let fun_context = get_fun_context ( & module) ;
692
692
let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
693
693
}
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