Clean control flow code
This commit is contained in:
parent
519d0cd3a7
commit
150bd2f5cf
13 changed files with 1307 additions and 838 deletions
|
|
@ -685,23 +685,38 @@ pub(super) const FOR_HEADER_FIXTURES: &[Fixture] = &[
|
|||
];
|
||||
|
||||
#[test]
|
||||
fn check_for_header_fixture_counts() {
|
||||
fn check_p0016_for_header_fixture_counts() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0016_01.uc").unwrap().len(), 3);
|
||||
assert_eq!(runs.get("files/P0016_02.uc").unwrap().len(), 2);
|
||||
assert_eq!(runs.get("files/P0016_03.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0016_06.uc").unwrap().len(), 3);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_p0017_for_header_fixture_counts() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0017_01.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0017_02.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0017_04.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0017_05.uc").unwrap().len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_p0018_for_header_fixture_counts() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0018_01.uc").unwrap().len(), 2);
|
||||
assert_eq!(runs.get("files/P0018_02.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0018_03.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0018_06.uc").unwrap().len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_p0019_for_header_fixture_counts() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0019_01.uc").unwrap().len(), 2);
|
||||
assert_eq!(runs.get("files/P0019_02.uc").unwrap().len(), 1);
|
||||
|
|
@ -709,12 +724,22 @@ fn check_for_header_fixture_counts() {
|
|||
assert_eq!(runs.get("files/P0019_04.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0019_06.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0019_07.uc").unwrap().len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_p0020_for_header_fixture_counts() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0020_01.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0020_02.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0020_03.uc").unwrap().len(), 2);
|
||||
assert_eq!(runs.get("files/P0020_04.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0020_08.uc").unwrap().len(), 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn check_p0021_for_header_fixture_counts() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0021_01.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0021_02.uc").unwrap().len(), 1);
|
||||
|
|
@ -1493,7 +1518,7 @@ fn check_p0021_for_header_fixtures() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
fn check_for_header_body_recovery_fixtures() {
|
||||
fn check_p0013_for_header_body_recovery_fixtures() {
|
||||
let runs = run_fixtures(FOR_HEADER_FIXTURES);
|
||||
|
||||
assert_diagnostic(
|
||||
|
|
@ -1590,4 +1615,307 @@ fn check_for_header_body_recovery_fixtures() {
|
|||
notes: &[],
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
pub(super) const P0022_FIXTURES: &[Fixture] = &[
|
||||
Fixture {
|
||||
label: "files/P0022_01.uc",
|
||||
source: "return ] ;",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0022_02.uc",
|
||||
source: "return\n ]\n;\n",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0022_03.uc",
|
||||
source: "return\n}\n",
|
||||
},
|
||||
];
|
||||
|
||||
#[test]
|
||||
fn check_p0022_fixtures() {
|
||||
let runs = run_fixtures(P0022_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0022_01.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0022_02.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0022_03.uc").unwrap().len(), 1);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0022_01.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected return value expression or `;` after `return`, found `]`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0022"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(2),
|
||||
end: TokenPosition(2),
|
||||
},
|
||||
message: "unexpected `]`",
|
||||
}),
|
||||
secondary_labels: &[],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0022_02.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected return value expression or `;` after `return`, found `]`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0022"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(3),
|
||||
end: TokenPosition(3),
|
||||
},
|
||||
message: "unexpected `]`",
|
||||
}),
|
||||
secondary_labels: &[ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(0),
|
||||
end: TokenPosition(0),
|
||||
},
|
||||
message: "after this `return`, a value expression or `;` was expected",
|
||||
}],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0022_03.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected return value expression or `;` after `return`, found `}`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0022"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(2),
|
||||
end: TokenPosition(2),
|
||||
},
|
||||
message: "unexpected `}`",
|
||||
}),
|
||||
secondary_labels: &[ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(0),
|
||||
end: TokenPosition(0),
|
||||
},
|
||||
message: "after this `return`, a value expression or `;` was expected",
|
||||
}],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
pub(super) const P0023_FIXTURES: &[Fixture] = &[
|
||||
Fixture {
|
||||
label: "files/P0023_01.uc",
|
||||
source: "break ] ;",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0023_02.uc",
|
||||
source: "break\n \n\n\n\n ]\n;\n",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0023_03.uc",
|
||||
source: "break\n}\n",
|
||||
},
|
||||
];
|
||||
|
||||
#[test]
|
||||
fn check_p0023_fixtures() {
|
||||
let runs = run_fixtures(P0023_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0023_01.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0023_02.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0023_03.uc").unwrap().len(), 1);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0023_01.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected break value expression or `;` after `break`, found `]`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0023"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(2),
|
||||
end: TokenPosition(2),
|
||||
},
|
||||
message: "unexpected `]`",
|
||||
}),
|
||||
secondary_labels: &[],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0023_02.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected break value expression or `;` after `break`, found `]`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0023"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(8),
|
||||
end: TokenPosition(8),
|
||||
},
|
||||
message: "unexpected `]`",
|
||||
}),
|
||||
secondary_labels: &[ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(0),
|
||||
end: TokenPosition(0),
|
||||
},
|
||||
message: "after this `break`, a value expression or `;` was expected",
|
||||
}],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0023_03.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected break value expression or `;` after `break`, found `}`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0023"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(2),
|
||||
end: TokenPosition(2),
|
||||
},
|
||||
message: "unexpected `}`",
|
||||
}),
|
||||
secondary_labels: &[ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(0),
|
||||
end: TokenPosition(0),
|
||||
},
|
||||
message: "after this `break`, a value expression or `;` was expected",
|
||||
}],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
pub(super) const P0024_FIXTURES: &[Fixture] = &[
|
||||
Fixture {
|
||||
label: "files/P0024_01.uc",
|
||||
source: "goto;",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0024_02.uc",
|
||||
source: "goto\n ;\n",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0024_03.uc",
|
||||
source: "goto\n ]\n;\n",
|
||||
},
|
||||
Fixture {
|
||||
label: "files/P0024_04.uc",
|
||||
source: "goto",
|
||||
},
|
||||
];
|
||||
|
||||
#[test]
|
||||
fn check_p0024_fixtures() {
|
||||
let runs = run_fixtures(P0024_FIXTURES);
|
||||
|
||||
assert_eq!(runs.get("files/P0024_01.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0024_02.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0024_03.uc").unwrap().len(), 1);
|
||||
assert_eq!(runs.get("files/P0024_04.uc").unwrap().len(), 1);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0024_01.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected label after `goto`, found `;`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0024"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(1),
|
||||
end: TokenPosition(1),
|
||||
},
|
||||
message: "unexpected `;`",
|
||||
}),
|
||||
secondary_labels: &[],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0024_02.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected label after `goto`, found `;`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0024"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(3),
|
||||
end: TokenPosition(3),
|
||||
},
|
||||
message: "unexpected `;`",
|
||||
}),
|
||||
secondary_labels: &[ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(0),
|
||||
end: TokenPosition(0),
|
||||
},
|
||||
message: "after this `goto`, a label was expected",
|
||||
}],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0024_03.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected label after `goto`, found `]`",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0024"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(3),
|
||||
end: TokenPosition(3),
|
||||
},
|
||||
message: "unexpected `]`",
|
||||
}),
|
||||
secondary_labels: &[ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(0),
|
||||
end: TokenPosition(0),
|
||||
},
|
||||
message: "after this `goto`, a label was expected",
|
||||
}],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
|
||||
assert_diagnostic(
|
||||
&runs.get_any("files/P0024_04.uc"),
|
||||
&ExpectedDiagnostic {
|
||||
headline: "expected label after `goto`, found end of file",
|
||||
severity: Severity::Error,
|
||||
code: Some("P0024"),
|
||||
primary_label: Some(ExpectedLabel {
|
||||
span: TokenSpan {
|
||||
start: TokenPosition(1),
|
||||
end: TokenPosition(1),
|
||||
},
|
||||
message: "reached end of file here",
|
||||
}),
|
||||
secondary_labels: &[],
|
||||
help: None,
|
||||
notes: &[],
|
||||
},
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue