diff --git a/src/conversions.rs b/src/conversions.rs index b1138ea..25b5bb3 100644 --- a/src/conversions.rs +++ b/src/conversions.rs @@ -69,6 +69,11 @@ fn get_conversion(unit: NonMetric) -> Conversion { from: pound_from, to: MetricQuantity { amount: 2000.0 * pound_to, unit: Metric::Gram }, }, + NonMetric::LongTon => Conversion { + offset: 0.0, + from: pound_from, + to: MetricQuantity { amount: 2240.0 * pound_to, unit: Metric::Gram }, + }, // Temperature NonMetric::Fahrenheit => Conversion { offset: 32.0, @@ -190,6 +195,7 @@ mod test { Test(NonMetric::Pound, 453.59237), Test(NonMetric::Stone, 6350.29318), Test(NonMetric::ShortTon, 907184.74), + Test(NonMetric::LongTon, 1016046.9088), ]; run_tests(&tests, Metric::Gram); } diff --git a/src/lib.rs b/src/lib.rs index 284d10b..d9a88ab 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -78,6 +78,7 @@ fn unit_to_name(unit: NonMetric) -> &'static str { NonMetric::Pound => "pounds", NonMetric::Stone => "stones", NonMetric::ShortTon => "short tons", + NonMetric::LongTon => "long tons", // Temperature NonMetric::Fahrenheit => "degrees Fahrenheit", // Area @@ -131,6 +132,7 @@ mod test { assert_eq!(run("1 lb"), Ok("453.6 g".to_string())); assert_eq!(run("1 st"), Ok("6.35 kg".to_string())); assert_eq!(run("1 short ton"), Ok("907.2 kg".to_string())); + assert_eq!(run("1 long ton"), Ok("1 016 kg".to_string())); // Temperature assert_eq!(run("-40 °F"), Ok("-40 °C".to_string())); assert_eq!(run("0 °F"), Ok("-17.78 °C".to_string())); diff --git a/src/parse.rs b/src/parse.rs index 3f9d7ac..57bbe43 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -105,6 +105,13 @@ fn parse_unit(input: String) -> Result { "us ton" => Ok(NonMetric::ShortTon), "us tons" => Ok(NonMetric::ShortTon), + "long ton" => Ok(NonMetric::LongTon), + "long tons" => Ok(NonMetric::LongTon), + "imperial ton" => Ok(NonMetric::LongTon), + "imperial tons" => Ok(NonMetric::LongTon), + "imp ton" => Ok(NonMetric::LongTon), + "imp tons" => Ok(NonMetric::LongTon), + // Temperature "degree Fahrenheit" => Ok(NonMetric::Fahrenheit), "degrees Fahrenheit" => Ok(NonMetric::Fahrenheit), @@ -479,6 +486,15 @@ mod test { "us tons", ]); + test_units(NonMetric::LongTon, &[ + "long ton", + "long tons", + "imperial ton", + "imperial tons", + "imp ton", + "imp tons", + ]); + // Temperature test_units(NonMetric::Fahrenheit, &[ "degree Fahrenheit", diff --git a/src/units.rs b/src/units.rs index aced260..94a4f9e 100644 --- a/src/units.rs +++ b/src/units.rs @@ -20,6 +20,7 @@ pub enum NonMetric { Pound, Stone, ShortTon, + LongTon, // Temperature Fahrenheit, // Area