diff --git a/README.md b/README.md index 992795f..cc6e948 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,7 @@ Supported units * square inch (in²) * square foot (ft²) +* square yard (yd²) * acre (ac) * square mile (mi²) diff --git a/src/conversions.rs b/src/conversions.rs index cd6b64d..b152335 100644 --- a/src/conversions.rs +++ b/src/conversions.rs @@ -91,6 +91,11 @@ fn get_conversion(unit: NonMetric) -> Conversion { from: inch_from * inch_from, to: MetricQuantity { amount: 12.0 * inch_to * 12.0 * inch_to, unit: Metric::SquareMetre }, }, + NonMetric::SquareYard => Conversion { + offset: 0.0, + from: inch_from * inch_from, + to: MetricQuantity { amount: 3.0 * 12.0 * inch_to * 3.0 * 12.0 * inch_to, unit: Metric::SquareMetre }, + }, NonMetric::Acre => Conversion { offset: 0.0, from: inch_from * inch_from, @@ -223,6 +228,7 @@ mod test { let tests = [ Test(NonMetric::SquareInch, 0.00064516), Test(NonMetric::SquareFoot, 0.09290304), + Test(NonMetric::SquareYard, 0.83612736), Test(NonMetric::Acre, 4046.8564224), Test(NonMetric::SquareMile, 2589988.110336), ]; diff --git a/src/lib.rs b/src/lib.rs index 5f7648c..09826c7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -84,6 +84,7 @@ fn unit_to_name(unit: NonMetric) -> &'static str { // Area NonMetric::SquareInch => "square inches", NonMetric::SquareFoot => "square feet", + NonMetric::SquareYard => "square yards", NonMetric::Acre => "acres", NonMetric::SquareMile => "square miles", // Volume @@ -140,6 +141,7 @@ mod test { // Area assert_eq!(run("1 in²"), Ok("6.452 cm²".to_string())); assert_eq!(run("1 ft²"), Ok("929 cm²".to_string())); + assert_eq!(run("1 yd²"), Ok("8 361 cm²".to_string())); assert_eq!(run("1 acre"), Ok("4 047 m²".to_string())); assert_eq!(run("1 mi²"), Ok("2.59 km²".to_string())); // Volume diff --git a/src/parse.rs b/src/parse.rs index dc12b3e..86249b5 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -156,6 +156,19 @@ fn parse_unit(input: String) -> Result { "'^2" => Ok(NonMetric::SquareFoot), "sf" => Ok(NonMetric::SquareFoot), + "square yard" => Ok(NonMetric::SquareYard), + "square yards" => Ok(NonMetric::SquareYard), + "square yd" => Ok(NonMetric::SquareYard), + "sq yard" => Ok(NonMetric::SquareYard), + "sq yards" => Ok(NonMetric::SquareYard), + "sq yd" => Ok(NonMetric::SquareYard), + "yard²" => Ok(NonMetric::SquareYard), + "yards²" => Ok(NonMetric::SquareYard), + "yd²" => Ok(NonMetric::SquareYard), + "yard^2" => Ok(NonMetric::SquareYard), + "yards^2" => Ok(NonMetric::SquareYard), + "yd^2" => Ok(NonMetric::SquareYard), + "acre" => Ok(NonMetric::Acre), "acres" => Ok(NonMetric::Acre), "ac" => Ok(NonMetric::Acre), @@ -550,6 +563,21 @@ mod test { "sf", ]); + test_units(NonMetric::SquareYard, &[ + "square yard", + "square yards", + "square yd", + "sq yard", + "sq yards", + "sq yd", + "yard²", + "yards²", + "yd²", + "yard^2", + "yards^2", + "yd^2", + ]); + test_units(NonMetric::Acre, &[ "acre", "acres", diff --git a/src/units.rs b/src/units.rs index 2ed672c..539ae43 100644 --- a/src/units.rs +++ b/src/units.rs @@ -26,6 +26,7 @@ pub enum NonMetric { // Area SquareInch, SquareFoot, + SquareYard, Acre, SquareMile, // Volume