# Equivalence Classes
Equivalence classes partition an operation's input space into regions that are expected to exercise the same code path.
## Purpose
Random generation alone can cluster in easy regions and miss hard ones. Equivalence-class coverage forces the suite to visit at least one representative from every semantic region.
## Examples
### Division
- `divisor == 0`
- `divisor != 0`
### Shift Left
- `shift < 32`
- `shift >= 32`
### Clamp
- `value < low`
- `low <= value <= high`
- `value > high`
### Select
- `condition == 0`
- `condition != 0`
## Universal Class
Operations with no special cases declare a single universal class:
```rust
EquivalenceClass::universal("all u32 pairs")
```
The representative input is arbitrary because the class covers the entire domain.
## Specific Classes
Operations with distinct behaviors declare specific classes with a representative input that exercises each behavior:
```rust
EquivalenceClass::specific("divisor_zero", vec![100, 0])
```
## Coverage Metric
```text
equivalence_class_coverage = covered_classes / total_declared_classes
```
100% class coverage is required for a complete conformance claim.