# Input Generators
Input generators produce deterministic test cases based on an operation's type signature.
## Built-In Generators
| `ExhaustiveByteRange` | Unary/binary u32 | Unary u32 full 0..=255; binary u32 16×16 grid |
| `EdgeCases` | Unary/binary u32 | Zero, one, max, max-1, powers of two, patterns |
| `RandomUniform` | u32, bytes | Seeded uniformly random inputs |
| `Pathological` | Bytes | Worst-case buffer patterns (zeros, ones, alternating) |
| `U32Pathological` | Unary/binary u32 | Shift/rotation boundaries, div-by-zero, overflow |
| `BoundaryLengths` | Bytes | Buffer lengths at structural boundaries |
## Generator Contract
Every generator implements `InputGenerator`:
```rust
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>)>;
}
```
- `name` is used in failure reports.
- `handles` filters generators by signature shape.