Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/consteval/tests.rs')
-rw-r--r--crates/hir-ty/src/consteval/tests.rs39
1 files changed, 30 insertions, 9 deletions
diff --git a/crates/hir-ty/src/consteval/tests.rs b/crates/hir-ty/src/consteval/tests.rs
index 5ab1f97020..b4b5fdd891 100644
--- a/crates/hir-ty/src/consteval/tests.rs
+++ b/crates/hir-ty/src/consteval/tests.rs
@@ -26,9 +26,11 @@ fn simplify(e: ConstEvalError) -> ConstEvalError {
#[track_caller]
fn check_fail(ra_fixture: &str, error: impl FnOnce(ConstEvalError) -> bool) {
let (db, file_id) = TestDB::with_single_file(ra_fixture);
- match eval_goal(&db, file_id).map_err(simplify) {
+ match eval_goal(&db, file_id) {
Ok(_) => panic!("Expected fail, but it succeeded"),
- Err(e) => assert!(error(e)),
+ Err(e) => {
+ assert!(error(simplify(e.clone())), "Actual error was: {}", pretty_print_err(e, db))
+ }
}
}
@@ -38,13 +40,7 @@ fn check_number(ra_fixture: &str, answer: i128) {
let r = match eval_goal(&db, file_id) {
Ok(t) => t,
Err(e) => {
- let mut err = String::new();
- let span_formatter = |file, range| format!("{:?} {:?}", file, range);
- match e {
- ConstEvalError::MirLowerError(e) => e.pretty_print(&mut err, &db, span_formatter),
- ConstEvalError::MirEvalError(e) => e.pretty_print(&mut err, &db, span_formatter),
- }
- .unwrap();
+ let err = pretty_print_err(e, db);
panic!("Error in evaluating goal: {}", err);
}
};
@@ -64,6 +60,17 @@ fn check_number(ra_fixture: &str, answer: i128) {
}
}
+fn pretty_print_err(e: ConstEvalError, db: TestDB) -> String {
+ let mut err = String::new();
+ let span_formatter = |file, range| format!("{:?} {:?}", file, range);
+ match e {
+ ConstEvalError::MirLowerError(e) => e.pretty_print(&mut err, &db, span_formatter),
+ ConstEvalError::MirEvalError(e) => e.pretty_print(&mut err, &db, span_formatter),
+ }
+ .unwrap();
+ err
+}
+
fn eval_goal(db: &TestDB, file_id: FileId) -> Result<Const, ConstEvalError> {
let module_id = db.module_for_file(file_id);
let def_map = module_id.def_map(db);
@@ -2188,6 +2195,20 @@ fn const_trait_assoc() {
}
#[test]
+fn panic_messages() {
+ check_fail(
+ r#"
+ //- minicore: panic
+ const GOAL: u8 = {
+ let x: u16 = 2;
+ panic!("hello");
+ };
+ "#,
+ |e| e == ConstEvalError::MirEvalError(MirEvalError::Panic("hello".to_string())),
+ );
+}
+
+#[test]
fn exec_limits() {
check_fail(
r#"