Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions tests/test/misc.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
//! Tests that don't fit a single category

use super::*;

// Regression test for rust-lang/chalk#111
#[test]
fn futures_ambiguity() {
test! {
program {
struct Result<T, E> { }

trait Future {
type Output;
}

trait FutureResult
where
Self: Future<Output = Result<
<Self as FutureResult>::Item,
<Self as FutureResult>::Error
>>
{
type Item;
type Error;
}

impl<T, I, E> FutureResult for T
where
T: Future<Output = Result<I, E>>
{
type Item = I;
type Error = E;
}
}

goal {
forall<T> { if (T: FutureResult) { exists<I, E> { T: Future<Output = Result<I, E>> } } }
} yields {
r"Unique; substitution [?0 := (FutureResult::Item)<!1_0>, ?1 := (FutureResult::Error)<!1_0>], lifetime constraints []"
}
}
}
1 change: 1 addition & 0 deletions tests/test/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ mod cycle;
mod existential_types;
mod implied_bounds;
mod impls;
mod misc;
mod negation;
mod projection;
mod unify;
Expand Down