#[inline]
pub fn all_specs() -> Vec<crate::OpSpec> {
let mut specs = Vec::new();
specs.extend(crate::spec::primitive::specs());
specs.extend(crate::spec::decode::specs());
specs.extend(crate::spec::graph::specs());
specs.extend(crate::spec::hash::specs());
specs.extend(crate::spec::match_ops::specs());
specs.extend(crate::spec::string::specs());
specs
}
#[inline]
pub fn try_all_specs() -> Result<Vec<crate::OpSpec>, String> {
Ok(all_specs())
}
#[inline]
pub fn compiled_specs() -> Vec<crate::OpSpec> {
all_specs()
}
#[inline]
pub fn all_generated_golden_samples() -> Vec<vyre_spec::GoldenSample> {
let mut samples = Vec::new();
samples.extend_from_slice(crate::spec::decode::base64::GOLDEN);
samples.extend_from_slice(crate::spec::decode::hex::GOLDEN);
samples.extend_from_slice(crate::spec::decode::unicode::GOLDEN);
samples.extend_from_slice(crate::spec::decode::url::GOLDEN);
samples.extend_from_slice(crate::spec::graph::bfs::GOLDEN);
samples.extend_from_slice(crate::spec::graph::reachability::GOLDEN);
samples.extend_from_slice(crate::spec::hash::crc32c::GOLDEN);
samples.extend_from_slice(crate::spec::hash::fnv1a32::GOLDEN);
samples.extend_from_slice(crate::spec::hash::murmur3_32::GOLDEN);
samples.extend_from_slice(crate::spec::match_ops::byte_len::GOLDEN);
samples.extend_from_slice(crate::spec::match_ops::dfa_scan::GOLDEN);
samples.extend_from_slice(crate::spec::string::tokenize::GOLDEN);
samples.extend_from_slice(crate::spec::primitive_goldens::GOLDEN);
samples
}
#[inline]
pub fn all_generated_kat_vectors() -> Vec<vyre_spec::KatVector> {
let mut vectors = crate::spec::primitive::kat_vectors();
vectors.extend_from_slice(crate::spec::decode::base64::KAT);
vectors.extend_from_slice(crate::spec::decode::hex::KAT);
vectors.extend_from_slice(crate::spec::decode::unicode::KAT);
vectors.extend_from_slice(crate::spec::decode::url::KAT);
vectors.extend_from_slice(crate::spec::graph::bfs::KAT);
vectors.extend_from_slice(crate::spec::graph::reachability::KAT);
vectors.extend_from_slice(crate::spec::hash::crc32c::KAT);
vectors.extend_from_slice(crate::spec::hash::fnv1a32::KAT);
vectors.extend_from_slice(crate::spec::hash::murmur3_32::KAT);
vectors.extend_from_slice(crate::spec::match_ops::byte_len::KAT);
vectors.extend_from_slice(crate::spec::match_ops::dfa_scan::KAT);
vectors.extend_from_slice(crate::spec::string::tokenize::KAT);
vectors
}
#[inline]
pub fn all_generated_adversarial_inputs() -> Vec<vyre_spec::AdversarialInput> {
let mut inputs = Vec::new();
inputs.extend_from_slice(crate::spec::decode::base64::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::decode::hex::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::decode::unicode::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::decode::url::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::graph::bfs::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::graph::reachability::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::hash::crc32c::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::hash::fnv1a32::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::hash::murmur3_32::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::match_ops::byte_len::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::match_ops::dfa_scan::ADVERSARIAL);
inputs.extend_from_slice(crate::spec::string::tokenize::ADVERSARIAL);
inputs
}
#[doc(hidden)]
#[inline]
pub fn __clear_cache_for_tests() {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn all_specs_covers_every_category() {
let specs = all_specs();
assert!(
specs.len() > crate::spec::primitive::specs().len(),
"all_specs() returned {} ops but primitive alone has {}. \
Other categories are not being included.",
specs.len(),
crate::spec::primitive::specs().len()
);
}
#[test]
fn no_duplicate_op_ids() {
let specs = all_specs();
let mut seen = std::collections::HashSet::new();
for spec in &specs {
assert!(
seen.insert(spec.id),
"duplicate op id in registry: {}",
spec.id
);
}
}
}