Simplify parse::test::units

This commit is contained in:
Juhani Krekelä 2023-06-01 02:31:59 +03:00
parent a297d87ff1
commit d6e0e95a6a
1 changed files with 245 additions and 189 deletions

View File

@ -413,224 +413,280 @@ mod test {
#[test]
fn units() {
// Length
assert_eq!(parse_unit("inch".to_string()), Ok(NonMetric::Inch));
assert_eq!(parse_unit("inches".to_string()), Ok(NonMetric::Inch));
assert_eq!(parse_unit("in".to_string()), Ok(NonMetric::Inch));
assert_eq!(parse_unit("\"".to_string()), Ok(NonMetric::Inch));
assert_eq!(parse_unit("".to_string()), Ok(NonMetric::Inch));
test_units(NonMetric::Inch, &[
"inch",
"inches",
"in",
"\"",
"",
]);
assert_eq!(parse_unit("foot".to_string()), Ok(NonMetric::Foot));
assert_eq!(parse_unit("feet".to_string()), Ok(NonMetric::Foot));
assert_eq!(parse_unit("ft".to_string()), Ok(NonMetric::Foot));
assert_eq!(parse_unit("'".to_string()), Ok(NonMetric::Foot));
assert_eq!(parse_unit("".to_string()), Ok(NonMetric::Foot));
test_units(NonMetric::Foot, &[
"foot",
"feet",
"ft",
"'",
"",
]);
assert_eq!(parse_unit("yard".to_string()), Ok(NonMetric::Yard));
assert_eq!(parse_unit("yards".to_string()), Ok(NonMetric::Yard));
assert_eq!(parse_unit("yd".to_string()), Ok(NonMetric::Yard));
test_units(NonMetric::Yard, &[
"yard",
"yards",
"yd",
]);
assert_eq!(parse_unit("mile".to_string()), Ok(NonMetric::Mile));
assert_eq!(parse_unit("miles".to_string()), Ok(NonMetric::Mile));
assert_eq!(parse_unit("mi".to_string()), Ok(NonMetric::Mile));
assert_eq!(parse_unit("m".to_string()), Ok(NonMetric::Mile));
test_units(NonMetric::Mile, &[
"mile",
"miles",
"mi",
"m",
]);
// Weight
assert_eq!(parse_unit("ounce".to_string()), Ok(NonMetric::Ounce));
assert_eq!(parse_unit("ounces".to_string()), Ok(NonMetric::Ounce));
assert_eq!(parse_unit("oz".to_string()), Ok(NonMetric::Ounce));
test_units(NonMetric::Ounce, &[
"ounce",
"ounces",
"oz",
]);
assert_eq!(parse_unit("pound".to_string()), Ok(NonMetric::Pound));
assert_eq!(parse_unit("pounds".to_string()), Ok(NonMetric::Pound));
assert_eq!(parse_unit("lb".to_string()), Ok(NonMetric::Pound));
assert_eq!(parse_unit("lbs".to_string()), Ok(NonMetric::Pound));
assert_eq!(parse_unit("#".to_string()), Ok(NonMetric::Pound));
test_units(NonMetric::Pound, &[
"pound",
"pounds",
"lb",
"lbs",
"#",
]);
assert_eq!(parse_unit("stone".to_string()), Ok(NonMetric::Stone));
assert_eq!(parse_unit("stones".to_string()), Ok(NonMetric::Stone));
assert_eq!(parse_unit("st".to_string()), Ok(NonMetric::Stone));
test_units(NonMetric::Stone, &[
"stone",
"stones",
"st",
]);
// Temperature
assert_eq!(parse_unit("degree Fahrenheit".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("degrees Fahrenheit".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("degree fahrenheit".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("degrees fahrenheit".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("Fahrenheit".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("fahrenheit".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("°F".to_string()), Ok(NonMetric::Fahrenheit));
assert_eq!(parse_unit("F".to_string()), Ok(NonMetric::Fahrenheit));
test_units(NonMetric::Fahrenheit, &[
"degree Fahrenheit",
"degrees Fahrenheit",
"degree fahrenheit",
"degrees fahrenheit",
"Fahrenheit",
"fahrenheit",
"°F",
"F",
]);
// Area
assert_eq!(parse_unit("square inch".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("square inches".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("square in".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("sq inch".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("sq inches".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("sq in".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("inch²".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("inches²".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("in²".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("\"²".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("″²".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("inch^2".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("inches^2".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("in^2".to_string()), Ok(NonMetric::SquareInch));
assert_eq!(parse_unit("\"^2".to_string()), Ok(NonMetric::SquareInch));
test_units(NonMetric::SquareInch, &[
"square inch",
"square inches",
"square in",
"sq inch",
"sq inches",
"sq in",
"inch²",
"inches²",
"in²",
"\"²",
"″²",
"inch^2",
"inches^2",
"in^2",
"\"^2",
]);
assert_eq!(parse_unit("square foot".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("square feet".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("square ft".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("sq foot".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("sq feet".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("sq ft".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("foot²".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("feet²".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("ft²".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("′²".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("foot^2".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("feet^2".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("ft^2".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("'^2".to_string()), Ok(NonMetric::SquareFoot));
assert_eq!(parse_unit("sf".to_string()), Ok(NonMetric::SquareFoot));
test_units(NonMetric::SquareFoot, &[
"square foot",
"square feet",
"square ft",
"sq foot",
"sq feet",
"sq ft",
"foot²",
"feet²",
"ft²",
"",
"′²",
"foot^2",
"feet^2",
"ft^2",
"'^2",
"sf",
]);
assert_eq!(parse_unit("acre".to_string()), Ok(NonMetric::Acre));
assert_eq!(parse_unit("acres".to_string()), Ok(NonMetric::Acre));
assert_eq!(parse_unit("ac".to_string()), Ok(NonMetric::Acre));
test_units(NonMetric::Acre, &[
"acre",
"acres",
"ac",
]);
assert_eq!(parse_unit("square mile".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("square miles".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("square mi".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("sq mile".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("sq miles".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("sq mi".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("mile²".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("miles²".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("mi²".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("mile^2".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("miles^2".to_string()), Ok(NonMetric::SquareMile));
assert_eq!(parse_unit("mi^2".to_string()), Ok(NonMetric::SquareMile));
test_units(NonMetric::SquareMile, &[
"square mile",
"square miles",
"square mi",
"sq mile",
"sq miles",
"sq mi",
"mile²",
"miles²",
"mi²",
"mile^2",
"miles^2",
"mi^2",
]);
// Volume
assert_eq!(parse_unit("cubic inch".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("cubic inches".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("cubic in".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("cu inch".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("cu inches".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("cu in".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("inch³".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("inches³".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("in³".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("inch^3".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("inches^3".to_string()), Ok(NonMetric::CubicInch));
assert_eq!(parse_unit("in^3".to_string()), Ok(NonMetric::CubicInch));
test_units(NonMetric::CubicInch, &[
"cubic inch",
"cubic inches",
"cubic in",
"cu inch",
"cu inches",
"cu in",
"inch³",
"inches³",
"in³",
"inch^3",
"inches^3",
"in^3",
]);
assert_eq!(parse_unit("cubic foot".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("cubic feet".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("cubic ft".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("cu foot".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("cu feet".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("cu ft".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("foot³".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("feet³".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("ft³".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("foot^3".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("feet^3".to_string()), Ok(NonMetric::CubicFoot));
assert_eq!(parse_unit("ft^3".to_string()), Ok(NonMetric::CubicFoot));
test_units(NonMetric::CubicFoot, &[
"cubic foot",
"cubic feet",
"cubic ft",
"cu foot",
"cu feet",
"cu ft",
"foot³",
"feet³",
"ft³",
"foot^3",
"feet^3",
"ft^3",
]);
// Fluid volume
assert_eq!(parse_unit("imperial fluid ounce".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imperial fluid ounces".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imp fl oz".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imp fl. oz.".to_string()), Ok(NonMetric::ImperialFluidOunce));
assert_eq!(parse_unit("imp oz. fl.".to_string()), Ok(NonMetric::ImperialFluidOunce));
test_units(NonMetric::ImperialFluidOunce, &[
"imperial fluid ounce",
"imperial fluid ounces",
"imp fl oz",
"imp fl. oz.",
"imp oz. fl.",
]);
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));
assert_eq!(parse_unit("imp p".to_string()), Ok(NonMetric::ImperialPint));
test_units(NonMetric::ImperialPint, &[
"imperial pint",
"imperial pints",
"imp pt",
"imp p",
]);
assert_eq!(parse_unit("imperial quart".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imperial quarts".to_string()), Ok(NonMetric::ImperialQuart));
assert_eq!(parse_unit("imp qt".to_string()), Ok(NonMetric::ImperialQuart));
test_units(NonMetric::ImperialQuart, &[
"imperial quart",
"imperial quarts",
"imp qt",
]);
assert_eq!(parse_unit("imperial gallon".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imperial gallons".to_string()), Ok(NonMetric::ImperialGallon));
assert_eq!(parse_unit("imp gal".to_string()), Ok(NonMetric::ImperialGallon));
test_units(NonMetric::ImperialGallon, &[
"imperial gallon",
"imperial gallons",
"imp gal",
]);
assert_eq!(parse_unit("US teaspoon".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("US teaspoons".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("US tsp.".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("US tsp".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("us teaspoon".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("us teaspoons".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("us tsp.".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("us tsp".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("teaspoon".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("teaspoons".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("tsp.".to_string()), Ok(NonMetric::USTeaspoon));
assert_eq!(parse_unit("tsp".to_string()), Ok(NonMetric::USTeaspoon));
test_units(NonMetric::USTeaspoon, &[
"US teaspoon",
"US teaspoons",
"US tsp.",
"US tsp",
"us teaspoon",
"us teaspoons",
"us tsp.",
"us tsp",
"teaspoon",
"teaspoons",
"tsp.",
"tsp",
]);
assert_eq!(parse_unit("US tablespoon".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("US tablespoons".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("US Tbsp.".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("US Tbsp".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("us tablespoon".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("us tablespoons".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("us tbsp.".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("us tbsp".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("tablespoon".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("tablespoons".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("Tbsp.".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("Tbsp".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("tbsp.".to_string()), Ok(NonMetric::USTablespoon));
assert_eq!(parse_unit("tbsp".to_string()), Ok(NonMetric::USTablespoon));
test_units(NonMetric::USTablespoon, &[
"US tablespoon",
"US tablespoons",
"US Tbsp.",
"US Tbsp",
"us tablespoon",
"us tablespoons",
"us tbsp.",
"us tbsp",
"tablespoon",
"tablespoons",
"Tbsp.",
"Tbsp",
"tbsp.",
"tbsp",
]);
assert_eq!(parse_unit("US fluid ounce".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("US fluid ounces".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("US fl oz".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("US fl. oz.".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("US oz. fl.".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("us fluid ounce".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("us fluid ounces".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("us fl oz".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("us fl. oz.".to_string()), Ok(NonMetric::USFluidOunce));
assert_eq!(parse_unit("us oz. fl.".to_string()), Ok(NonMetric::USFluidOunce));
test_units(NonMetric::USFluidOunce, &[
"US fluid ounce",
"US fluid ounces",
"US fl oz",
"US fl. oz.",
"US oz. fl.",
"us fluid ounce",
"us fluid ounces",
"us fl oz",
"us fl. oz.",
"us oz. fl.",
]);
assert_eq!(parse_unit("US cup".to_string()), Ok(NonMetric::USCup));
assert_eq!(parse_unit("US cups".to_string()), Ok(NonMetric::USCup));
assert_eq!(parse_unit("us cup".to_string()), Ok(NonMetric::USCup));
assert_eq!(parse_unit("us cups".to_string()), Ok(NonMetric::USCup));
test_units(NonMetric::USCup, &[
"US cup",
"US cups",
"us cup",
"us cups",
]);
assert_eq!(parse_unit("US liquid pint".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("US liquid pints".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("US pint".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("US pints".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("US pt".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("US p".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("us liquid pint".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("us liquid pints".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("us pint".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("us pints".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("us pt".to_string()), Ok(NonMetric::USLiquidPint));
assert_eq!(parse_unit("us p".to_string()), Ok(NonMetric::USLiquidPint));
test_units(NonMetric::USLiquidPint, &[
"US liquid pint",
"US liquid pints",
"US pint",
"US pints",
"US pt",
"US p",
"us liquid pint",
"us liquid pints",
"us pint",
"us pints",
"us pt",
"us p",
]);
assert_eq!(parse_unit("US liquid quart".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("US liquid quarts".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("US quart".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("US quarts".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("US qt".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("us liquid quart".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("us liquid quarts".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("us quart".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("us quarts".to_string()), Ok(NonMetric::USLiquidQuart));
assert_eq!(parse_unit("us qt".to_string()), Ok(NonMetric::USLiquidQuart));
test_units(NonMetric::USLiquidQuart, &[
"US liquid quart",
"US liquid quarts",
"US quart",
"US quarts",
"US qt",
"us liquid quart",
"us liquid quarts",
"us quart",
"us quarts",
"us qt",
]);
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));
test_units(NonMetric::USGallon, &[
"US gallon",
"US gallons",
"US gal",
"us gallon",
"us gallons",
"us gal",
]);
}
fn test_units(unit: NonMetric, spellings: &[&str]) {
for spelling in spellings {
assert_eq!(parse_unit(spelling.to_string()), Ok(unit));
}
}
#[test]