{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreidzjy3ueicolvtndibioqz4s4fbwfzowgrsdwmcslrq4vg7rzzyji",
"uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mikgxnqvknx2"
},
"path": "/t/why-not-use-smallcheck/13860#post_19",
"publishedAt": "2026-04-02T23:26:40.000Z",
"site": "https://discourse.haskell.org",
"tags": [
"The premise behind SmallCheck",
"Hybrid algorithms",
"18"
],
"textContent": "The premise behind SmallCheck, namely, that\n\n> If a program fails to meet its specification in some cases, it almost always fails in some simple case.\n\nis false. There are many practical cases where a minimal counterexample is not that small or simple. Hybrid algorithms provide many examples.\n\nTo be concrete, imagine testing a hybrid sorting algorithm, which starts with divide-and-conquer quicksort, but switches to insertion sort once subarrays are less then N elements. On modern hardware typical values of N are `[15..20]` (say, it’s 18 in `vector-algorithms`). If you try to test it with SmallCheck you would never ever get into testing quicksort part of it, which could happily remain `undefined`, because enumerating all arrays up to 18 elements will take too long. But QuickCheck will get there fairly quickly.",
"title": "Why not use smallcheck?"
}