1
Fork 0

add regression tests

This commit is contained in:
lcnr 2024-02-26 10:46:57 +01:00
parent 2c7ede8f52
commit 1c264ca9ca
2 changed files with 52 additions and 0 deletions

View file

@ -0,0 +1,26 @@
//@ compile-flags: -Znext-solver
//@ check-pass
// Regression test for trait-system-refactor-initiative#84.
//
// We try to infer `T::Rigid: Into<?0>` and have 2 candidates from where-clauses:
//
// - `Into<String>`
// - `Into<<T::Rigid as Elaborate>::Assoc>`
//
// This causes ambiguity unless we normalize the alias in the second candidate
// to detect that they actually result in the same constraints.
trait Trait {
type Rigid: Elaborate<Assoc = String> + Into<String> + Default;
}
trait Elaborate: Into<Self::Assoc> {
type Assoc;
}
fn test<T: Trait>() {
let rigid: T::Rigid = Default::default();
drop(rigid.into());
}
fn main() {}

View file

@ -0,0 +1,26 @@
//@ compile-flags: -Znext-solver
//@ check-pass
// Regression test for trait-system-refactor-initiative#86. This previously
// failed with ambiguity due to multiple candidates with different
// normalization.
trait Bar {
type Item;
type Assoc: AsRef<[Self::Item]>;
}
struct Foo<T: Bar> {
t: <T as Bar>::Assoc,
}
impl<T: Bar<Item = u32>> Foo<T>
where
<T as Bar>::Assoc: AsRef<[u32]>,
{
fn hello(&self) {
println!("{}", self.t.as_ref().len());
}
}
fn main() {}