chore: cross-check Computus against PHP easter_days() (#46) #421

Merged
manlycucumber merged 1 commit from feature/46-computus-easter-oracle into develop 2026-07-02 17:08:28 +00:00
manlycucumber commented 2026-07-02 17:05:32 +00:00 (Migrated from github.com)

Part of Epic #45 (validation harness). Oracle #1 of the "re-prove 100%" suite.

What

A new tests/Validation/ suite whose first test compares the clean-room
Computus::gregorianEaster() to PHP's independent easter_days() for every year
1583–2200
— the computus's Gregorian floor through the golden-fixture horizon —
plus five human-verified anchor dates (the 22 Mar / 25 Apr extremes, 1962, 2000, 2024).

Why

Two unrelated Easter algorithms agreeing on 618 consecutive years is strong, cheap
evidence the computus is correct; the whole temporal cycle hangs off this date. The
oracle is pinned to CAL_EASTER_ALWAYS_GREGORIAN so both sides use the Gregorian
reckoning across the full range (the default mode switches to Julian before 1753).

Acceptance criteria (#46)

  • Compares engine Easter to easter_days() for every year in range
  • Any mismatch fails the test, naming the offending year(s)
  • The year range is documented (constants + docblock)
  • Runs in CI (the existing phpunit job)

Local gates green: lint 109/109, analyse [OK], test 621 passing.

Closes #46.

Part of Epic #45 (validation harness). Oracle #1 of the "re-prove 100%" suite. ## What A new `tests/Validation/` suite whose first test compares the clean-room `Computus::gregorianEaster()` to PHP's independent `easter_days()` for **every year 1583–2200** — the computus's Gregorian floor through the golden-fixture horizon — plus five human-verified anchor dates (the 22 Mar / 25 Apr extremes, 1962, 2000, 2024). ## Why Two unrelated Easter algorithms agreeing on 618 consecutive years is strong, cheap evidence the computus is correct; the whole temporal cycle hangs off this date. The oracle is pinned to `CAL_EASTER_ALWAYS_GREGORIAN` so both sides use the Gregorian reckoning across the full range (the default mode switches to Julian before 1753). ## Acceptance criteria (#46) - [x] Compares engine Easter to `easter_days()` for every year in range - [x] Any mismatch fails the test, naming the offending year(s) - [x] The year range is documented (constants + docblock) - [x] Runs in CI (the existing phpunit job) Local gates green: `lint` 109/109, `analyse` [OK], `test` 621 passing. Closes #46.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Directorium/Core!421
No description provided.