1 // Copyright 2017 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
13 #![feature(generators, generator_trait)]
15 use std
::ops
::Generator
;
16 use std
::sync
::atomic
::{AtomicUsize, ATOMIC_USIZE_INIT, Ordering}
;
18 static A
: AtomicUsize
= ATOMIC_USIZE_INIT
;
24 A
.fetch_add(1, Ordering
::SeqCst
);
29 fn test() -> bool { true }
30 fn test2() -> bool { false }
46 let n
= A
.load(Ordering
::SeqCst
);
47 unsafe { a.resume() }
;
48 assert_eq
!(A
.load(Ordering
::SeqCst
), n
+ 1);
49 unsafe { a.resume() }
;
50 assert_eq
!(A
.load(Ordering
::SeqCst
), n
+ 1);
62 let n
= A
.load(Ordering
::SeqCst
);
63 unsafe { a.resume() }
;
64 assert_eq
!(A
.load(Ordering
::SeqCst
), n
);
65 unsafe { a.resume() }
;
66 assert_eq
!(A
.load(Ordering
::SeqCst
), n
+ 1);