pub use super::boundary::BoundaryLengths;
pub use super::edge_cases::EdgeCases;
pub use super::exhaustive::ExhaustiveByteRange;
pub use super::pathological::Pathological;
pub use super::random::RandomUniform;
pub use super::u32_pathological::U32Pathological;
use crate::spec::types::OpSignature;
pub trait InputGenerator: Send + Sync {
fn name(&self) -> &str;
fn handles(&self, signature: &OpSignature) -> bool;
fn generate(&self, signature: &OpSignature, seed: u64) -> Vec<(String, Vec<u8>)>;
fn generate_for_op(
&self,
op_id: &str,
signature: &OpSignature,
seed: u64,
) -> Vec<(String, Vec<u8>)> {
let _ = op_id;
self.generate(signature, seed)
}
fn generate_for_op_streaming(
&self,
op_id: &str,
signature: &OpSignature,
seed: u64,
emit: &mut dyn FnMut(String, Vec<u8>),
) {
for (label, bytes) in self.generate_for_op(op_id, signature, seed) {
emit(label, bytes);
}
}
}