diff --git a/src/conversions.rs b/src/conversions.rs index 8630d55..de20829 100644 --- a/src/conversions.rs +++ b/src/conversions.rs @@ -110,6 +110,11 @@ fn get_conversion(unit: NonMetric) -> Conversion { from: 4.0 * imperial_gallon_from, to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre }, }, + NonMetric::ImperialPint => Conversion { + offset: 0.0, + from: 2.0 * 4.0 * imperial_gallon_from, + to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre }, + }, } } @@ -183,6 +188,7 @@ mod test { let tests = [ Test(NonMetric::ImperialGallon, 4.54609), Test(NonMetric::ImperialQuart, 1.1365225), + Test(NonMetric::ImperialPint, 0.56826125), ]; run_tests(&tests, Metric::Litre); } diff --git a/src/lib.rs b/src/lib.rs index 33dc895..66866aa 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -87,6 +87,7 @@ fn unit_to_name(unit: NonMetric) -> &'static str { // Fluid volume NonMetric::ImperialGallon => "imperial gallons", NonMetric::ImperialQuart => "imperial quarts", + NonMetric::ImperialPint => "imperial pints", } } @@ -131,5 +132,6 @@ mod test { // 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())); } } diff --git a/src/parse.rs b/src/parse.rs index 547c66c..7232ae5 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -194,6 +194,10 @@ fn parse_unit(input: String) -> Result { "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), + _ => Err(ParseError::UnknownUnit(input)), } } @@ -437,6 +441,10 @@ mod test { 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)); + // 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 72c287e..b848d62 100644 --- a/src/units.rs +++ b/src/units.rs @@ -32,6 +32,7 @@ pub enum NonMetric { // Fluid volume ImperialGallon, ImperialQuart, + ImperialPint, } #[derive(Clone, Copy, Debug, PartialEq)]