Add support for US gallons
This commit is contained in:
parent
9380d9059a
commit
8a3002a8ad
|
@ -23,6 +23,9 @@ fn get_conversion(unit: NonMetric) -> Conversion {
|
|||
let imperial_gallon_from = 100_000.0;
|
||||
let imperial_gallon_to = 454609.0;
|
||||
|
||||
let us_gallon_from = inch_from * inch_from * inch_from;
|
||||
let us_gallon_to = 231.0 * inch_to * inch_to * inch_to * 1000.0;
|
||||
|
||||
match unit {
|
||||
// Length
|
||||
NonMetric::Inch => Conversion {
|
||||
|
@ -120,6 +123,11 @@ fn get_conversion(unit: NonMetric) -> Conversion {
|
|||
from: imperial_gallon_from,
|
||||
to: MetricQuantity { amount: imperial_gallon_to, unit: Metric::Litre },
|
||||
},
|
||||
NonMetric::USGallon => Conversion {
|
||||
offset: 0.0,
|
||||
from: us_gallon_from,
|
||||
to: MetricQuantity { amount: us_gallon_to, unit: Metric::Litre },
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -195,6 +203,7 @@ mod test {
|
|||
Test(NonMetric::ImperialPint, 0.56826125),
|
||||
Test(NonMetric::ImperialQuart, 1.1365225),
|
||||
Test(NonMetric::ImperialGallon, 4.54609),
|
||||
Test(NonMetric::USGallon, 3.785411784),
|
||||
];
|
||||
run_tests(&tests, Metric::Litre);
|
||||
}
|
||||
|
|
|
@ -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::USGallon => "US gallons",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,5 +136,6 @@ 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 gal"), Ok("3.785 l".to_string()));
|
||||
}
|
||||
}
|
||||
|
|
14
src/parse.rs
14
src/parse.rs
|
@ -204,6 +204,13 @@ fn parse_unit(input: String) -> Result<NonMetric, ParseError> {
|
|||
"imperial gallons" => Ok(NonMetric::ImperialGallon),
|
||||
"imp gal" => Ok(NonMetric::ImperialGallon),
|
||||
|
||||
"US gallon" => Ok(NonMetric::USGallon),
|
||||
"US gallons" => Ok(NonMetric::USGallon),
|
||||
"US gal" => Ok(NonMetric::USGallon),
|
||||
"us gallon" => Ok(NonMetric::USGallon),
|
||||
"us gallons" => Ok(NonMetric::USGallon),
|
||||
"us gal" => Ok(NonMetric::USGallon),
|
||||
|
||||
_ => Err(ParseError::UnknownUnit(input)),
|
||||
}
|
||||
}
|
||||
|
@ -457,6 +464,13 @@ 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 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));
|
||||
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));
|
||||
|
||||
// Unknown unit
|
||||
assert_eq!(parse_unit("hutenosa".to_string()), Err(ParseError::UnknownUnit("hutenosa".to_string())));
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ pub enum NonMetric {
|
|||
ImperialPint,
|
||||
ImperialQuart,
|
||||
ImperialGallon,
|
||||
USGallon,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
|
|
Loading…
Reference in New Issue