wfqueue 0.2.1

FAA-based wait-free bounded queue, and 0-unsafe.
Documentation
#![cfg(not(feature = "loom"))]

use std::thread;
use std::sync::Arc;
use wfqueue::WfQueue;


#[test]
fn test_codegen_simple() {
    let queue = WfQueue::new(3);

    queue.push(Box::new(0x42)).unwrap();
    let output = queue.pop().unwrap();

    assert_eq!(*output, 0x42);
}

#[test]
fn test_codegen_thread() {
    let queue = Arc::new(WfQueue::new(3));
    let queue2 = queue.clone();

    let h = thread::spawn(move || {
        for i in 0..5 {
            let mut val = Box::new(i);

            loop {
                match queue2.push(val) {
                    Ok(()) => break,
                    Err(val2) => {
                        val = val2;
                        std::sync::atomic::spin_loop_hint();
                    }
                }
            }
        }
    });

    for i in 0..5 {
        loop {
            match queue.pop() {
                Some(val) => {
                    assert_eq!(*val, i);
                    break
                },
                None => std::sync::atomic::spin_loop_hint()
            }
        }
    }

    h.join().unwrap();
}

#[test]
fn test_codegen_drop() {
    let queue = WfQueue::new(3);

    queue.push(Box::new(0x42)).unwrap();
    queue.push(Box::new(0x43)).unwrap();

    let h = thread::spawn(move || {
        let _queue = queue;
    });

    h.join().unwrap();
}