From 58a59e9d231e36e3d39dd398b80c96094de591aa Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Wed, 30 Aug 2017 11:13:01 +0200 Subject: Rustup (generator support) --- tests/run-pass/generator_control_flow.rs | 65 ++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tests/run-pass/generator_control_flow.rs (limited to 'tests') 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 or the MIT license +// , 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(mut amt: usize, mut t: T) -> T::Return + where T: Generator +{ + 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 + }); +} -- cgit 1.4.1-3-g733a5