Skip to content

Commit

Permalink
chore: create a regression test for noir-lang#6420 (noir-lang#6421)
Browse files Browse the repository at this point in the history
  • Loading branch information
TomAFrench authored Oct 31, 2024
1 parent 5ae0dfc commit 59c1a18
Showing 1 changed file with 50 additions and 0 deletions.
50 changes: 50 additions & 0 deletions compiler/noirc_frontend/src/tests/traits.rs
Original file line number Diff line number Diff line change
Expand Up @@ -340,3 +340,53 @@ fn removes_assumed_parent_traits_after_function_ends() {
"#;
assert_no_errors(src);
}

#[test]
fn trait_bounds_which_are_dependent_on_generic_types_are_resolved_correctly() {
// Regression test for https://github.com/noir-lang/noir/issues/6420
let src = r#"
trait Foo {
fn foo() -> Field;
}
trait Bar<T>: Foo {
fn bar(self) -> Field {
self.foo()
}
}
struct MyStruct<T> {
inner: Field,
}
trait MarkerTrait {}
impl MarkerTrait for Field {}
// `MyStruct<T>` implements `Foo` only when its generic type `T` implements `MarkerTrait`.
impl<T> Foo for MyStruct<T>
where
T: MarkerTrait,
{
fn foo() -> Field {
42
}
}
// We expect this to succeed as `MyStruct<T>` satisfies `Bar`'s trait bounds
// of implementing `Foo` when `T` implements `MarkerTrait`.
impl<T> Bar<T> for MyStruct<T>
where
T: MarkerTrait,
{
fn bar(self) -> Field {
31415
}
}
fn main() {
let foo: MyStruct<Field> = MyStruct { inner: 42 };
let _ = foo.bar();
}
"#;
assert_no_errors(src);
}

0 comments on commit 59c1a18

Please sign in to comment.