aboutsummaryrefslogtreecommitdiff
path: root/test/test_precedence.ml
Commit message (Collapse)AuthorAgeFilesLines
* test(precedence): strengthen accounting test, cover order and empty sanctoralLukasz Kasprzak2026-08-111-7/+39
| | | | | | | | | | | | The accounting test only checked bucket lengths, which a mutant satisfies by duplicating a candidate across two buckets while dropping another entirely. Replace it with a sorted slug-set comparison (Alcotest.slist), which a duplicate-or-missing slug both fail. Add two cases the brief's three properties call for but nothing exercised: input-order independence (permuting the sanctoral list must not change the outcome) and a temporal-only day (empty sanctoral list), the case the temporal/sanctoral split exists to make safe.
* kernel(precedence): rite-parameterised resolverLukasz Kasprzak2026-08-111-0/+76
Three rite-supplied functions, not one: band (who wins, RG 91), disposition (what happens to the loser, RG 92-95) and admit (how many commemorations are admitted, RG 111). The loser's fate depends on the loser's own rank, so conflating them would resist extension. resolve takes the temporal candidate separately from the sanctoral list, which makes it total by construction. Every candidate lands in exactly one of observed, commemorations, deferred or omitted -- nothing is dropped silently, which is what makes the no-celebration-lost invariant checkable.