#[allow(unused_imports)]
use antigen::SeedKind;
use antigen::{antigen, clonal};
#[antigen(
name = "string-parse-roundtrip",
fingerprint = r#"item = fn, name = matches("*_parse_*")"#,
family = "trust-boundary-violation",
summary = "parse() must roundtrip with to_string() for all valid inputs."
)]
pub struct StringParseRoundtrip;
#[clonal(
witness = prop_parse_roundtrip,
iterations = 10_000,
seed = SeedKind::Random
)]
pub fn parse_u32(s: &str) -> Option<u32> {
s.parse().ok()
}
#[clonal(
witness = prop_format_roundtrip,
iterations = 5_000,
seed = SeedKind::EntropyFromCi
)]
pub fn format_u32(n: u32) -> String {
n.to_string()
}
fn main() {
println!("=== antigen convergent-evidence: #[clonal] example ===");
println!();
println!("Two clonal declarations:");
println!();
println!("1. parse_u32");
println!(" witness: prop_parse_roundtrip");
println!(" iterations: 10_000");
println!(" seed: SeedKind::Random (non-deterministic)");
println!();
println!("2. format_u32");
println!(" witness: prop_format_roundtrip");
println!(" iterations: 5_000");
println!(" seed: SeedKind::EntropyFromCi (per-CI deterministic)");
println!();
println!("Per ADR-024 adversarial C2:");
println!(" `seed = SeedKind::Fixed(_)` is REJECTED at parse time.");
println!(" A fixed seed makes 'iterations' a misnomer — each");
println!(" iteration replays the same RNG state.");
println!();
println!(" Try uncommenting a Fixed-seed clonal above to see the");
println!(" compile error.");
println!();
println!("Sample evaluations:");
println!(" parse_u32(\"42\") = {:?}", parse_u32("42"));
println!(" parse_u32(\"abc\") = {:?}", parse_u32("abc"));
println!(" format_u32(123) = {:?}", format_u32(123));
}