diff options
| author | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2017-08-30 11:13:01 +0200 |
|---|---|---|
| committer | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2017-08-30 13:16:27 +0200 |
| commit | 58a59e9d231e36e3d39dd398b80c96094de591aa (patch) | |
| tree | b5cdd2c13f3cbcc9972541faa68315fd8aae425c /tests | |
| parent | 4b67bfab52ab7e9ded0b7bef2f70c64a972d93ee (diff) | |
| download | rust-58a59e9d231e36e3d39dd398b80c96094de591aa.tar.gz rust-58a59e9d231e36e3d39dd398b80c96094de591aa.zip | |
Rustup (generator support)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/run-pass/generator_control_flow.rs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/tests/run-pass/generator_control_flow.rs b/tests/run-pass/generator_control_flow.rs new file mode 100644 index 00000000000..f15c7db9c20 --- /dev/null +++ b/tests/run-pass/generator_control_flow.rs @@ -0,0 +1,65 @@ +// Copyright 2017 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. + +#![feature(generators, generator_trait)] + +use std::ops::{GeneratorState, Generator}; + +fn finish<T>(mut amt: usize, mut t: T) -> T::Return + where T: Generator<Yield = ()> +{ + loop { + match t.resume() { + GeneratorState::Yielded(()) => amt -= 1, + GeneratorState::Complete(ret) => { + assert_eq!(amt, 0); + return ret + } + } + } + +} + +fn main() { + finish(1, || yield); + finish(3, || { + let mut x = 0; + yield; + x += 1; + yield; + x += 1; + yield; + assert_eq!(x, 2); + }); + finish(8, || { + for _ in 0..8 { + yield; + } + }); + finish(1, || { + if true { + yield; + } else { + } + }); + finish(1, || { + if false { + } else { + yield; + } + }); + finish(2, || { + if { yield; false } { + yield; + panic!() + } + yield + }); +} |
