From e2e13499136295a263e93d566abadb8e4929c016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Wed, 31 May 2023 22:38:50 +0300 Subject: [PATCH] Add support for US teaspoons --- src/conversions.rs | 6 ++++++ src/lib.rs | 2 ++ src/parse.rs | 26 ++++++++++++++++++++++++++ src/units.rs | 1 + 4 files changed, 35 insertions(+) diff --git a/src/conversions.rs b/src/conversions.rs index 1ca7d4e..025b7d1 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::USTeaspoon => Conversion { + offset: 0.0, + from: 6.0 * 16.0 * 2.0 * 4.0 * us_gallon_from, + to: MetricQuantity { amount: us_gallon_to, unit: Metric::Litre }, + }, NonMetric::USTablespoon => Conversion { offset: 0.0, from: 2.0 * 16.0 * 2.0 * 4.0 * us_gallon_from, @@ -228,6 +233,7 @@ mod test { Test(NonMetric::ImperialPint, 0.56826125), Test(NonMetric::ImperialQuart, 1.1365225), Test(NonMetric::ImperialGallon, 4.54609), + Test(NonMetric::USTeaspoon, 0.00492892159375), Test(NonMetric::USTablespoon, 0.01478676478125), Test(NonMetric::USFluidOunce, 0.0295735295625), Test(NonMetric::USCup, 0.2365882365), diff --git a/src/lib.rs b/src/lib.rs index 7ee7a40..d73b240 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::USTeaspoon => "US teaspoons", NonMetric::USTablespoon => "US tablespoons", NonMetric::USFluidOunce => "US fluid ounces", NonMetric::USCup => "US cups", @@ -141,6 +142,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 tsp"), Ok("4.929 ml".to_string())); assert_eq!(run("1 Tbsp"), Ok("1.479 cl".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())); diff --git a/src/parse.rs b/src/parse.rs index 142bcbe..53ad3cd 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -205,6 +205,19 @@ fn parse_unit(input: String) -> Result { "imperial gallons" => Ok(NonMetric::ImperialGallon), "imp gal" => Ok(NonMetric::ImperialGallon), + "US teaspoon" => Ok(NonMetric::USTeaspoon), + "US teaspoons" => Ok(NonMetric::USTeaspoon), + "US tsp." => Ok(NonMetric::USTeaspoon), + "US tsp" => Ok(NonMetric::USTeaspoon), + "us teaspoon" => Ok(NonMetric::USTeaspoon), + "us teaspoons" => Ok(NonMetric::USTeaspoon), + "us tsp." => Ok(NonMetric::USTeaspoon), + "us tsp" => Ok(NonMetric::USTeaspoon), + "teaspoon" => Ok(NonMetric::USTeaspoon), + "teaspoons" => Ok(NonMetric::USTeaspoon), + "tsp." => Ok(NonMetric::USTeaspoon), + "tsp" => Ok(NonMetric::USTeaspoon), + "US tablespoon" => Ok(NonMetric::USTablespoon), "US tablespoons" => Ok(NonMetric::USTablespoon), "US Tbsp." => Ok(NonMetric::USTablespoon), @@ -521,6 +534,19 @@ 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 teaspoon".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("US teaspoons".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("US tsp.".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("US tsp".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("us teaspoon".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("us teaspoons".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("us tsp.".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("us tsp".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("teaspoon".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("teaspoons".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("tsp.".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("tsp".to_string()), Ok(NonMetric::USTeaspoon)); + assert_eq!(parse_unit("US tablespoon".to_string()), Ok(NonMetric::USTablespoon)); assert_eq!(parse_unit("US tablespoons".to_string()), Ok(NonMetric::USTablespoon)); assert_eq!(parse_unit("US Tbsp.".to_string()), Ok(NonMetric::USTablespoon)); diff --git a/src/units.rs b/src/units.rs index 0952fd6..b404352 100644 --- a/src/units.rs +++ b/src/units.rs @@ -34,6 +34,7 @@ pub enum NonMetric { ImperialPint, ImperialQuart, ImperialGallon, + USTeaspoon, USTablespoon, USFluidOunce, USCup,