use miden_processor::{
ExecutionError, ZERO,
event::{EventName, NoopEventHandler},
mast,
operation::OperationError,
};
use miden_utils_testing::{build_op_test, expect_exec_error_matches};
#[test]
fn assert() {
let asm_op = "assert";
let test = build_op_test!(asm_op, &[1]);
test.expect_stack(&[]);
}
#[test]
fn assert_with_code() {
let asm_op = "assert.err=\"123\"";
let test = build_op_test!(asm_op, &[1]);
test.expect_stack(&[]);
let test = build_op_test!(asm_op, &[0]);
let code = mast::error_code_from_msg("123");
expect_exec_error_matches!(
test,
ExecutionError::OperationError{ err: OperationError::FailedAssertion{ err_code, err_msg }, .. }
if err_code == code && err_msg.as_deref() == Some("123")
);
}
#[test]
fn assert_fail() {
let asm_op = "assert";
let test = build_op_test!(asm_op, &[2]);
expect_exec_error_matches!(
test,
ExecutionError::OperationError{ err: OperationError::FailedAssertion{ err_code, .. }, .. }
if err_code == ZERO
);
}
#[test]
fn assert_eq() {
let asm_op = "assert_eq";
let test = build_op_test!(asm_op, &[1, 1]);
test.expect_stack(&[]);
let test = build_op_test!(asm_op, &[3, 3]);
test.expect_stack(&[]);
}
#[test]
fn assert_eq_fail() {
let asm_op = "assert_eq";
let test = build_op_test!(asm_op, &[2, 1]);
expect_exec_error_matches!(
test,
ExecutionError::OperationError{ err: OperationError::FailedAssertion{ err_code, err_msg }, .. }
if err_code == ZERO && err_msg.is_none()
);
let test = build_op_test!(asm_op, &[1, 4]);
expect_exec_error_matches!(
test,
ExecutionError::OperationError{ err: OperationError::FailedAssertion{ err_code, err_msg }, .. }
if err_code == ZERO && err_msg.is_none()
);
}
#[test]
fn emit() {
let event_name = EventName::new("test::emit");
let event_id = event_name.to_event_id().as_felt();
let source = format!("push.{event_id} emit drop");
let test =
build_op_test!(&source, &[0, 0, 0, 0]).with_event_handler(event_name, NoopEventHandler);
test.check_constraints();
}