@@ -1028,3 +1028,43 @@ fn test_move_loc_ok() {
1028
1028
let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
1029
1029
assert ! ( result. is_ok( ) ) ;
1030
1030
}
1031
+
1032
+
1033
+ #[ test]
1034
+ fn test_freeze_ref_correct_type ( ) {
1035
+ let code = vec ! [ Bytecode :: MutBorrowLoc ( 0 ) , Bytecode :: FreezeRef ] ;
1036
+ let module = make_module_with_local ( code, SignatureToken :: U64 ) ;
1037
+ let fun_context = get_fun_context ( & module) ;
1038
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
1039
+ assert ! ( result. is_ok( ) ) ;
1040
+ }
1041
+
1042
+ #[ test]
1043
+ fn test_freeze_ref_wrong_type ( ) {
1044
+ let code = vec ! [ Bytecode :: ImmBorrowLoc ( 0 ) , Bytecode :: FreezeRef ] ;
1045
+ let module = make_module_with_local ( code, SignatureToken :: U64 ) ;
1046
+ let fun_context = get_fun_context ( & module) ;
1047
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
1048
+ assert_eq ! (
1049
+ result. unwrap_err( ) . major_status( ) ,
1050
+ StatusCode :: FREEZEREF_TYPE_MISMATCH_ERROR
1051
+ ) ;
1052
+
1053
+ let code = vec ! [ Bytecode :: LdTrue , Bytecode :: FreezeRef ] ;
1054
+ let module = make_module_with_local ( code, SignatureToken :: U64 ) ;
1055
+ let fun_context = get_fun_context ( & module) ;
1056
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
1057
+ assert_eq ! (
1058
+ result. unwrap_err( ) . major_status( ) ,
1059
+ StatusCode :: FREEZEREF_TYPE_MISMATCH_ERROR
1060
+ ) ;
1061
+ }
1062
+
1063
+ #[ test]
1064
+ #[ should_panic]
1065
+ fn test_freeze_ref_no_arg ( ) {
1066
+ let code = vec ! [ Bytecode :: FreezeRef ] ;
1067
+ let module = make_module_with_local ( code, SignatureToken :: U64 ) ;
1068
+ let fun_context = get_fun_context ( & module) ;
1069
+ let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
1070
+ }
0 commit comments