use subject_source::vec::compute::*; #[test] pub fn compute_empty() { assert_eq!(compute(&[]), Err(ComputeError::NotEnoughData)); } #[test] pub fn compute_too_many_ops() { assert_eq!( compute(&[Operation::Push(1.0), Operation::Binary(Binary::Add)]), Err(ComputeError::NotEnoughData) ); } #[test] pub fn compute_division_by_zero_push() { assert_eq!( compute(&[ Operation::Push(1.0), Operation::Push(0.0), Operation::Binary(Binary::Div) ]), Err(ComputeError::DivisionByZero) ); } #[test] pub fn compute_division_by_zero_operation() { assert_eq!( compute(&[ Operation::Push(1.0), Operation::Push(1.0), Operation::Push(1.0), Operation::Binary(Binary::Sub), Operation::Binary(Binary::Div) ]), Err(ComputeError::DivisionByZero) ); } #[test] pub fn compute_all_ops() { assert_eq!( compute(&[ Operation::Push(1.0), Operation::Push(3.0), Operation::Push(2.0), Operation::Binary(Binary::Sub), Operation::Push(5.0), Operation::Binary(Binary::Mul), Operation::Binary(Binary::Add), Operation::Push(2.0), Operation::Binary(Binary::Div), ]), Ok(3.0), ); } #[test] pub fn compute_add() { assert_eq!(compute(&[Operation::Push(1.0), Operation::Push(2.0), Operation::Binary(Binary::Add)]), Ok(3.0)); } #[test] pub fn compute_sub() { assert_eq!(compute(&[Operation::Push(1.0), Operation::Push(2.0), Operation::Binary(Binary::Sub)]), Ok(-1.0)); } #[test] pub fn compute_mul() { assert_eq!(compute(&[Operation::Push(3.0), Operation::Push(2.0), Operation::Binary(Binary::Mul)]), Ok(6.0)); } #[test] pub fn compute_div() { assert_eq!(compute(&[Operation::Push(42.0), Operation::Push(7.0), Operation::Binary(Binary::Div)]), Ok(6.0)); }