Skip to content

Commit a1466a4

Browse files
committed
add tests for CastU* instructions
1 parent 36466a6 commit a1466a4

File tree

1 file changed

+73
-15
lines changed
  • crates/move-bytecode-verifier/src/type_safety_tests

1 file changed

+73
-15
lines changed

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

Lines changed: 73 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ fn test_br_true_false_correct_type() {
5454
Bytecode::BrFalse(0),
5555
] {
5656
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+
}
6262
}
6363

6464
#[test]
@@ -68,13 +68,13 @@ fn test_br_true_false_wrong_type() {
6868
Bytecode::BrFalse(0),
6969
] {
7070
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+
);
7878
}
7979
}
8080

@@ -86,9 +86,9 @@ fn test_br_true_false_no_arg() {
8686
Bytecode::BrFalse(0),
8787
] {
8888
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);
9292
}
9393
}
9494

@@ -123,3 +123,61 @@ fn test_abort_no_arg() {
123123
let fun_context = get_fun_context(&module);
124124
let _result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
125125
}
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

Comments
 (0)