use std::thread::sleep;
use std::time::Duration;
use readahead_iterator::{IntoReadahead, Readahead};
#[test]
fn iterate_integers() {
const N: usize = 100;
let s: usize = Readahead::new(
(0..N)
.map(|i| i * 3)
.inspect(|_| sleep(Duration::from_millis(1))),
50,
)
.sum();
assert_eq!(s, 3 * (N * (N - 1)) / 2);
}
#[test]
fn read_past_end() {
let mut rah = Readahead::new(
(0..10)
.map(|i| i)
.inspect(|_| sleep(Duration::from_millis(10))),
50,
);
for i in 0..20 {
let v = rah.next();
if i < 10 {
assert_eq!(v, Some(i));
} else {
assert_eq!(v, None);
}
}
}
#[test]
fn take_exact_count() {
let values: Vec<_> = Readahead::new((0..10).inspect(|_| sleep(Duration::from_millis(1))), 5)
.take(10)
.collect();
assert_eq!(values, vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
}
#[test]
fn take_fewer_items() {
let values: Vec<_> = Readahead::new((0..10).inspect(|_| sleep(Duration::from_millis(1))), 5)
.take(5)
.collect();
assert_eq!(values, vec![0, 1, 2, 3, 4]);
}
#[test]
fn take_more_items() {
let values: Vec<_> = Readahead::new((0..5).inspect(|_| sleep(Duration::from_millis(1))), 3)
.take(10)
.collect();
assert_eq!(values, vec![0, 1, 2, 3, 4]);
}
#[test]
fn unbounded_input() {
(0..)
.into_iter()
.readahead(3)
.take(100)
.for_each(|x| println!("{}", x));
}