async_ach-notify 0.2.3

Async Atomic Channel
Documentation
use async_ach_notify::Notify;
use core::sync::atomic::{AtomicUsize, Ordering::SeqCst};
use core::time::Duration;
use futures_executor::ThreadPool;
use std::process;
use std::thread;

const TEST_TIMES: usize = 10000;

#[test]
fn test() {
    static FINISHED: AtomicUsize = AtomicUsize::new(0);
    static NOTIFY_P: Notify<10> = Notify::new();
    let executor = ThreadPool::new().unwrap();
    executor.spawn_ok(async {
        // Producer_1
        for _ in 0..TEST_TIMES {
            NOTIFY_P.notify_one();
        }
        println!("Producer_1 finished");
    });
    executor.spawn_ok(async {
        // Cunsumer_1
        for _ in 0..TEST_TIMES / 2 {
            NOTIFY_P.listen().await;
        }
        println!("Cunsumer_1 finished");
        if FINISHED.fetch_add(1, SeqCst) == 1 {
            thread::yield_now();
            assert!(!NOTIFY_P.had_notified());
            process::exit(0);
        }
    });
    executor.spawn_ok(async {
        // Cunsumer_2
        for _ in 0..TEST_TIMES / 2 {
            NOTIFY_P.listen().await;
        }
        println!("Cunsumer_2 finished");
        if FINISHED.fetch_add(1, SeqCst) == 1 {
            thread::yield_now();
            assert!(!NOTIFY_P.had_notified());
            process::exit(0);
        }
    });
    thread::sleep(Duration::from_secs(3));
    unreachable!()
}