use alloc::vec;
use super::test_helpers::run_script;
use fuel_asm::{
RegId,
op,
};
use fuel_vm::prelude::*;
#[test]
fn jump_if_not_zero_immediate_jump() {
#[rustfmt::skip]
let script_jnzi_does_jump = vec![
op::jnzi(RegId::ONE, 2), op::rvrt(RegId::ONE), op::ret(RegId::ONE), ];
let receipts = run_script(script_jnzi_does_jump);
assert_eq!(receipts.len(), 2);
assert!(matches!(receipts[0], Receipt::Return { .. }));
}
#[test]
fn jump_if_not_zero_immediate_no_jump() {
#[rustfmt::skip]
let script_jnzi_does_not_jump = vec![
op::jnzi(RegId::ZERO, 2), op::rvrt(RegId::ONE), op::ret(RegId::ONE), ];
let receipts = run_script(script_jnzi_does_not_jump);
assert_eq!(receipts.len(), 2);
assert!(matches!(receipts[0], Receipt::Revert { .. }));
}
#[test]
fn jump_dynamic() {
#[rustfmt::skip]
let script = vec![
op::movi(RegId::WRITABLE, 3), op::jmp(RegId::WRITABLE), op::rvrt(RegId::ONE), op::ret(RegId::ONE), ];
let receipts = run_script(script);
assert_eq!(receipts.len(), 2);
assert!(matches!(receipts[0], Receipt::Return { .. }));
}
#[test]
fn jump_dynamic_condition_true() {
#[rustfmt::skip]
let script = vec![
op::movi(RegId::WRITABLE, 3), op::jne(RegId::ZERO, RegId::ONE, RegId::WRITABLE), op::rvrt(RegId::ONE), op::ret(RegId::ONE), ];
let receipts = run_script(script);
assert_eq!(receipts.len(), 2);
assert!(matches!(receipts[0], Receipt::Return { .. }));
}
#[test]
fn jump_dynamic_condition_false() {
#[rustfmt::skip]
let script = vec![
op::movi(RegId::WRITABLE, 3), op::jne(RegId::ZERO, RegId::ZERO, RegId::WRITABLE), op::rvrt(RegId::ONE), op::ret(RegId::ONE), ];
let receipts = run_script(script);
assert_eq!(receipts.len(), 2);
assert!(matches!(receipts[0], Receipt::Revert { .. }));
}