@@ -46,8 +46,9 @@ fn get_fun_context(module: &CompiledModule) -> FunctionContext {
46
46
)
47
47
}
48
48
49
+
49
50
#[ test]
50
- fn test_br_true_bool ( ) {
51
+ fn test_br_true_correct_type ( ) {
51
52
let code = vec ! [ Bytecode :: LdTrue , Bytecode :: BrTrue ( 0 ) ] ;
52
53
let module = make_module ( code) ;
53
54
let fun_context = get_fun_context ( & module) ;
@@ -56,7 +57,7 @@ fn test_br_true_bool() {
56
57
}
57
58
58
59
#[ test]
59
- fn test_br_true_u32 ( ) {
60
+ fn test_br_true_wrong_type ( ) {
60
61
let code = vec ! [ Bytecode :: LdU32 ( 0 ) , Bytecode :: BrTrue ( 0 ) ] ;
61
62
let module = make_module ( code) ;
62
63
let fun_context = get_fun_context ( & module) ;
@@ -75,3 +76,35 @@ fn test_br_true_no_arg() {
75
76
let fun_context = get_fun_context ( & module) ;
76
77
let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
77
78
}
79
+
80
+
81
+ #[ test]
82
+ fn test_br_false_correct_type ( ) {
83
+ let code = vec ! [ Bytecode :: LdTrue , Bytecode :: BrFalse ( 0 ) ] ;
84
+ let module = make_module ( code) ;
85
+ let fun_context = get_fun_context ( & module) ;
86
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
87
+ assert ! ( result. is_ok( ) ) ;
88
+ }
89
+
90
+ #[ test]
91
+ fn test_br_false_wrong_type ( ) {
92
+ let code = vec ! [ Bytecode :: LdU32 ( 0 ) , Bytecode :: BrFalse ( 0 ) ] ;
93
+ let module = make_module ( code) ;
94
+ let fun_context = get_fun_context ( & module) ;
95
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
96
+ assert_eq ! (
97
+ result. unwrap_err( ) . major_status( ) ,
98
+ StatusCode :: BR_TYPE_MISMATCH_ERROR
99
+ ) ;
100
+ }
101
+
102
+ #[ test]
103
+ #[ should_panic]
104
+ fn test_br_false_no_arg ( ) {
105
+ let code = vec ! [ Bytecode :: BrFalse ( 0 ) ] ;
106
+ let module = make_module ( code) ;
107
+ let fun_context = get_fun_context ( & module) ;
108
+ let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
109
+ }
110
+
0 commit comments