exowos/subject_source/tests/vec_compute.rs
2025-03-13 22:24:34 +01:00

79 lines
1.9 KiB
Rust

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));
}