aboutsummaryrefslogtreecommitdiff
path: root/test/test_rite_ef.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_rite_ef.ml')
-rw-r--r--test/test_rite_ef.ml86
1 files changed, 86 insertions, 0 deletions
diff --git a/test/test_rite_ef.ml b/test/test_rite_ef.ml
index 6cd8709..9b0cb4f 100644
--- a/test/test_rite_ef.ml
+++ b/test/test_rite_ef.ml
@@ -166,6 +166,88 @@ 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 fourteen [Feast]
+ colour corrections plus the eight [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 seven were White. *)
+ List.iter
+ (fun (slug, reason) -> check_colour slug Colour.Red reason)
+ [ ("prisca", "Virg. et Mart., 18 Jan -- RG124(e)");
+ ("conversion-of-st-paul", "an Apostle's own feast day, 25 Jan -- RG124(b)");
+ ("peter", "Apostle commemoration, 25 Jan -- by consistency, see adjustments.sexp");
+ ("chair-of-st-peter", "an Apostle's own feast day, 22 Feb -- RG124(b)");
+ ("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 117's five-colour residual: a plain Confessor/Bishop/Virgin (no
+ "Mart."/"Mm." in the calendarium's own line, not an Apostle) is white
+ -- these were Red. *)
+ List.iter
+ (fun (slug, reason) -> check_colour slug Colour.White reason)
+ [ ("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 +504,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: 21 audit colour corrections are in effect (RG124)" `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