]> git.proxmox.com Git - rustc.git/blame - src/test/ui/generator/iterator-count.rs
New upstream version 1.66.0+dfsg1
[rustc.git] / src / test / ui / generator / iterator-count.rs
CommitLineData
b7449926
XL
1// run-pass
2
0531ce1d 3#![feature(generators, generator_trait)]
ea8adc8c 4
9fa01778 5use std::marker::Unpin;
ea8adc8c 6use std::ops::{GeneratorState, Generator};
9fa01778 7use std::pin::Pin;
ea8adc8c
XL
8
9struct W<T>(T);
10
0531ce1d
XL
11// This impl isn't safe in general, but the generator used in this test is movable
12// so it won't cause problems.
74b04a01 13impl<T: Generator<(), Return = ()> + Unpin> Iterator for W<T> {
ea8adc8c
XL
14 type Item = T::Yield;
15
16 fn next(&mut self) -> Option<Self::Item> {
74b04a01 17 match Pin::new(&mut self.0).resume(()) {
ea8adc8c
XL
18 GeneratorState::Complete(..) => None,
19 GeneratorState::Yielded(v) => Some(v),
20 }
21 }
22}
23
74b04a01 24fn test() -> impl Generator<(), Return=(), Yield=u8> + Unpin {
ea8adc8c
XL
25 || {
26 for i in 1..6 {
27 yield i
28 }
29 }
30}
31
32fn main() {
33 let end = 11;
34
35 let closure_test = |start| {
36 move || {
37 for i in start..end {
38 yield i
39 }
40 }
41 };
42
43 assert!(W(test()).chain(W(closure_test(6))).eq(1..11));
44}