pnc-engine 0.2.0

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

#[test]
fn parse_unit_bearing_number() {
    let mut stack = Vec::new();
    parse::eval_line(&mut stack, "100 f").unwrap();
    assert_eq!(
        stack,
        vec![Value::Unit {
            number: Box::new(Value::Int(100.into())),
            unit: UnitId::Fahrenheit,
        }]
    );
}

#[test]
fn parse_unit_conversion() {
    let mut stack = Vec::new();
    parse::eval_line(&mut stack, "100 f to c").unwrap();
    match stack.last().unwrap() {
        Value::Unit { number, unit } => {
            assert_eq!(*unit, UnitId::Celsius);
            assert_eq!(
                **number,
                Value::Rational(num_rational::BigRational::new(340.into(), 9.into()))
            );
        }
        _ => panic!("expected unit value"),
    }
}