mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-11-03 22:49:17 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			36 lines
		
	
	
		
			812 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			812 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
//@ revisions: next old
 | 
						|
//@ edition: 2024
 | 
						|
//@[next] compile-flags: -Znext-solver
 | 
						|
//@ run-pass
 | 
						|
#![feature(gen_blocks)]
 | 
						|
 | 
						|
fn foo() -> impl Iterator<Item = u32> {
 | 
						|
    gen { yield 42; for x in 3..6 { yield x } }
 | 
						|
}
 | 
						|
 | 
						|
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 }
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
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);
 | 
						|
    // `gen` blocks are fused
 | 
						|
    assert_eq!(iter.next(), None);
 | 
						|
 | 
						|
    let mut iter = moved();
 | 
						|
    assert_eq!(iter.next(), Some(42));
 | 
						|
    assert_eq!(iter.next(), None);
 | 
						|
 | 
						|
}
 |