use std::io::SeekFrom;
use futures::{AsyncReadExt, AsyncSeekExt, AsyncWriteExt};
use ringbahn::File;
const ASSERT: &[u8] = b"But this formidable power of death -";
#[test]
fn write_file() {
let file = tempfile::tempfile().unwrap();
let mut file = File::from(file);
futures::executor::block_on(async move {
assert_eq!(file.write(ASSERT).await.unwrap(), ASSERT.len());
let mut buf = vec![];
assert!(file.seek(SeekFrom::Start(0)).await.is_ok());
assert_eq!(file.read_to_end(&mut buf).await.unwrap(), ASSERT.len());
assert_eq!(&buf[0..ASSERT.len()], ASSERT);
});
}
#[test]
fn select_complete_many_futures() {
async fn act() {
let file = tempfile::tempfile().unwrap();
let mut file = File::from(file);
file.write_all(b"hello, world!").await.unwrap();
}
futures::executor::block_on(async move {
use futures::FutureExt;
let mut f1 = Box::pin(act().fuse());
let mut f2 = Box::pin(act().fuse());
let mut f3 = Box::pin(act().fuse());
let mut f4 = Box::pin(act().fuse());
let mut f5 = Box::pin(act().fuse());
let mut f6 = Box::pin(act().fuse());
let mut f7 = Box::pin(act().fuse());
let mut f8 = Box::pin(act().fuse());
loop {
futures::select! {
_ = f1 => (),
_ = f2 => (),
_ = f3 => (),
_ = f4 => (),
_ = f5 => (),
_ = f6 => (),
_ = f7 => (),
_ = f8 => (),
complete => break,
}
}
});
}