Skip to content

Commit 3a9e568

Browse files
Allow TestGoal to hold Expect in addition to a string
1 parent c70735d commit 3a9e568

File tree

2 files changed

+30
-21
lines changed

2 files changed

+30
-21
lines changed

tests/logging_db/util.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ use chalk_solve::ext::*;
1212
use chalk_solve::logging_db::LoggingRustIrDatabase;
1313
use chalk_solve::RustIrDatabase;
1414

15-
use crate::test::{assert_result, TestGoal};
15+
use crate::test::assert_result_str;
16+
17+
type TestGoal = crate::test::TestGoal<&'static str>;
1618

1719
macro_rules! logging_db_output_sufficient {
1820
($($arg:tt)*) => {{
@@ -59,7 +61,7 @@ pub fn logging_db_output_sufficient(
5961
match expected {
6062
TestGoal::Aggregated(expected) => {
6163
let result = solver.solve(&wrapped, &peeled_goal);
62-
assert_result(result, expected, db.interner());
64+
assert_result_str(result, expected, db.interner());
6365
}
6466
_ => panic!("only aggregated test goals supported for logger goals"),
6567
}
@@ -101,7 +103,7 @@ pub fn logging_db_output_sufficient(
101103
match expected {
102104
TestGoal::Aggregated(expected) => {
103105
let result = solver.solve(&db, &peeled_goal);
104-
assert_result(result, expected, db.interner());
106+
assert_result_str(result, expected, db.interner());
105107
}
106108
_ => panic!("only aggregated test goals supported for logger goals"),
107109
}

tests/test/mod.rs

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#![allow(non_snake_case)]
22

3+
use expect_test::{Expect, expect};
4+
35
use crate::test_util::assert_same;
46
use chalk_integration::db::ChalkDatabase;
57
use chalk_integration::interner::ChalkIr;
@@ -17,7 +19,7 @@ mod bench;
1719
mod coherence;
1820
mod wf_lowering;
1921

20-
pub fn assert_result(mut result: Option<Solution<ChalkIr>>, expected: &str, interner: ChalkIr) {
22+
fn format_solution(mut result: Option<Solution<ChalkIr>>, interner: ChalkIr) -> String {
2123
// sort constraints, since the different solvers may output them in different order
2224
match &mut result {
2325
Some(Solution::Unique(solution)) => {
@@ -27,23 +29,31 @@ pub fn assert_result(mut result: Option<Solution<ChalkIr>>, expected: &str, inte
2729
}
2830
_ => {}
2931
}
30-
let result = match result {
32+
match result {
3133
Some(v) => format!("{}", v.display(ChalkIr)),
3234
None => format!("No possible solution"),
33-
};
35+
}
36+
}
37+
38+
pub fn assert_result(result: Option<Solution<ChalkIr>>, expected: &Expect, interner: ChalkIr) {
39+
let result = format_solution(result, interner);
40+
expected.assert_eq(&result);
41+
}
3442

43+
pub fn assert_result_str(result: Option<Solution<ChalkIr>>, expected: &str, interner: ChalkIr) {
44+
let result = format_solution(result, interner);
3545
assert_same(&result, expected);
3646
}
3747

3848
// different goals
3949
#[derive(Clone)]
40-
pub enum TestGoal {
50+
pub enum TestGoal<T = Expect> {
4151
// solver should produce same aggregated single solution
42-
Aggregated(&'static str),
52+
Aggregated(T),
4353
// solver should produce exactly multiple solutions
44-
All(Vec<&'static str>),
54+
All(Vec<T>),
4555
// solver should produce first same multiple solutions
46-
First(Vec<&'static str>),
56+
First(Vec<T>),
4757
}
4858

4959
macro_rules! test {
@@ -267,7 +277,7 @@ fn solve_goal(program_text: &str, goals: Vec<(&str, SolverChoice, TestGoal)>, co
267277

268278
println!("using solver: {:?}", solver_choice);
269279
let peeled_goal = goal.into_peeled_goal(db.interner());
270-
match expected {
280+
match &expected {
271281
TestGoal::Aggregated(expected) => {
272282
let result = db.solve(&peeled_goal);
273283
assert_result(result, expected, db.interner());
@@ -278,13 +288,11 @@ fn solve_goal(program_text: &str, goals: Vec<(&str, SolverChoice, TestGoal)>, co
278288
db.solve_multiple(&peeled_goal, &mut |result, next_result| {
279289
match expected.next() {
280290
Some(expected) => {
281-
assert_same(
282-
&format!(
283-
"{}",
284-
result.as_ref().map(|v| v.display(ChalkIr))
285-
),
286-
expected,
291+
let actual = format!(
292+
"{}",
293+
result.as_ref().map(|v| v.display(ChalkIr))
287294
);
295+
expected.assert_eq(&actual)
288296
}
289297
None => {
290298
assert!(!next_result, "Unexpected next solution");
@@ -304,10 +312,9 @@ fn solve_goal(program_text: &str, goals: Vec<(&str, SolverChoice, TestGoal)>, co
304312
.next()
305313
{
306314
Some(solution) => {
307-
assert_same(
308-
&format!("{}", result.as_ref().map(|v| v.display(ChalkIr))),
309-
solution,
310-
);
315+
let actual =
316+
format!("{}", result.as_ref().map(|v| v.display(ChalkIr)));
317+
solution.assert_eq(&actual);
311318
if !next_result {
312319
assert!(
313320
expected.next().is_none(),

0 commit comments

Comments
 (0)