aboutsummaryrefslogtreecommitdiff
path: root/test/test_rite_ef.ml
Commit message (Collapse)AuthorAgeFilesLines
* test(rite_ef): pin no transfer ever lands inside the Easter octaveLukasz Kasprzak2026-08-121-1/+139
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Task 11's re-review found that Precedence_ef.transfer_target's Annunciation/Easter condition -- and RG 96's general walk more broadly -- is correct only because Temporal_ef happens to make every day from Easter Sunday through Low Sunday (Easter+0..+7) blocking (Class1/2): Easter and Low Sunday via named, every day between via privileged_feria. Nothing enforces that; a future edit narrowing the octave's blocking range could let a translated feast land inside it, silently. Add a test for the consequence, not the mechanism: over 2005-2050 (real data, the project's own differential window), no day in [Easter, Easter+7] is ever a transfer's target, checked against both transferred_in and transferred_out's own recorded target dates. Plus a direct, deliberately-constructed case that starts the RG 96 search inside Holy Week itself (Holy Thursday 2026, real occupant), pinning that the search lands on Easter+8 -- and a companion test that reads the real occupant's own rank across the whole [origin+1, Easter+7] span to confirm the search genuinely walked through the window rather than stopping early for an unrelated reason. Mutation-verified: narrowing privileged_feria's post-Easter range (6 to 4 days) makes all three new tests fail, including a real natural occurrence the fixture did not anticipate (St Joseph, 19 March, transferring into Easter+5 in 2008/2035/2046) -- not just the deliberately constructed Holy Week case.
* test(ef): pin the overlay suppression's own observable effectLukasz Kasprzak2026-08-121-2/+48
| | | | | | | | | | | | | | | | | With data/ef/adjustments.sexp's one Suppress directive replaced by an empty directive list, colitur day 2026's stdout was byte-identical for all 365 days and the whole suite still passed: ef-nativity-vigil already outranks vigil-of-christmas in the RG91 contest regardless of whether the overlay ever ran, so the suppression's only observable effect is keeping vigil-of-christmas out of 24 December's Liturgical_day.omitted -- a field no cram assertion reads. test/dune's own dep on adjustments.sexp pinned the file's existence, never its content. Confirmed the gap two ways: reverting the overlay to (directives ()) makes this new test fail (24 December's omitted gains vigil-of-christmas), and confirmed test/cli.t's whole cram suite still passes under that same mutation -- cram is structurally blind to this, not merely undertested.
* rite(ef): clamp the RG96 search at the domain ceilingLukasz Kasprzak2026-08-121-0/+81
search_from could walk up to 400 days past origin before Calendar's own ~start ~stop clamp is ever consulted, and nothing stopped it probing occupant on a date past 31 December 9999 -- occupant chains through the real EF rite's temporal, which calls Computus.gregorian_easter, not total outside 1583..9999 (it Date.makes and failwiths on Error). Not reachable with the shipped sanctoral data alone, but reachable through the project's own primary extension path: an overlay adding an I-class feast on 25 December leaves nothing but Class2 Nativity-octave days for the rest of civil year 9999, so the unguarded search reached 1 January of year 10000 and crashed there with 'computus: year 10000 out of range 1583..9999'. 9999 is an in-range year and the kernel's contract is 'never raises on in-range input'. search_from now also stops, without probing occupant again, once it passes Date's own domain ceiling -- the same 'return a finite date, let Calendar's own out-of-range handling record it, never pretend to have found something admissible' contract the existing step-count guard already follows. Two new tests, both mutation-verified to actually reproduce the crash when the guard is removed (see the task report): a precedence_ef.ml unit test using the real Temporal_ef.temporal as occupant (a synthetic occupant can never discriminate this, since it never calls Computus itself), and a Calendar-level integration test reproducing the exact overlay-based scenario the review found.