Refactor number literal tests

This commit is contained in:
Richard Feldman 2019-03-14 21:42:28 -04:00
parent 3926472d4c
commit 6bda934271

View File

@ -36,41 +36,49 @@ mod tests {
}
// NUMBER LITERALS
fn expect_parsed_int<'a>(expected: i64, actual: &str) {
assert_eq!(Ok((Int(expected), "")), parse::number_literal().parse(actual));
}
fn expect_parsed_ratio<'a>(expected_numerator: i64, expected_denominator: u64, actual: &str) {
assert_eq!(Ok((Ratio(expected_numerator, expected_denominator), "")), parse::number_literal().parse(actual));
}
#[test]
fn parse_positive_int() {
assert_eq!(Ok((Int(1234), "")), parse::number_literal().parse("1234"));
expect_parsed_int(1234, "1234");
}
#[test]
fn parse_negative_int() {
assert_eq!(Ok((Int(-1234), "")), parse::number_literal().parse("-1234"));
expect_parsed_int(-1234, "-1234");
}
#[test]
fn parse_positive_ratio() {
assert_eq!(Ok((Ratio(12345, 100), "")), parse::number_literal().parse("123.45"));
assert_eq!(Ok((Ratio(4200, 100), "")), parse::number_literal().parse("42.00"));
expect_parsed_ratio(12345, 100, "123.45");
expect_parsed_ratio(4200, 100, "42.00");
}
#[test]
fn parse_negative_ratio() {
assert_eq!(Ok((Ratio(-1234567, 1000), "")), parse::number_literal().parse("-1234.567"));
assert_eq!(Ok((Ratio(-1920, 10), "")), parse::number_literal().parse("-192.0"));
expect_parsed_ratio(-1234567, 1000, "-1234.567");
expect_parsed_ratio(-1920, 10, "-192.0");
}
#[test]
fn parse_ints_with_spaces() {
assert_eq!(Ok((Int(987654321), "")), parse::number_literal().parse("987 6 5 432 1"));
assert_eq!(Ok((Int(-1234567890), "")), parse::number_literal().parse("-1 234 567 890"));
expect_parsed_int(987654321, "987 6 5 432 1");
expect_parsed_int(-1234567890, "-1 234 567 890");
}
#[test]
fn parse_ratios_with_spaces() {
assert_eq!(Ok((Ratio(-1234567, 1000), "")), parse::number_literal().parse("-1 23 4.567"));
assert_eq!(Ok((Ratio(-1920, 10), "")), parse::number_literal().parse("-19 2.0"));
assert_eq!(Ok((Ratio(12345, 100), "")), parse::number_literal().parse("1 2 3.45"));
assert_eq!(Ok((Ratio(4200, 100), "")), parse::number_literal().parse("4 2.00"));
expect_parsed_ratio(-1234567, 1000, "-1 23 4.567");
expect_parsed_ratio(-1920, 10, "-19 2.0");
expect_parsed_ratio(12345, 100, "1 2 3.45");
expect_parsed_ratio(4200, 100, "4 2.00");
}
#[test]