@@ -54,11 +54,11 @@ fn test_br_true_false_correct_type() {
54
54
Bytecode :: BrFalse ( 0 ) ,
55
55
] {
56
56
let code = vec ! [ Bytecode :: LdTrue , instr] ;
57
- let module = make_module ( code) ;
58
- let fun_context = get_fun_context ( & module) ;
59
- let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
60
- assert ! ( result. is_ok( ) ) ;
61
- }
57
+ let module = make_module ( code) ;
58
+ let fun_context = get_fun_context ( & module) ;
59
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
60
+ assert ! ( result. is_ok( ) ) ;
61
+ }
62
62
}
63
63
64
64
#[ test]
@@ -68,13 +68,13 @@ fn test_br_true_false_wrong_type() {
68
68
Bytecode :: BrFalse ( 0 ) ,
69
69
] {
70
70
let code = vec ! [ Bytecode :: LdU32 ( 0 ) , instr] ;
71
- let module = make_module ( code) ;
72
- let fun_context = get_fun_context ( & module) ;
73
- let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
74
- assert_eq ! (
75
- result. unwrap_err( ) . major_status( ) ,
76
- StatusCode :: BR_TYPE_MISMATCH_ERROR
77
- ) ;
71
+ let module = make_module ( code) ;
72
+ let fun_context = get_fun_context ( & module) ;
73
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
74
+ assert_eq ! (
75
+ result. unwrap_err( ) . major_status( ) ,
76
+ StatusCode :: BR_TYPE_MISMATCH_ERROR
77
+ ) ;
78
78
}
79
79
}
80
80
@@ -86,9 +86,9 @@ fn test_br_true_false_no_arg() {
86
86
Bytecode :: BrFalse ( 0 ) ,
87
87
] {
88
88
let code = vec ! [ instr] ;
89
- let module = make_module ( code) ;
90
- let fun_context = get_fun_context ( & module) ;
91
- let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
89
+ let module = make_module ( code) ;
90
+ let fun_context = get_fun_context ( & module) ;
91
+ let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
92
92
}
93
93
}
94
94
@@ -123,3 +123,61 @@ fn test_abort_no_arg() {
123
123
let fun_context = get_fun_context ( & module) ;
124
124
let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
125
125
}
126
+
127
+
128
+ #[ test]
129
+ fn test_cast_correct_type ( ) {
130
+ for instr in vec ! [
131
+ Bytecode :: CastU8 ,
132
+ Bytecode :: CastU16 ,
133
+ Bytecode :: CastU32 ,
134
+ Bytecode :: CastU64 ,
135
+ Bytecode :: CastU128 ,
136
+ Bytecode :: CastU256 ,
137
+ ] {
138
+ let code = vec ! [ Bytecode :: LdU64 ( 0 ) , instr] ;
139
+ let module = make_module ( code) ;
140
+ let fun_context = get_fun_context ( & module) ;
141
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
142
+ assert ! ( result. is_ok( ) ) ;
143
+ }
144
+ }
145
+
146
+ #[ test]
147
+ fn test_cast_wrong_type ( ) {
148
+ for instr in vec ! [
149
+ Bytecode :: CastU8 ,
150
+ Bytecode :: CastU16 ,
151
+ Bytecode :: CastU32 ,
152
+ Bytecode :: CastU64 ,
153
+ Bytecode :: CastU128 ,
154
+ Bytecode :: CastU256 ,
155
+ ] {
156
+ let code = vec ! [ Bytecode :: LdTrue , instr] ;
157
+ let module = make_module ( code) ;
158
+ let fun_context = get_fun_context ( & module) ;
159
+ let result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
160
+ assert_eq ! (
161
+ result. unwrap_err( ) . major_status( ) ,
162
+ StatusCode :: INTEGER_OP_TYPE_MISMATCH_ERROR
163
+ ) ;
164
+ }
165
+ }
166
+
167
+ #[ test]
168
+ #[ should_panic]
169
+ fn test_cast_no_arg ( ) {
170
+ for instr in vec ! [
171
+ Bytecode :: CastU8 ,
172
+ Bytecode :: CastU16 ,
173
+ Bytecode :: CastU32 ,
174
+ Bytecode :: CastU64 ,
175
+ Bytecode :: CastU128 ,
176
+ Bytecode :: CastU256 ,
177
+ ] {
178
+ let code = vec ! [ instr] ;
179
+ let module = make_module ( code) ;
180
+ let fun_context = get_fun_context ( & module) ;
181
+ let _result = type_safety:: verify ( & module, & fun_context, & mut DummyMeter ) ;
182
+ }
183
+ }
0 commit comments