diff --git a/src/conversions.rs b/src/conversions.rs index 889e07d..271c775 100644 --- a/src/conversions.rs +++ b/src/conversions.rs @@ -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); } diff --git a/src/lib.rs b/src/lib.rs index fb391ca..13d6972 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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())); } } diff --git a/src/parse.rs b/src/parse.rs index 12aaab9..555ac41 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -186,24 +186,24 @@ fn parse_unit(input: String) -> Result { "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()))); } diff --git a/src/units.rs b/src/units.rs index 794a502..4a69fb5 100644 --- a/src/units.rs +++ b/src/units.rs @@ -30,10 +30,10 @@ pub enum NonMetric { CubicInch, CubicFoot, // Fluid volume - ImperialGallon, - ImperialQuart, - ImperialPint, ImperialFluidOunce, + ImperialPint, + ImperialQuart, + ImperialGallon, } #[derive(Clone, Copy, Debug, PartialEq)]