From d6e0e95a6ad483828c49fb303837aacf6ef93c68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Thu, 1 Jun 2023 02:31:59 +0300 Subject: [PATCH] Simplify parse::test::units --- src/parse.rs | 434 +++++++++++++++++++++++++++++---------------------- 1 file changed, 245 insertions(+), 189 deletions(-) diff --git a/src/parse.rs b/src/parse.rs index 1fe9396..0039ee2 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -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]