ach-spsc 0.2.5

Atomic Channel
Documentation
use ach_spsc::heapless::Spsc;
use std::ops::Range;
use std::thread;

const TEST_DATA: Range<usize> = 0..10000;

#[test]
fn test() {
    static SPSC: Spsc<usize, 2> = Spsc::new();
    let mut sender = SPSC.take_sender().unwrap();
    let mut recver = SPSC.take_recver().unwrap();
    thread::spawn(move || {
        for i in TEST_DATA {
            loop {
                let result = sender.try_send(i);
                if result.is_ok() {
                    break;
                } else {
                    thread::yield_now();
                }
            }
        }
    });

    let h = thread::spawn(move || {
        for i in TEST_DATA {
            loop {
                let result = recver.try_recv();
                if let Some(result) = result {
                    assert_eq!(result, i);
                    break;
                } else {
                    thread::yield_now();
                }
            }
        }
    });
    let _ = h.join();
    assert!(SPSC.is_empty());
}