use rand::Rng;
use serde::Serialize;
use super::{sample_space::SampleSpace, space::Space};
#[derive(Debug, Serialize, Clone, PartialEq, Eq)]
pub struct MultiBinary {
pub n: usize,
}
impl MultiBinary {
pub fn new(n: usize) -> Self {
Self { n }
}
}
impl Space for MultiBinary {
type Element = Vec<u8>;
fn contains(&self, value: &Vec<u8>) -> bool {
value.len() == self.n && value.iter().all(|&v| v == 0 || v == 1)
}
}
impl SampleSpace for MultiBinary {
type Mask = ();
fn sample<R: Rng>(&self, rng: &mut R, _mask: Option<&Self::Mask>) -> Vec<u8> {
(0..self.n).map(|_| rng.gen_range(0..=1)).collect()
}
}