Simplify parse::test::ambiguous_units

This commit is contained in:
Juhani Krekelä 2023-06-01 02:18:55 +03:00
parent f354fbe555
commit a297d87ff1
1 changed files with 19 additions and 77 deletions

View File

@ -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");
}
}
}