use qtty::velocity::Velocity;
use qtty::{CubicMeter, Kilometer, Meter, Second, SquareMeter};
fn main() {
let width = Meter::new(4.0);
let height = Meter::new(5.0);
let area: SquareMeter = (width * height).to();
println!("4 m × 5 m = {} m²", area.value());
assert!((area.value() - 20.0).abs() < 1e-12);
let depth = Meter::new(3.0);
let vol: CubicMeter = (area * depth).to();
println!("20 m² × 3 m = {} m³", vol.value());
assert!((vol.value() - 60.0).abs() < 1e-12);
let distance = Kilometer::new(100.0);
let time = Second::new(3600.0);
let speed: Velocity<qtty::unit::Kilometer, qtty::unit::Second> = distance / time;
println!("100 km / 3600 s ≈ {:.6} km/s", speed.value());
assert!((speed.value() - 100.0 / 3600.0).abs() < 1e-12);
let recovered: Kilometer = speed * time;
println!(
"{:.6} km/s × 3600 s = {} km",
speed.value(),
recovered.value()
);
assert!((recovered.value() - 100.0).abs() < 1e-9);
let a = Meter::new(10.0);
let b = Meter::new(4.0);
let ratio: f64 = a / b;
println!("10 m / 4 m = {} (dimensionless)", ratio);
assert!((ratio - 2.5).abs() < 1e-12);
let km = Kilometer::new(1.0);
let m = Meter::new(500.0);
let mixed = km / m; println!("1 km / 500 m = {} km/m", mixed.value());
let km_as_m: Meter = km.to();
let pure: f64 = km_as_m / m;
println!(" → as dimensionless = {}", pure);
assert!((pure - 2.0).abs() < 1e-12);
println!("\nAll dimensional arithmetic checks passed!");
}