use pnc_engine::{parse, value::Value};
#[test]
fn parse_integer() {
let mut stack = Vec::new();
parse::eval_line(&mut stack, "42").unwrap();
assert_eq!(stack, vec![Value::Int(42.into())]);
}
#[test]
fn parse_rational() {
let mut stack = Vec::new();
parse::eval_line(&mut stack, "3 4 /").unwrap(); assert_eq!(
stack,
vec![Value::Rational(num_rational::BigRational::new(
3.into(),
4.into()
))]
);
}
#[test]
fn parse_unknown_token_errors() {
let mut stack = Vec::new();
let err = parse::eval_line(&mut stack, "&").unwrap_err();
assert!(matches!(err, pnc_engine::PncError::Parse(_)));
}
#[test]
fn parse_unknown_command_errors() {
let mut stack = Vec::new();
let err = parse::eval_line(&mut stack, "foo").unwrap_err();
assert!(matches!(err, pnc_engine::PncError::UnknownCommand(_)));
}
#[test]
fn parse_division_by_zero_errors() {
let mut stack = Vec::new();
let err = parse::eval_line(&mut stack, "1 0 /").unwrap_err();
assert!(matches!(err, pnc_engine::PncError::DivisionByZero));
}