#![allow(dead_code)]
pub mod conversions;
#[cfg(feature = "wasm")]
pub mod wasm;
pub use conversions::*;
#[cfg(test)]
mod tests {
use crate::conversions::*;
#[test]
fn test_length_conversions() {
assert!((convert_length(1.0, "m", "ft").unwrap() - 3.28084).abs() < 0.0001);
assert_eq!(convert_length(1.0, "km", "m").unwrap(), 1000.0);
assert!((convert_length(1.0, "in", "cm").unwrap() - 2.54).abs() < 0.01);
assert!((convert_length(1.0, "mi", "km").unwrap() - 1.60934).abs() < 0.001);
}
#[test]
fn test_weight_conversions() {
assert!((convert_weight(1.0, "kg", "lb").unwrap() - 2.20462).abs() < 0.0001);
assert_eq!(convert_weight(1000.0, "g", "kg").unwrap(), 1.0);
assert!((convert_weight(1.0, "lb", "oz").unwrap() - 16.0).abs() < 0.01);
}
#[test]
fn test_temperature_conversions() {
assert_eq!(convert_temperature(0.0, "C", "F").unwrap(), 32.0);
assert_eq!(convert_temperature(100.0, "C", "F").unwrap(), 212.0);
assert_eq!(convert_temperature(32.0, "F", "C").unwrap(), 0.0);
assert_eq!(convert_temperature(212.0, "F", "C").unwrap(), 100.0);
assert_eq!(convert_temperature(0.0, "C", "K").unwrap(), 273.15);
assert_eq!(convert_temperature(273.15, "K", "C").unwrap(), 0.0);
}
#[test]
fn test_volume_conversions() {
assert!((convert_volume(1.0, "l", "gal").unwrap() - 0.264172).abs() < 0.0001);
assert!((convert_volume(1.0, "gal", "l").unwrap() - 3.78541).abs() < 0.0001);
assert!((convert_volume(1.0, "cup", "ml").unwrap() - 236.588).abs() < 0.1);
}
#[test]
fn test_modular_length_api() {
use crate::conversions::length::*;
assert!((meters::to_feet(1.0) - 3.28084).abs() < 0.0001);
assert!((meters::to_inches(1.0) - 39.3701).abs() < 0.001);
assert!((feet::to_meters(1.0) - 0.3048).abs() < 0.0001);
assert_eq!(feet::to_inches(1.0), 12.0);
let km_to_feet = meters::to_feet(kilometers::to_meters(1.0));
assert!((km_to_feet - 3280.84).abs() < 0.1);
}
#[test]
fn test_modular_volume_api() {
use crate::conversions::volume::*;
assert!((liters::to_gallons_us(1.0) - 0.264172).abs() < 0.0001);
assert_eq!(liters::to_milliliters(1.0), 1000.0);
assert!((gallons_us::to_liters(1.0) - 3.78541).abs() < 0.0001);
assert_eq!(gallons_us::to_fluid_ounces_us(1.0), 128.0);
}
#[test]
fn test_time_conversions() {
assert_eq!(convert_time(60.0, "s", "min").unwrap(), 1.0);
assert_eq!(convert_time(120.0, "min", "h").unwrap(), 2.0);
assert_eq!(convert_time(48.0, "h", "day").unwrap(), 2.0);
assert_eq!(convert_time(1000.0, "ms", "s").unwrap(), 1.0);
}
#[test]
fn test_current_conversions() {
assert_eq!(convert_current(1.0, "A", "mA").unwrap(), 1000.0);
assert_eq!(convert_current(500.0, "mA", "A").unwrap(), 0.5);
assert_eq!(convert_current(1.0, "A", "μA").unwrap(), 1_000_000.0);
assert_eq!(convert_current(1.0, "kA", "A").unwrap(), 1000.0);
}
#[test]
fn test_amount_conversions() {
assert_eq!(convert_amount(1.0, "mol", "mmol").unwrap(), 1000.0);
assert_eq!(convert_amount(500.0, "mmol", "mol").unwrap(), 0.5);
assert_eq!(convert_amount(1.0, "mol", "μmol").unwrap(), 1_000_000.0);
assert_eq!(convert_amount(1.0, "kmol", "mol").unwrap(), 1000.0);
}
#[test]
fn test_luminous_intensity_conversions() {
assert_eq!(
convert_luminous_intensity(1.0, "cd", "mcd").unwrap(),
1000.0
);
assert_eq!(convert_luminous_intensity(500.0, "mcd", "cd").unwrap(), 0.5);
assert_eq!(
convert_luminous_intensity(1000.0, "cd", "kcd").unwrap(),
1.0
);
assert_eq!(convert_luminous_intensity(1.0, "dc", "cd").unwrap(), 1.0);
}
#[test]
fn test_area_conversions() {
assert_eq!(convert_area(1.0, "m²", "cm²").unwrap(), 10_000.0);
assert_eq!(convert_area(1.0, "km²", "m²").unwrap(), 1_000_000.0);
assert_eq!(convert_area(10_000.0, "m²", "ha").unwrap(), 1.0);
assert!((convert_area(1.0, "ac", "m²").unwrap() - 4046.8564224).abs() < 0.001);
assert!((convert_area(1.0, "ft²", "in²").unwrap() - 144.0).abs() < 0.001);
}
#[test]
fn test_same_unit_conversions() {
assert_eq!(convert_length(5.0, "m", "m").unwrap(), 5.0);
assert_eq!(convert_weight(10.0, "kg", "kg").unwrap(), 10.0);
assert_eq!(convert_temperature(25.0, "C", "C").unwrap(), 25.0);
assert_eq!(convert_volume(3.0, "l", "l").unwrap(), 3.0);
assert_eq!(convert_time(60.0, "s", "s").unwrap(), 60.0);
assert_eq!(convert_current(1.5, "A", "A").unwrap(), 1.5);
assert_eq!(convert_amount(0.5, "mol", "mol").unwrap(), 0.5);
assert_eq!(convert_luminous_intensity(2.0, "cd", "cd").unwrap(), 2.0);
assert_eq!(convert_area(100.0, "m²", "m²").unwrap(), 100.0);
}
#[test]
fn test_invalid_units() {
assert!(convert_length(100.0, "invalid", "m").is_err());
assert!(convert_weight(50.0, "kg", "invalid").is_err());
assert!(convert_temperature(25.0, "C", "invalid").is_err());
assert!(convert_volume(10.0, "invalid", "l").is_err());
assert!(convert_time(60.0, "invalid", "s").is_err());
assert!(convert_current(1.0, "A", "invalid").is_err());
assert!(convert_amount(0.5, "mol", "invalid").is_err());
assert!(convert_luminous_intensity(1.0, "cd", "invalid").is_err());
assert!(convert_area(100.0, "m²", "invalid").is_err());
}
}