loom 0.1.0

Model checker for concurrent code
Documentation
#![cfg(feature = "futures")]

extern crate futures;
extern crate loom;

use loom::fuzz_future;
use loom::sync::atomic::AtomicUsize;
use loom::thread;
use loom::futures::task;

use futures::{
    future::{
        lazy,
        poll_fn,
    },
    Async
};

use std::sync::Arc;
use std::sync::atomic::Ordering::Relaxed;

#[test]
fn fuzz_valid() {
    fuzz_future(|| {
        lazy(|| {
            let num = Arc::new(AtomicUsize::new(0));
            let task = task::current();

            thread::spawn({
                let num = num.clone();

                move || {
                    num.store(1, Relaxed);
                    task.notify();
                }
            });

            poll_fn(move || {
                if 1 == num.load(Relaxed) {
                    Ok(Async::Ready(()))
                } else {
                    Ok(Async::NotReady)
                }
            })
        })
    });
}