use crate::Unit;
use crate::length::Length;
use crate::length::metric::Meter;
use crate::volume::metric::CubicMeter;
pub mod imperial;
pub mod metric;
pub trait Area: Unit {
fn multiply_length(&self, rhs: &dyn Length) -> CubicMeter {
CubicMeter(self.to_base() * rhs.to_base())
}
fn divide_length(&self, rhs: &dyn Length) -> Meter {
Meter(self.to_base() / rhs.to_base())
}
}
#[cfg(test)]
mod test {
use super::*;
#[test]
fn multiply_with_length() {
let area = metric::SquareMeter(2.0);
let length = crate::length::imperial::Foot(3.0);
let volume = area.multiply_length(&length);
assert!((volume.to_value() - 1.8288).abs() < 1e-5);
}
#[test]
fn divide_by_length() {
let area = metric::SquareMeter(2.0);
let length = crate::length::metric::Meter(4.0);
let result_length = area.divide_length(&length);
assert!((result_length.to_value() - 0.5).abs() < 1e-5);
}
}