summaryrefslogtreecommitdiff
path: root/tests/src
diff options
context:
space:
mode:
authorbluebear94 <uruwi@protonmail.com>2023-08-02 18:24:25 -0400
committerGitHub <noreply@github.com>2023-08-03 00:24:25 +0200
commit3c94e05cedcb308d83028bfb42e19b29c1201ac1 (patch)
tree2edfa0b8b928d3ad63e26a7aa2a73ec7aa1979a8 /tests/src
parent77cc05b121bef5a7feb62345d19d9c693415d7cd (diff)
Warn if layout doesn't stabilize (#1684)
Diffstat (limited to 'tests/src')
-rw-r--r--tests/src/tests.rs21
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;