reactors 0.1.4

Performance-focused cross-platform asynchronous IO implementation
Documentation
use std::{io::SeekFrom, path::PathBuf, task::Poll, time::Duration};

use futures::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt, FutureExt};
use futures_test::task::noop_context;
use reactors::{
    io::{file::*, IoReactor},
    Reactor,
};

#[test]
fn test_file_rw() {
    _ = pretty_env_logger::try_init();

    let mut reactor = IoReactor::default();

    let dir: PathBuf = env!("CARGO_TARGET_TMPDIR").into();

    let file = File::create(reactor.clone(), dir.join("test")).unwrap();

    let mut write_stream = file.to_write_stream(None);

    let mut read_stream = file.to_read_stream(None);

    let mut write_all = write_stream.write_all("hello world".as_bytes());

    loop {
        match write_all.poll_unpin(&mut noop_context()) {
            Poll::Pending => {
                reactor.poll_once(Duration::from_secs(1)).unwrap();
            }
            Poll::Ready(result) => {
                result.unwrap();
                break;
            }
        }
    }

    match read_stream
        .seek(SeekFrom::Start(0))
        .poll_unpin(&mut noop_context())
    {
        Poll::Pending => panic!("unexpect pending"),
        Poll::Ready(result) => {
            assert_eq!(result.unwrap(), 0);
        }
    }

    let mut buff = [0u8; 100];

    let mut read = read_stream.read(&mut buff);

    loop {
        match read.poll_unpin(&mut noop_context()) {
            Poll::Pending => {
                reactor.poll_once(Duration::from_secs(1)).unwrap();
            }
            Poll::Ready(result) => {
                assert_eq!(result.unwrap(), 11);
                assert_eq!(&buff[..11], "hello world".as_bytes());
                break;
            }
        }
    }
}