diff options
| author | bluebear94 <uruwi@protonmail.com> | 2023-08-02 18:24:25 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-03 00:24:25 +0200 |
| commit | 3c94e05cedcb308d83028bfb42e19b29c1201ac1 (patch) | |
| tree | 2edfa0b8b928d3ad63e26a7aa2a73ec7aa1979a8 /tests/src | |
| parent | 77cc05b121bef5a7feb62345d19d9c693415d7cd (diff) | |
Warn if layout doesn't stabilize (#1684)
Diffstat (limited to 'tests/src')
| -rw-r--r-- | tests/src/tests.rs | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/tests/src/tests.rs b/tests/src/tests.rs index a8cf25f7..f7eceead 100644 --- a/tests/src/tests.rs +++ b/tests/src/tests.rs @@ -670,8 +670,14 @@ fn parse_part_metadata(source: &Source) -> TestPartMetadata { compare_ref = get_flag_metadata(line, "Ref").or(compare_ref); validate_hints = get_flag_metadata(line, "Hints").or(validate_hints); - fn num(s: &mut Scanner) -> usize { - s.eat_while(char::is_numeric).parse().unwrap() + fn num(s: &mut Scanner) -> isize { + let mut first = true; + let n = &s.eat_while(|c: char| { + let valid = first && c == '-' || c.is_numeric(); + first = false; + valid + }); + n.parse().unwrap_or_else(|e| panic!("{n} is not a number ({e})")) } let comments_until_code = @@ -681,8 +687,15 @@ fn parse_part_metadata(source: &Source) -> TestPartMetadata { let first = num(s) - 1; let (delta, column) = if s.eat_if(':') { (first, num(s) - 1) } else { (0, first) }; - let line = (i + comments_until_code) + delta; - source.line_column_to_byte(line, column).unwrap() + let line = (i + comments_until_code) + .checked_add_signed(delta) + .expect("line number overflowed limits"); + source + .line_column_to_byte( + line, + usize::try_from(column).expect("column number overflowed limits"), + ) + .unwrap() }; let error_factory: fn(Range<usize>, String) -> UserOutput = UserOutput::error; |
