From a297d87ff14f21471347dbe9b2bc41148c6b9e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Thu, 1 Jun 2023 02:18:55 +0300 Subject: [PATCH] Simplify parse::test::ambiguous_units --- src/parse.rs | 96 +++++++++++----------------------------------------- 1 file changed, 19 insertions(+), 77 deletions(-) diff --git a/src/parse.rs b/src/parse.rs index 18ded43..1fe9396 100644 --- a/src/parse.rs +++ b/src/parse.rs @@ -635,103 +635,45 @@ mod test { #[test] fn ambiguous_units() { - assert_eq!( - parse_unit("fluid ounce".to_string()), - Err(ParseError::AmbiguousUnit("fluid ounce".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("fluid ounces".to_string()), - Err(ParseError::AmbiguousUnit("fluid ounces".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("fl oz".to_string()), - Err(ParseError::AmbiguousUnit("fl oz".to_string(), "imp", "US")) - ); - assert_eq!( - parse_unit("fl. oz.".to_string()), - Err(ParseError::AmbiguousUnit("fl. oz.".to_string(), "imp", "US")) - ); - assert_eq!( - parse_unit("oz. fl.".to_string()), - Err(ParseError::AmbiguousUnit("oz. fl.".to_string(), "imp", "US")) - ); - - assert_eq!( - parse_unit("pint".to_string()), - Err(ParseError::AmbiguousUnit("pint".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("pints".to_string()), - Err(ParseError::AmbiguousUnit("pints".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("pt".to_string()), - Err(ParseError::AmbiguousUnit("pt".to_string(), "imp", "US")) - ); - assert_eq!( - parse_unit("p".to_string()), - Err(ParseError::AmbiguousUnit("p".to_string(), "imp", "US")) - ); - - assert_eq!( - parse_unit("quart".to_string()), - Err(ParseError::AmbiguousUnit("quart".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("quarts".to_string()), - Err(ParseError::AmbiguousUnit("quarts".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("qt".to_string()), - Err(ParseError::AmbiguousUnit("qt".to_string(), "imp", "US")) - ); - - assert_eq!( - parse_unit("gallon".to_string()), - Err(ParseError::AmbiguousUnit("gallon".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("gallons".to_string()), - Err(ParseError::AmbiguousUnit("gallons".to_string(), "imperial", "US")) - ); - assert_eq!( - parse_unit("gal".to_string()), - Err(ParseError::AmbiguousUnit("gal".to_string(), "imp", "US")) - ); - } - - #[test] - fn ambiguous_unit_suggestions() { - let ambiguous_units = [ + test_ambiguous_units(NonMetric::ImperialFluidOunce, NonMetric::USFluidOunce, &[ "fluid ounce", "fluid ounces", "fl oz", "fl. oz.", "oz. fl.", + ]); + test_ambiguous_units(NonMetric::ImperialPint, NonMetric::USLiquidPint, &[ "pint", "pints", "pt", "p", + ]); + test_ambiguous_units(NonMetric::ImperialQuart, NonMetric::USLiquidQuart, &[ "quart", "quarts", "qt", + ]); + test_ambiguous_units(NonMetric::ImperialGallon, NonMetric::USGallon, &[ "gallon", "gallons", "gal", - ]; + ]); + } - for unit in ambiguous_units { - let parsed = parse_unit(unit.to_string()); - if let Err(ParseError::AmbiguousUnit(unit, prefix1, prefix2)) = parsed { - let suggestion1 = format!("{prefix1} {unit}"); - let suggestion2 = format!("{prefix2} {unit}"); - assert!(parse_unit(suggestion1).is_ok()); - assert!(parse_unit(suggestion2).is_ok()); + fn test_ambiguous_units(unit1: NonMetric, unit2: NonMetric, spellings: &[&str]) { + for spelling in spellings { + let parsed = parse_unit(spelling.to_string()); + if let Err(ParseError::AmbiguousUnit(unit_name, prefix1, prefix2)) = parsed { + assert_eq!(&unit_name, spelling); + let suggestion1 = format!("{prefix1} {unit_name}"); + let suggestion2 = format!("{prefix2} {unit_name}"); + assert_eq!(parse_unit(suggestion1), Ok(unit1)); + assert_eq!(parse_unit(suggestion2), Ok(unit2)); } else { - unreachable!(); + panic!("units passed to test_ambiguous_units() must be ambiguous"); } } }