Skip to content

Commit 8cd8658

Browse files
committed
tests for Or and And operations
1 parent 1ea1ccb commit 8cd8658

File tree

1 file changed

+60
-0
lines changed
  • crates/move-bytecode-verifier/src/type_safety_tests

1 file changed

+60
-0
lines changed

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

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,3 +371,63 @@ fn test_shl_shr_too_few_args() {
371371
let _result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
372372
}
373373
}
374+
375+
376+
#[test]
377+
fn test_or_and_correct_types() {
378+
for instr in vec![
379+
Bytecode::Or,
380+
Bytecode::And,
381+
] {
382+
let code = vec![Bytecode::LdFalse, Bytecode::LdTrue, instr.clone()];
383+
let module = make_module(code);
384+
let fun_context = get_fun_context(&module);
385+
let result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
386+
assert!(result.is_ok());
387+
}
388+
}
389+
390+
#[test]
391+
fn test_or_and_wrong_types() {
392+
for instr in vec![
393+
Bytecode::Or,
394+
Bytecode::And,
395+
] {
396+
let code = vec![Bytecode::LdU32(42), Bytecode::LdTrue, instr.clone()];
397+
let module = make_module(code);
398+
let fun_context = get_fun_context(&module);
399+
let result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
400+
assert_eq!(
401+
result.unwrap_err().major_status(),
402+
StatusCode::BOOLEAN_OP_TYPE_MISMATCH_ERROR
403+
);
404+
405+
let code = vec![Bytecode::LdTrue, Bytecode::LdU64(42), instr.clone()];
406+
let module = make_module(code);
407+
let fun_context = get_fun_context(&module);
408+
let result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
409+
assert_eq!(
410+
result.unwrap_err().major_status(),
411+
StatusCode::BOOLEAN_OP_TYPE_MISMATCH_ERROR
412+
);
413+
}
414+
}
415+
416+
#[test]
417+
#[should_panic]
418+
fn test_or_and_too_few_args() {
419+
for instr in vec![
420+
Bytecode::Or,
421+
Bytecode::And,
422+
] {
423+
let code = vec![Bytecode::LdTrue, instr.clone()];
424+
let module = make_module(code);
425+
let fun_context = get_fun_context(&module);
426+
let _result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
427+
428+
let code = vec![instr.clone()];
429+
let module = make_module(code);
430+
let fun_context = get_fun_context(&module);
431+
let _result = type_safety::verify(&module, &fun_context, &mut DummyMeter);
432+
}
433+
}

0 commit comments

Comments
 (0)