Add support for square yards

This commit is contained in:
Juhani Krekelä 2023-06-01 19:24:11 +03:00
parent b8d9ba177c
commit 8e4680a3bc
5 changed files with 38 additions and 0 deletions

View File

@ -57,6 +57,7 @@ Supported units
* square inch (in²)
* square foot (ft²)
* square yard (yd²)
* acre (ac)
* square mile (mi²)

View File

@ -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),
];

View File

@ -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

View File

@ -156,6 +156,19 @@ fn parse_unit(input: String) -> Result<NonMetric, ParseError> {
"'^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",

View File

@ -26,6 +26,7 @@ pub enum NonMetric {
// Area
SquareInch,
SquareFoot,
SquareYard,
Acre,
SquareMile,
// Volume