pub struct Calculator {
result: f64,
}
impl Calculator {
pub fn new(initial: f64) -> Self {
Self { result: initial }
}
pub fn add(&mut self, value: f64) -> &mut Self {
self.result += value;
self
}
pub fn subtract(&mut self, value: f64) -> &mut Self {
self.result -= value;
self
}
pub fn multiply(&mut self, value: f64) -> &mut Self {
self.result *= value;
self
}
pub fn divide(&mut self, value: f64) -> Result<&mut Self, &'static str> {
if value == 0.0 {
Err("Division by zero")
} else {
self.result /= value;
Ok(self)
}
}
pub fn get(&self) -> f64 {
self.result
}
pub fn reset(&mut self) {
self.result = 0.0;
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_basic_operations() {
let mut calc = Calculator::new(10.0);
calc.add(5.0).multiply(2.0);
assert_eq!(calc.get(), 30.0);
}
#[test]
fn test_division_by_zero() {
let mut calc = Calculator::new(10.0);
assert!(calc.divide(0.0).is_err());
}
}