From bec9e494b590c596b4cc3713f869f0f541029c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Tue, 30 May 2023 20:34:38 +0300 Subject: [PATCH] Add suport for imperial fluid ounces --- src/conversions.rs | 6 ++++++ src/lib.rs | 2 ++ src/parse.rs | 12 ++++++++++++ src/units.rs | 1 + 4 files changed, 21 insertions(+) diff --git a/src/conversions.rs b/src/conversions.rs index de20829..889e07d 100644 --- a/src/conversions.rs +++ b/src/conversions.rs @@ -115,6 +115,11 @@ 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 { + offset: 0.0, + from: 20.0 * 2.0 * 4.0 * imperial_gallon_from, + to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre }, + }, } } @@ -189,6 +194,7 @@ mod test { Test(NonMetric::ImperialGallon, 4.54609), Test(NonMetric::ImperialQuart, 1.1365225), Test(NonMetric::ImperialPint, 0.56826125), + Test(NonMetric::ImperialFluidOunce, 0.0284130625), ]; run_tests(&tests, Metric::Litre); } diff --git a/src/lib.rs b/src/lib.rs index 66866aa..fb391ca 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -88,6 +88,7 @@ fn unit_to_name(unit: NonMetric) -> &'static str { NonMetric::ImperialGallon => "imperial gallons", NonMetric::ImperialQuart => "imperial quarts", NonMetric::ImperialPint => "imperial pints", + NonMetric::ImperialFluidOunce => "imperial fluid ounces", } } @@ -133,5 +134,6 @@ mod test { 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())); } } diff --git a/src/parse.rs b/src/parse.rs index 7232ae5..12aaab9 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -198,6 +198,12 @@ fn parse_unit(input: String) -> Result { "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), + _ => Err(ParseError::UnknownUnit(input)), } } @@ -445,6 +451,12 @@ mod test { 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)); + // 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 b848d62..794a502 100644 --- a/src/units.rs +++ b/src/units.rs @@ -33,6 +33,7 @@ pub enum NonMetric { ImperialGallon, ImperialQuart, ImperialPint, + ImperialFluidOunce, } #[derive(Clone, Copy, Debug, PartialEq)]