Test drop_impl_concrete_type_param
Source location: tests/drop.rs:154
#[test]
fn drop_impl_concrete_type_param() {
FormalityTest::new(crates![
crate Foo {
struct MyStruct<T> {
value: T,
}
impl Drop for MyStruct<u32> {}
}
])
.err(expect_test::expect![[r#"
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: MyStruct<!ty_0> = MyStruct<u32>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: MyStruct<!ty_0>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: !ty_0 = u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: MyStruct<u32>, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_via.rs:8:1: no applicable rules for prove_via { goal: u32 = !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: u32, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
crates/formality-rust/src/prove/prove_normalize.rs:54:1: no applicable rules for prove_normalize_via { goal: !ty_0, via: Drop(MyStruct<!ty_0>), assumptions: {Drop(MyStruct<!ty_0>)}, env: Env { variables: [!ty_0], bias: Soundness, pending: [], allow_pending_outlives: false } }
the rule "trait implied bound" at (prove_wc.rs) failed because
expression evaluated to an empty collection: `decls.trait_invariants()`"#]])
}
Rules proved (0)
This test records no positive coverage.
Premises failed (13)
The last column links to the premise’s page when the judgment view counts this failure against that premise. It does not when the premise is read as infallible, or when the failure was blamed inside a multi-line premise that carries no record on its own first line.
| Judgment | Rule | Premise | All tests of this premise |
|---|---|---|---|
| check_drop_impl_always_applicable | Drop impl is always applicable | super::prove_goal(&program, &env, &adt_bound.whe… (line 358) | 3 tests |
| check_all_crates | check all prefixes | for_all(i in 0..crates.len()) (let program = cra… (line 51, blamed at line 53) | not counted by the judgment view |
| check_crate | check crate | for_all(item in &c.items) (check_crate_item(prog… (line 72, blamed at line 73) | not counted by the judgment view |
| check_crate_item | trait impl | check_drop_impl_always_applicable(program, v, cr… (line 194) | 5 tests |
| prove_eq | symmetric | prove_eq(decls, env, assumptions, r, l) => env_c (line 38) | 15 tests |
| prove_eq | rigid | prove(decls, env, assumptions, Wcs::all_eq(a_par… (line 47) | 1 test |
| prove_eq | normalize-l | prove_normalize(decls, env, assumptions, x) => C… (line 68) | 15 tests |
| prove_normalize | normalize-via-assumption | prove_normalize_via(decls, env, assumptions, a, … (line 32) | 10 tests |
| prove_wc | assumption | prove_via(decls, env, assumptions, a, goal) => c (line 48) | 21 tests |
| prove_wc | positive impl | prove(decls, env, co_assumptions, Wcs::all_eq(&t… (line 73) | 7 tests |
| prove_wc | trait implied bound | ti in decls.trait_invariants() (line 109) | 14 tests |
| prove_wc | eq | prove_eq(decls, env, assumptions, a, b) => c (line 119) | 15 tests |
| prove_wc_list | some | prove_wc(decls, env, assumptions, wc0) => c (line 26) | 42 tests |
Proof trees
Failed proof tree
check_all_crates failedmod.rs:41args
rule "check all prefixes"mod.rs:53check_crate failedmod.rs:60args
rule "check crate"mod.rs:73check_crate_item failedmod.rs:178rule "trait impl"mod.rs:194check_drop_impl_always_applicable failedimpls.rs:328rule "Drop impl is always applicable"impls.rs:358prove failedfunction.rs:250args
rulefunction.rs:250prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "positive impl"prove_wc.rs:73prove failedprove_wc.rs:73args
ruleprove_wc.rs:73prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "eq"prove_wc.rs:119prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "rigid"prove_eq.rs:47prove failedprove_eq.rs:47args
ruleprove_eq.rs:47prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "eq"prove_wc.rs:119prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "symmetric"prove_eq.rs:38prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "symmetric"prove_eq.rs:38prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "rigid"prove_eq.rs:47prove failedprove_eq.rs:47args
ruleprove_eq.rs:47prove_wc_list failedprove_wc_list.rs:8args
rule "some"prove_wc_list.rs:26prove_wc failedprove_wc.rs:21args
rule "assumption"prove_wc.rs:48prove_via failedprove_via.rs:8args
rule "eq"prove_wc.rs:119prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "symmetric"prove_eq.rs:38prove_eq failedprove_eq.rs:23args
rule "normalize-l"prove_eq.rs:68prove_normalize failedprove_normalize.rs:18args
rule "normalize-via-assumption"prove_normalize.rs:32prove_normalize_via failedprove_normalize.rs:54args
rule "trait implied bound"prove_wc.rs:109 (failed: empty_collection)