#[derive(Debug, PartialEq)]
pub enum LengthUnit {
Meter,
Kilometer,
Mile,
Foot,
}
pub fn convert_length(value: f64, from: LengthUnit, to: LengthUnit) -> f64 {
let value_in_meters = match from {
LengthUnit::Meter => value,
LengthUnit::Kilometer => value * 1_000.0,
LengthUnit::Mile => value * 1_609.34,
LengthUnit::Foot => value * 0.3048,
};
match to {
LengthUnit::Meter => value_in_meters,
LengthUnit::Kilometer => value_in_meters / 1_000.0,
LengthUnit::Mile => value_in_meters / 1_609.34,
LengthUnit::Foot => value_in_meters / 0.3048,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_length_conversion() {
assert_eq!(
convert_length(1.0, LengthUnit::Meter, LengthUnit::Kilometer),
0.001
);
assert_eq!(
convert_length(1.0, LengthUnit::Mile, LengthUnit::Foot),
5280.0
);
assert_eq!(
convert_length(1.0, LengthUnit::Foot, LengthUnit::Meter),
0.3048
);
}
}