diff --git a/src/conversions.rs b/src/conversions.rs index c02dde9..1585057 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::USLiquidQuart => Conversion { + offset: 0.0, + from: 4.0 * us_gallon_from, + to: MetricQuantity { amount: us_gallon_to, unit: Metric::Litre }, + }, NonMetric::USGallon => Conversion { offset: 0.0, from: us_gallon_from, @@ -203,6 +208,7 @@ mod test { Test(NonMetric::ImperialPint, 0.56826125), Test(NonMetric::ImperialQuart, 1.1365225), Test(NonMetric::ImperialGallon, 4.54609), + Test(NonMetric::USLiquidQuart, 0.946352946), Test(NonMetric::USGallon, 3.785411784), ]; run_tests(&tests, Metric::Litre); diff --git a/src/lib.rs b/src/lib.rs index d2e1d0a..eb257a9 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::USLiquidQuart => "US liquid quarts", NonMetric::USGallon => "US gallons", } } @@ -136,6 +137,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 qt"), Ok("9.464 dl".to_string())); assert_eq!(run("1 US gal"), Ok("3.785 l".to_string())); } } diff --git a/src/parse.rs b/src/parse.rs index e5fe566..0346989 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -204,6 +204,17 @@ fn parse_unit(input: String) -> Result { "imperial gallons" => Ok(NonMetric::ImperialGallon), "imp gal" => Ok(NonMetric::ImperialGallon), + "US liquid quart" => Ok(NonMetric::USLiquidQuart), + "US liquid quarts" => Ok(NonMetric::USLiquidQuart), + "US quart" => Ok(NonMetric::USLiquidQuart), + "US quarts" => Ok(NonMetric::USLiquidQuart), + "US qt" => Ok(NonMetric::USLiquidQuart), + "us liquid quart" => Ok(NonMetric::USLiquidQuart), + "us liquid quarts" => Ok(NonMetric::USLiquidQuart), + "us quart" => Ok(NonMetric::USLiquidQuart), + "us quarts" => Ok(NonMetric::USLiquidQuart), + "us qt" => Ok(NonMetric::USLiquidQuart), + "US gallon" => Ok(NonMetric::USGallon), "US gallons" => Ok(NonMetric::USGallon), "US gal" => Ok(NonMetric::USGallon), @@ -464,6 +475,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 liquid quart".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("US liquid quarts".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("US quart".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("US quarts".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("US qt".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("us liquid quart".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("us liquid quarts".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("us quart".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("us quarts".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("us qt".to_string()), Ok(NonMetric::USLiquidQuart)); + assert_eq!(parse_unit("US gallon".to_string()), Ok(NonMetric::USGallon)); assert_eq!(parse_unit("US gallons".to_string()), Ok(NonMetric::USGallon)); assert_eq!(parse_unit("US gal".to_string()), Ok(NonMetric::USGallon)); diff --git a/src/units.rs b/src/units.rs index 92ce66c..3d3f5d3 100644 --- a/src/units.rs +++ b/src/units.rs @@ -34,6 +34,7 @@ pub enum NonMetric { ImperialPint, ImperialQuart, ImperialGallon, + USLiquidQuart, USGallon, }