nix-playgraound/notes/029-haskell-quickcheck.md

52 lines
1.3 KiB
Markdown
Raw Normal View History

# Haskell QuickCheck
This note covers `26-haskell-quickcheck/`, which normalizes overlapping maintenance windows and checks the implementation with QuickCheck
properties.
---
## 1. Why Properties Help Here
The function under test is not a single arithmetic helper. It sorts, merges, and preserves the covered time range of several windows.
That kind of behavior is a strong fit for property testing, because you care about broad rules:
- the result should be normalized,
- normalizing twice should not change the answer, and
- the normalized result should cover exactly the same minutes as the input.
Those are better teaching examples for QuickCheck than a one-line `reverse . reverse` property.
---
## 2. What the Generator Controls
The test suite generates windows within a bounded minute range.
That keeps the coverage property finite, because the test can compare membership across `0..60` directly.
The important point is not the numeric range itself. It is the workflow:
1. generate realistic structured input,
2. state invariant-like properties, and
3. let QuickCheck search for counterexamples.
---
## 3. Commands to Try
```bash
cd 26-haskell-quickcheck
nix develop
cabal run
cabal run -- 0-10 8-14 20-24 24-30
cabal test
nix build
./result/bin/mini-windows 0-10 8-14 20-24 24-30
nix run . -- 0-10 8-14 20-24 24-30
nix flake check
```