diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2015-02-11 10:31:37 -0500 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2015-02-12 13:29:51 -0500 |
| commit | 14141aca80a78dc8ec67bce463c5677ec0280264 (patch) | |
| tree | f9d455978d3ed97ed845b1a5fd6ff376420f2997 | |
| parent | 28e48f308c28be41d0aec27ced895084cdc842c1 (diff) | |
| download | rust-14141aca80a78dc8ec67bce463c5677ec0280264.tar.gz rust-14141aca80a78dc8ec67bce463c5677ec0280264.zip | |
Add test for self-referencing pattern blocked by #20551. Fixes #20551.
| -rw-r--r-- | src/test/run-pass/associated-types-stream.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/test/run-pass/associated-types-stream.rs b/src/test/run-pass/associated-types-stream.rs new file mode 100644 index 00000000000..ef7fbe87b30 --- /dev/null +++ b/src/test/run-pass/associated-types-stream.rs @@ -0,0 +1,47 @@ +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// Test references to the trait `Stream` in the bounds for associated +// types defined on `Stream`. Issue #20551. + +trait Stream { + type Car; + type Cdr: Stream; + + fn car(&self) -> Self::Car; + fn cdr(self) -> Self::Cdr; +} + +impl Stream for () { + type Car = (); + type Cdr = (); + fn car(&self) -> () { () } + fn cdr(self) -> () { self } +} + +impl<T,U> Stream for (T, U) + where T : Clone, U : Stream +{ + type Car = T; + type Cdr = U; + fn car(&self) -> T { self.0.clone() } + fn cdr(self) -> U { self.1 } +} + +fn main() { + let p = (22, (44, (66, ()))); + assert_eq!(p.car(), 22); + + let p = p.cdr(); + assert_eq!(p.car(), 44); + + let p = p.cdr(); + assert_eq!(p.car(), 66); +} |
