about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2015-02-11 10:31:19 -0500
committerNiko Matsakis <niko@alum.mit.edu>2015-02-12 13:29:51 -0500
commit28e48f308c28be41d0aec27ced895084cdc842c1 (patch)
tree68ceb6e17c2bbdfa47fc432a57631496d480d193
parentc87166e149c6c67d72c62667ae8cd96cb27bc090 (diff)
downloadrust-28e48f308c28be41d0aec27ced895084cdc842c1.tar.gz
rust-28e48f308c28be41d0aec27ced895084cdc842c1.zip
Add test for IntoIterator pattern blocked by #20220. Fixes #20220.
-rw-r--r--src/test/run-pass/associated-types-issue-20220.rs36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/test/run-pass/associated-types-issue-20220.rs b/src/test/run-pass/associated-types-issue-20220.rs
new file mode 100644
index 00000000000..a253fbde563
--- /dev/null
+++ b/src/test/run-pass/associated-types-issue-20220.rs
@@ -0,0 +1,36 @@
+// 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 `Self::Item` in the trait. Issue #20220.
+
+use std::vec;
+
+trait IntoIteratorX {
+    type Item;
+    type IntoIter: Iterator<Item=Self::Item>;
+
+    fn into_iter_x(self) -> Self::IntoIter;
+}
+
+impl<T> IntoIteratorX for Vec<T> {
+    type Item = T;
+    type IntoIter = vec::IntoIter<T>;
+
+    fn into_iter_x(self) -> vec::IntoIter<T> {
+        self.into_iter()
+    }
+}
+
+fn main() {
+    let vec = vec![1, 2, 3];
+    for (i, e) in vec.into_iter().enumerate() {
+        assert_eq!(i+1, e);
+    }
+}