pnc-engine 0.2.1

Core engine for PNC: arbitrary-precision RPN evaluation, units, and persistence
Documentation
use pnc_engine::{parse, value::Value};

#[test]
fn sub_ints() {
    let mut stack = Vec::new();
    parse::eval_line(&mut stack, "5 3 -").unwrap();
    assert_eq!(stack, vec![Value::Int(2.into())]);
}

#[test]
fn mul_ints() {
    let mut stack = Vec::new();
    parse::eval_line(&mut stack, "4 5 *").unwrap();
    assert_eq!(stack, vec![Value::Int(20.into())]);
}

#[test]
fn stack_underflow_errors() {
    let mut stack = Vec::new();
    let err = parse::eval_line(&mut stack, "+").unwrap_err();
    assert!(matches!(err, pnc_engine::PncError::StackUnderflow));
}

#[test]
fn unknown_token_errors() {
    let mut stack = Vec::new();
    let err = parse::eval_line(&mut stack, "&").unwrap_err();
    assert!(matches!(err, pnc_engine::PncError::Parse(_)));
}