Property based testing

Instead of testing specific inputs, property based testing generates random inputs and verifies that invariants hold. This catches edge cases that hand-written tests miss.

Cornichon supports two approaches:

Both approaches rely on Generators to produce random inputs. All runs are seeded for reproducibility — a failing test always prints the seed needed to replay the exact same execution.