rust/tests/ui/coroutine/gen_block_iterate.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

36 lines
846 B
Rust
Raw Normal View History

2023-10-20 18:19:40 -05:00
//@ revisions: next old
//@compile-flags: --edition 2024 -Zunstable-options
2023-12-14 06:11:28 -06:00
//@[next] compile-flags: -Znext-solver
2023-10-20 18:19:40 -05:00
//@ run-pass
#![feature(gen_blocks)]
2023-10-20 18:19:40 -05:00
fn foo() -> impl Iterator<Item = u32> {
gen { yield 42; for x in 3..6 { yield x } }
}
2023-10-24 04:50:49 -05:00
fn moved() -> impl Iterator<Item = u32> {
let mut x = "foo".to_string();
gen move {
yield 42;
if x == "foo" { return }
x.clear();
for x in 3..6 { yield x }
}
}
2023-10-20 18:19:40 -05:00
fn main() {
let mut iter = foo();
assert_eq!(iter.next(), Some(42));
assert_eq!(iter.next(), Some(3));
assert_eq!(iter.next(), Some(4));
assert_eq!(iter.next(), Some(5));
assert_eq!(iter.next(), None);
2023-10-27 10:20:44 -05:00
// `gen` blocks are fused
assert_eq!(iter.next(), None);
2023-10-24 04:50:49 -05:00
let mut iter = moved();
assert_eq!(iter.next(), Some(42));
assert_eq!(iter.next(), None);
2023-10-20 18:19:40 -05:00
}