use crate::{Effect, Eval, Script};
#[test]
fn evaluate_positive_integers() {
let script = Script::compile("3 5");
let mut eval = Eval::new();
let (effect, _) = eval.run(&script);
assert_eq!(effect, Effect::OutOfOperators);
assert_eq!(eval.operand_stack.to_i32_slice(), &[3, 5]);
}
#[test]
fn evaluate_negative_integer() {
let script = Script::compile("-1");
let mut eval = Eval::new();
let (effect, _) = eval.run(&script);
assert_eq!(effect, Effect::OutOfOperators);
assert_eq!(eval.operand_stack.to_i32_slice(), &[-1]);
}
#[test]
fn evaluate_hexadecimal_integer() {
let script = Script::compile("0xf0f0");
let mut eval = Eval::new();
let (effect, _) = eval.run(&script);
assert_eq!(effect, Effect::OutOfOperators);
assert_eq!(eval.operand_stack.to_i32_slice(), &[0xf0f0]);
}
#[test]
fn evaluate_full_range_of_unsigned_decimal_integers() {
let script = Script::compile("2147483648");
let mut eval = Eval::new();
let (effect, _) = eval.run(&script);
assert_eq!(effect, Effect::OutOfOperators);
assert_eq!(eval.operand_stack.to_u32_slice(), &[2147483648]);
}
#[test]
fn evaluate_full_range_of_unsigned_hexadecimal_integers() {
let script = Script::compile("0x80000000");
let mut eval = Eval::new();
let (effect, _) = eval.run(&script);
assert_eq!(effect, Effect::OutOfOperators);
assert_eq!(eval.operand_stack.to_u32_slice(), &[0x80000000]);
}
#[test]
fn trigger_effect_on_integer_overflow() {
let script = Script::compile("4294967295 4294967296");
let mut eval = Eval::new();
let effect = eval.step(&script);
assert_eq!(effect, None);
assert_eq!(eval.operand_stack.to_u32_slice(), &[4294967295]);
let effect = eval.step(&script);
assert_eq!(
effect.map(|(effect, _)| effect),
Some(Effect::UnknownIdentifier),
);
assert_eq!(eval.operand_stack.to_u32_slice(), &[4294967295]);
}