diff options
Diffstat (limited to 'test/test_rite_ef.ml')
| -rw-r--r-- | test/test_rite_ef.ml | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/test/test_rite_ef.ml b/test/test_rite_ef.ml index 6cd8709..67b42ce 100644 --- a/test/test_rite_ef.ml +++ b/test/test_rite_ef.ml @@ -166,6 +166,97 @@ let test_eusebius_confessor_colour_corrected () = true (e.Layer.cel.Cel.colour = Colour.White) +(* ef-sanctoral-audit task (2026-08-14): a full extraction of the primary + CALENDARIUM (both photographic scans, page images read directly, not + their OCR text layers) against all 327 base entries plus the two prior + overlay Adds -- data/ef/adjustments.sexp's own audit-block comment has + the full method and RG 124 citation; docs/research/rules-register.md's + audit rewrite and .superpowers/sdd/2026-08-12-colitur-rg16a/sanctoral- + audit-report.md have the full findings. Same discipline as + [test_eusebius_confessor_colour_corrected] above (its own predecessor, + same root cause): a typo'd slug or a reverted directive fails THIS test, + not only silently changes unread data. One table, all eleven [Feast] + colour corrections plus the seven [Commemoration_only] ones (inert to + [Precedence_ef.band]/[admit] today -- colour is read nowhere in either, + confirmed by grep -- but real for `colitur day`'s own printed output the + moment either entry is ever observed/commemorated). *) +let test_audit_colours_corrected () = + let layer = real_layer () in + let check_colour slug expected reason = + match Layer.find layer (Slug.of_string_exn slug) with + | None -> Alcotest.failf "slug %s not found in the overlaid layer" slug + | Some e -> + Alcotest.(check bool) (Printf.sprintf "%s: %s" slug reason) true (e.Layer.cel.Cel.colour = expected) + in + (* RG 124(e): a Martyr's own martyrdom is red -- these SIX were White. + Three more were set Red by the audit and REVERTED by the fix-round + review: conversion-of-st-paul and chair-of-st-peter are NAMED, by name + and by date, in RG 120(f)'s own enumeration of WHITE, fifteen lines + above the RG 124(b) the audit cited; and `peter` (25 Jan) rested on + "match the host day's Red", whose host is white by that same clause. + They are asserted White below, where the reverted values belong. *) + List.iter + (fun (slug, reason) -> check_colour slug Colour.Red reason) + [ ("prisca", "Virg. et Mart., 18 Jan -- RG124(e); lectio's own NAME dropped 'et Mart.', so its name is the defective field, not its colour"); + ("vitus", "Ss. ... Mm., 15 Jun -- RG124(e)"); + ("margaret", "Virg. et Mart., 20 Jul (comm) -- RG124(e)"); + ("apollinaris", "Ep. et Mart., 23 Jul -- RG124(e)"); + ("agapitus", "Mart., 18 Aug -- RG124(e)"); + ("josaphat", "Ep. et Mart., 14 Nov -- RG124(e)") ]; + (* RG 120(e), "Sanctorum non Martyrum" -- a POSITIVE rule, four lines + above the one the audit misapplied. These were cited to "RG 117's + five-colour residual", a negative inference from the red list's + exhaustiveness; the outcome was right and the citation was weaker than + the Missal's own. The first three are the fix-round reverts, white by + RG 120(f)'s own naming rather than by (e). *) + List.iter + (fun (slug, reason) -> check_colour slug Colour.White reason) + [ ("conversion-of-st-paul", "25 Jan -- NAMED white by RG120(f), 'Conversionis S. Pauli (25 ianuarii)'"); + ("chair-of-st-peter", "22 Feb -- NAMED white by RG120(f), 'Cathedrae S. Petri (22 februarii)'"); + ("peter", "25 Jan commemoration -- its host is white by RG120(f), so the audit's own precedent yields White"); + ("john-of-san-fecundo", "Conf. only, 12 Jun"); + ("ephrem-of-syria", "Conf. et Eccl. Doct. only, 18 Jun"); + ("julia-of-falconieri", "Virg. only, 19 Jun"); + ("john-gualbert", "Abb. (Conf.) only, 12 Jul"); + ("camillus-de-lellis", "Conf. only, 18 Jul"); + ("jerome-emiliani", "Conf. only, 20 Jul"); + ("liborii", "Ep. et Conf. only, 23 Jul (comm)"); + ("martha", "Virg. only, 29 Jul"); + ("alphonsus-liguori", "Ep., Conf. et Eccl. Doct. only, 2 Aug"); + ("augustine", "Ep., Conf. et Eccl. Doct. only, 28 Aug"); + ("rose-of-lima", "Virg. only, 30 Aug"); + ("mark-i", "Papae et Conf. only (Pope Mark I, not the Evangelist), 7 Oct (comm)") ] + +(* `barbara` (4 December): a genuine DATA GAP, not a colour correction -- + present in both photographic scans as a Commemoratio nested under + Peter Chrysologus's own entry, absent from data/ef/sanctoral.sexp AND + from lectio's own tridentine-calendar.ini (same upstream-gap shape as + the ef-rebootstrap task's five: agnes-secundo/boniface-martyr/ + eusebius-confessor/evaristus/theodore). Added via data/ef/ + adjustments.sexp's own new `Add` directive. *) +let test_barbara_added () = + let layer = real_layer () in + match Layer.find layer (Slug.of_string_exn "barbara") with + | None -> Alcotest.fail "slug barbara not found in the overlaid layer (ef-sanctoral-audit Add missing?)" + | Some e -> + Alcotest.(check bool) "barbara: 4 December" true + (match e.Layer.date with Date_spec.Fixed { month = 12; day = 4 } -> true | Date_spec.Fixed _ -> false); + Alcotest.(check bool) "barbara: Commemoration_only (no separate feast row in the calendarium, a bare \ + \"Commemoratio\" nested under Peter Chrysologus)" + true (e.Layer.cel.Cel.status = Cel.Commemoration_only); + Alcotest.(check bool) "barbara: Class3 (the same bootstrap-inference convention every OTHER \ + Commemoration_only entry in this file uses -- the calendarium gives no numeral \ + for any commemoration, hers included)" + true (e.Layer.cel.Cel.rank = V.Class3); + Alcotest.(check bool) "barbara: Red (RG124(e), \"Virg. et Mart.\")" true + (e.Layer.cel.Cel.colour = Colour.Red); + Alcotest.(check bool) "barbara: appears as a commemoration on 4 December in real output" true + (let days = Cal.year Rite_ef.context layer 2026 in + Array.to_list days + |> List.exists (fun d -> + Date.compare d.LD.date (mk 2026 12 4) = 0 + && List.exists (fun (c, _) -> slug_of c = "barbara") d.LD.commemorations)) + (* Coordinator review, finding 2, reproduced through the project's OWN extension path (an overlay), the same way the reviewer found it: adding an I-class feast on 25 December (competing against, and losing to, the @@ -422,6 +513,10 @@ let suite = `Quick test_rg16a_subject_retag_in_effect; Alcotest.test_case "ef-rebootstrap fix round 1 (F3): eusebius-confessor is White, not lectio's Red" `Quick test_eusebius_confessor_colour_corrected; + Alcotest.test_case "ef-sanctoral-audit: 18 colour corrections in effect (RG120(e)/124(e)); 3 reverted per RG120(f)" `Quick + test_audit_colours_corrected; + Alcotest.test_case "ef-sanctoral-audit: barbara (4 Dec) added, a genuine data gap" `Quick + test_barbara_added; Alcotest.test_case "RG96 search does not raise at the domain ceiling (real data)" `Quick test_transfer_search_does_not_raise_at_domain_ceiling; Alcotest.test_case "no transfer ever lands inside [Easter, Easter+7], 2005-2050" `Quick |
