Resort fluid volume units from smallest to largest for consistency

This commit is contained in:
Juhani Krekelä 2023-05-31 17:21:41 +03:00
parent bec9e494b5
commit 9380d9059a
4 changed files with 45 additions and 45 deletions

View File

@ -100,14 +100,9 @@ fn get_conversion(unit: NonMetric) -> Conversion {
to: MetricQuantity { amount: 12.0 * inch_to * 12.0 * inch_to * 12.0 * inch_to, unit: Metric::CubicMetre },
},
// Fluid volume
NonMetric::ImperialGallon => Conversion {
NonMetric::ImperialFluidOunce => Conversion {
offset: 0.0,
from: imperial_gallon_from,
to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre },
},
NonMetric::ImperialQuart => Conversion {
offset: 0.0,
from: 4.0 * imperial_gallon_from,
from: 20.0 * 2.0 * 4.0 * imperial_gallon_from,
to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre },
},
NonMetric::ImperialPint => Conversion {
@ -115,9 +110,14 @@ fn get_conversion(unit: NonMetric) -> Conversion {
from: 2.0 * 4.0 * imperial_gallon_from,
to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre },
},
NonMetric::ImperialFluidOunce => Conversion {
NonMetric::ImperialQuart => Conversion {
offset: 0.0,
from: 20.0 * 2.0 * 4.0 * imperial_gallon_from,
from: 4.0 * imperial_gallon_from,
to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre },
},
NonMetric::ImperialGallon => Conversion {
offset: 0.0,
from: imperial_gallon_from,
to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre },
},
}
@ -191,10 +191,10 @@ mod test {
#[test]
fn fluid_volume() {
let tests = [
Test(NonMetric::ImperialGallon, 4.54609),
Test(NonMetric::ImperialQuart, 1.1365225),
Test(NonMetric::ImperialPint, 0.56826125),
Test(NonMetric::ImperialFluidOunce, 0.0284130625),
Test(NonMetric::ImperialPint, 0.56826125),
Test(NonMetric::ImperialQuart, 1.1365225),
Test(NonMetric::ImperialGallon, 4.54609),
];
run_tests(&tests, Metric::Litre);
}

View File

@ -85,10 +85,10 @@ fn unit_to_name(unit: NonMetric) -> &'static str {
NonMetric::CubicInch => "cubic inches",
NonMetric::CubicFoot => "cubic feet",
// Fluid volume
NonMetric::ImperialGallon => "imperial gallons",
NonMetric::ImperialQuart => "imperial quarts",
NonMetric::ImperialPint => "imperial pints",
NonMetric::ImperialFluidOunce => "imperial fluid ounces",
NonMetric::ImperialPint => "imperial pints",
NonMetric::ImperialQuart => "imperial quarts",
NonMetric::ImperialGallon => "imperial gallons",
}
}
@ -131,9 +131,9 @@ mod test {
assert_eq!(run("1 in³"), Ok("16.39 cm³".to_string()));
assert_eq!(run("1 ft³"), Ok("28 317 cm³".to_string()));
// Fluid volume
assert_eq!(run("1 imp gal"), Ok("4.546 l".to_string()));
assert_eq!(run("1 imp qt"), Ok("1.137 l".to_string()));
assert_eq!(run("1 imp pt"), Ok("5.683 dl".to_string()));
assert_eq!(run("1 imp fl oz"), Ok("2.841 cl".to_string()));
assert_eq!(run("1 imp pt"), Ok("5.683 dl".to_string()));
assert_eq!(run("1 imp qt"), Ok("1.137 l".to_string()));
assert_eq!(run("1 imp gal"), Ok("4.546 l".to_string()));
}
}

View File

@ -186,24 +186,24 @@ fn parse_unit(input: String) -> Result<NonMetric, ParseError> {
"ft^3" => Ok(NonMetric::CubicFoot),
// Fluid volume
"imperial gallon" => Ok(NonMetric::ImperialGallon),
"imperial gallons" => Ok(NonMetric::ImperialGallon),
"imp gal" => Ok(NonMetric::ImperialGallon),
"imperial quart" => Ok(NonMetric::ImperialQuart),
"imperial quarts" => Ok(NonMetric::ImperialQuart),
"imp qt" => Ok(NonMetric::ImperialQuart),
"imperial pint" => Ok(NonMetric::ImperialPint),
"imperial pints" => Ok(NonMetric::ImperialPint),
"imp pt" => Ok(NonMetric::ImperialPint),
"imperial fluid ounce" => Ok(NonMetric::ImperialFluidOunce),
"imperial fluid ounces" => Ok(NonMetric::ImperialFluidOunce),
"imp fl oz" => Ok(NonMetric::ImperialFluidOunce),
"imp fl. oz." => Ok(NonMetric::ImperialFluidOunce),
"imp oz. fl." => Ok(NonMetric::ImperialFluidOunce),
"imperial pint" => Ok(NonMetric::ImperialPint),
"imperial pints" => Ok(NonMetric::ImperialPint),
"imp pt" => Ok(NonMetric::ImperialPint),
"imperial quart" => Ok(NonMetric::ImperialQuart),
"imperial quarts" => Ok(NonMetric::ImperialQuart),
"imp qt" => Ok(NonMetric::ImperialQuart),
"imperial gallon" => Ok(NonMetric::ImperialGallon),
"imperial gallons" => Ok(NonMetric::ImperialGallon),
"imp gal" => Ok(NonMetric::ImperialGallon),
_ => Err(ParseError::UnknownUnit(input)),
}
}
@ -439,24 +439,24 @@ mod test {
assert_eq!(parse_unit("ft^3".to_string()), Ok(NonMetric::CubicFoot));
// Fluid volume
assert_eq!(parse_unit("imperial gallon".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imperial gallons".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imp gal".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imperial quart".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imperial quarts".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imp qt".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imperial pint".to_string()), Ok(NonMetric::ImperialPint));
assert_eq!(parse_unit("imperial pints".to_string()), Ok(NonMetric::ImperialPint));
assert_eq!(parse_unit("imp pt".to_string()), Ok(NonMetric::ImperialPint));
assert_eq!(parse_unit("imperial fluid ounce".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imperial fluid ounces".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imp fl oz".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imp fl. oz.".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imp oz. fl.".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imperial pint".to_string()), Ok(NonMetric::ImperialPint));
assert_eq!(parse_unit("imperial pints".to_string()), Ok(NonMetric::ImperialPint));
assert_eq!(parse_unit("imp pt".to_string()), Ok(NonMetric::ImperialPint));
assert_eq!(parse_unit("imperial quart".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imperial quarts".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imp qt".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imperial gallon".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imperial gallons".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imp gal".to_string()), Ok(NonMetric::ImperialGallon));
// Unknown unit
assert_eq!(parse_unit("hutenosa".to_string()), Err(ParseError::UnknownUnit("hutenosa".to_string())));
}

View File

@ -30,10 +30,10 @@ pub enum NonMetric {
CubicInch,
CubicFoot,
// Fluid volume
ImperialGallon,
ImperialQuart,
ImperialPint,
ImperialFluidOunce,
ImperialPint,
ImperialQuart,
ImperialGallon,
}
#[derive(Clone, Copy, Debug, PartialEq)]