1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
pub trait Random: Sized {
    fn random<G: RandomGen>(g: &mut G) -> Self;
}

pub trait RandomGen {
    fn gen_u32(&mut self) -> u32;
    fn gen_u64(&mut self) -> u64 { (self.gen_u32() as u64) << 32 | (self.gen_u32() as u64) }
    fn gen_f32(&mut self) -> f32;
    fn gen_f64(&mut self) -> f32;
    fn gen_bytes(&mut self, &mut [u8]) -> usize;
}