From 1639748c6868ebe97d298a0de9427c03ad3c2114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Wed, 31 May 2023 22:19:55 +0300 Subject: [PATCH] Add support for US fluid ounces --- src/conversions.rs | 6 ++++++ src/lib.rs | 2 ++ src/parse.rs | 22 ++++++++++++++++++++++ src/units.rs | 1 + 4 files changed, 31 insertions(+) diff --git a/src/conversions.rs b/src/conversions.rs index f8b995d..cf54f3c 100644 --- a/src/conversions.rs +++ b/src/conversions.rs @@ -123,6 +123,11 @@ fn get_conversion(unit: NonMetric) -> Conversion { from: imperial_gallon_from, to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre }, }, + NonMetric::USFluidOunce => Conversion { + offset: 0.0, + from: 16.0 * 2.0 * 4.0 * us_gallon_from, + to: MetricQuantity { amount: us_gallon_to, unit: Metric::Litre }, + }, NonMetric::USCup => Conversion { offset: 0.0, from: 2.0 * 2.0 * 4.0 * us_gallon_from, @@ -218,6 +223,7 @@ mod test { Test(NonMetric::ImperialPint, 0.56826125), Test(NonMetric::ImperialQuart, 1.1365225), Test(NonMetric::ImperialGallon, 4.54609), + Test(NonMetric::USFluidOunce, 0.0295735295625), Test(NonMetric::USCup, 0.2365882365), Test(NonMetric::USLiquidPint, 0.473176473), Test(NonMetric::USLiquidQuart, 0.946352946), diff --git a/src/lib.rs b/src/lib.rs index 173b003..6c01b17 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -89,6 +89,7 @@ fn unit_to_name(unit: NonMetric) -> &'static str { NonMetric::ImperialPint => "imperial pints", NonMetric::ImperialQuart => "imperial quarts", NonMetric::ImperialGallon => "imperial gallons", + NonMetric::USFluidOunce => "US fluid ounces", NonMetric::USCup => "US cups", NonMetric::USLiquidPint => "US liquid pints", NonMetric::USLiquidQuart => "US liquid quarts", @@ -139,6 +140,7 @@ mod test { 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())); + assert_eq!(run("1 US fl oz"), Ok("2.957 cl".to_string())); assert_eq!(run("1 US cup"), Ok("2.366 dl".to_string())); assert_eq!(run("1 US pt"), Ok("4.732 dl".to_string())); assert_eq!(run("1 US qt"), Ok("9.464 dl".to_string())); diff --git a/src/parse.rs b/src/parse.rs index 2636c60..b455bcd 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -205,6 +205,17 @@ fn parse_unit(input: String) -> Result { "imperial gallons" => Ok(NonMetric::ImperialGallon), "imp gal" => Ok(NonMetric::ImperialGallon), + "US fluid ounce" => Ok(NonMetric::USFluidOunce), + "US fluid ounces" => Ok(NonMetric::USFluidOunce), + "US fl oz" => Ok(NonMetric::USFluidOunce), + "US fl. oz." => Ok(NonMetric::USFluidOunce), + "US oz. fl." => Ok(NonMetric::USFluidOunce), + "us fluid ounce" => Ok(NonMetric::USFluidOunce), + "us fluid ounces" => Ok(NonMetric::USFluidOunce), + "us fl oz" => Ok(NonMetric::USFluidOunce), + "us fl. oz." => Ok(NonMetric::USFluidOunce), + "us oz. fl." => Ok(NonMetric::USFluidOunce), + "US cup" => Ok(NonMetric::USCup), "US cups" => Ok(NonMetric::USCup), "us cup" => Ok(NonMetric::USCup), @@ -495,6 +506,17 @@ mod test { 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("US fluid ounce".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("US fluid ounces".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("US fl oz".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("US fl. oz.".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("US oz. fl.".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("us fluid ounce".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("us fluid ounces".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("us fl oz".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("us fl. oz.".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("us oz. fl.".to_string()), Ok(NonMetric::USFluidOunce)); + assert_eq!(parse_unit("US cup".to_string()), Ok(NonMetric::USCup)); assert_eq!(parse_unit("US cups".to_string()), Ok(NonMetric::USCup)); assert_eq!(parse_unit("us cup".to_string()), Ok(NonMetric::USCup)); diff --git a/src/units.rs b/src/units.rs index 1ff7d1d..680fe94 100644 --- a/src/units.rs +++ b/src/units.rs @@ -34,6 +34,7 @@ pub enum NonMetric { ImperialPint, ImperialQuart, ImperialGallon, + USFluidOunce, USCup, USLiquidPint, USLiquidQuart,