use core::iter;
use super::*;
#[derive(Clone, Debug)]
#[repr(transparent)]
pub struct Mock<I>(pub I);
impl<'a> Mock<iter::Copied<slice::Iter<'a, u64>>> {
#[inline]
pub fn slice(slice: &'a [u64]) -> Random<Self> {
Random::wrap(Mock(slice.iter().copied()))
}
}
impl Mock<iter::Repeat<u64>> {
#[inline]
pub fn repeat(value: u64) -> Random<Self> {
Random::wrap(Mock(iter::repeat(value)))
}
}
impl<I> Rng for Mock<I> where I: Iterator<Item = u64> {
#[inline]
fn next_u32(&mut self) -> u32 {
self.0.next().unwrap() as u32
}
#[inline]
fn next_u64(&mut self) -> u64 {
self.0.next().unwrap()
}
#[inline]
fn fill_bytes(&mut self, buf: &mut [MaybeUninit<u8>]) {
util::rng_fill_bytes(self, buf);
}
#[inline]
fn jump(&mut self) {
unimplemented!()
}
}