diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/test_differential.ml | 18 | ||||
| -rw-r--r-- | test/test_lectionary_ef.ml | 10 | ||||
| -rw-r--r-- | test/test_oracle.ml | 37 | ||||
| -rw-r--r-- | test/test_sanctoral_ef.ml | 8 |
4 files changed, 71 insertions, 2 deletions
diff --git a/test/test_differential.ml b/test/test_differential.ml index 849bde4..25a690d 100644 --- a/test/test_differential.ml +++ b/test/test_differential.ml @@ -912,6 +912,19 @@ let good_friday_slug = "ef-passiontide-2-friday" Paschaltide and is correctly white already. *) let violet_vigil_slugs = [ "vigil-of-st-lawrence"; "vigil-of-the-assumption" ] +(* C38 (ef-sanctoral-status): `ubaldus` (16 May) and `didacus` (13 November) + were promoted from Commemoration_only to Feast on the Missal's own + universal calendarium, which ranks both "III classis" outright. lectio + inherits the Commemoration_only status from missalemeum, so where colitur + now observes the saint, lectio still observes the feria -- hence the slug, + rank and both citations differ together. Two exact shapes, not one: + 16 May falls in Paschaltide, whose ferial colour is ALREADY white, so no + colour difference arises there; 13 November is Time after Pentecost, green, + so the white confessor changes it. Both shapes are spelled out rather than + collapsed into a subset check, so a colour difference appearing on 16 May + (or vanishing on 13 November) would surface as unexplained. *) +let promoted_feast_slugs = [ "ubaldus"; "didacus" ] + (* C26 (task 8, fix round 2, coordinator review, Important): Passion week's own real Tuesday Mass (tools/bootstrap_lectionary.ml's own [passion_tuesday_entry] comment has the full Missal citation and both @@ -1294,6 +1307,11 @@ let layer_c_reason (l : row) (c : row) diffs = else if String.equal c.slug good_friday_slug && diffs = [ First_f; Gospel_f; Colour_f ] then Some "C36" else if List.mem c.slug violet_vigil_slugs && diffs = [ Colour_f ] then Some "C37" + else if + List.mem c.slug promoted_feast_slugs + && (diffs = [ Slug_f; Rank; First_f; Gospel_f ] + || diffs = [ Slug_f; Rank; First_f; Gospel_f; Colour_f ]) + then Some "C38" else if List.mem c.slug holy_week_slugs && diffs = [ First_f; Gospel_f ] then Some "C23" else if String.equal c.slug passion_tuesday_slug && diffs = [ First_f; Gospel_f ] then Some "C26" else if String.equal c.slug advent_ember_sat_slug && diffs = [ First_f; Gospel_f ] then Some "C27" diff --git a/test/test_lectionary_ef.ml b/test/test_lectionary_ef.ml index a5a0f6e..d56d187 100644 --- a/test/test_lectionary_ef.ml +++ b/test/test_lectionary_ef.ml @@ -442,11 +442,21 @@ let test_step4_assignment_table () = Alcotest.(check (list (pair string string))) "the Commons assignment table, exactly" [ ("benedict", "common-of-abbots"); + ("didacus", "common-of-a-confessor-not-a-bishop-2"); ("frances-rome", "common-of-non-virgins-2"); ("gregory-the-great", "common-of-supreme-pontiffs"); ("isidore-of-seville", "common-of-doctors"); ("patrick", "common-of-a-confessor-bishop-1"); + (* ef-sanctoral-status: ubaldus and didacus were promoted from + Commemoration_only to Feast on the Missal's own universal + calendarium, which ranks both "III classis" outright with no + commemoration rubric. Each takes its Mass from a Common with only + its own Oratio proper, per its own rubric at its own date, so + neither needed a proper authored -- only an assignment. ubaldus + shares patrick's Common exactly ("Missa Statuit, de Communi + Confessoris Pontificis I loco"). *) ("sts-felicitas-perpetua", "common-of-non-virgins-1"); + ("ubaldus", "common-of-a-confessor-bishop-1"); ("vincent-ferrer", "common-of-a-confessor-not-a-bishop-1") ] assigned diff --git a/test/test_oracle.ml b/test/test_oracle.ml index 129c43b..7ee3848 100644 --- a/test/test_oracle.ml +++ b/test/test_oracle.ml @@ -1334,6 +1334,20 @@ let m25_dates = [ "2026-03-09"; "2026-03-24"; "2027-03-01"; "2027-03-16" ] fix seen from the lectio side, and register 6.20 on the shared lineage. Spans all three oracle windows. 2026-08-09 is absent because it is a Sunday that year and the vigil never occurs; checked with `date -d`. *) +(* M30 (ef-sanctoral-status) -- `ubaldus` (16 May) and `didacus` (13 Nov), + promoted from Commemoration_only to Feast on the Missal's own universal + calendarium ("III classis" outright, no commemoration rubric, and a Mass + entry of their own in the Proprium). missalemeum keeps them as + commemorations, so on these days colitur observes the SAINT where the + oracle observes the feria: rank, observed identity and both citations + differ together, and the commemoration colitur used to emit is gone. + Colour differs only on 13 November, where the ferial green gives way to + the confessor's white; 16 May is in Paschaltide, already white. The same + population as C38 in the lectio differential -- and, as there, the oracle + here is colitur's own discarded ancestor rather than an independent + witness (register 6.20). *) +let m30_dates = [ "2026-05-16"; "2026-11-13"; "2027-11-13" ] + let m29_dates = [ "2026-08-14"; "2027-08-09"; "2027-08-14"; "2035-08-09"; "2035-08-14"; "2038-08-09"; "2038-08-14" ] @@ -1493,6 +1507,11 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs = && subset diffs [ Observed_identity_unresolved; First_mismatch; Gospel_mismatch ] then Some "M27" else if List.mem c.c_date m29_dates && subset diffs [ Colour_f ] then Some "M29" + else if List.mem c.c_date m30_dates + && subset diffs + [ Rank; Colour_f; Comm_presence; Comm_count; Observed_identity_mismatch; + Comm_identity_unresolved; First_mismatch; Gospel_mismatch ] + then Some "M30" else None (* ---------------------------------------------------------------------- *) @@ -1844,7 +1863,19 @@ let classify_2038 (c : colitur_row) (o : oracle_row) diffs = nh = 0 || at 0 in let first_is s = match c.c_first with Some f -> contains f s | None -> false in - if contains title "Mass of the B. V. M." then Some "BVM-SATURDAY-MASS (M26 shape 1)" + (* ef-sanctoral-status: `didacus`, promoted to Feast on the Missal's own + calendarium. 13 November 2038 is a SATURDAY, so before the promotion the + day kept RG 78's votive Office of the BVM (nothing else occupied it) and + after it the III-class feast does. Classified here explicitly, ahead of + every other branch, because without it the day falls through to the + BVM-Saturday branch and is labelled as the very office the promotion + REMOVED -- a label that would read as "still a BVM Saturday" and hide the + real cause. Same population as M30 in the 2026-2027 window and C38 in the + lectio differential. 16 May 2038 is a Sunday, so `ubaldus` is impeded and + never reaches this window at all. *) + if c.c_date = "2038-11-13" then + Some "PROMOTED-FEAST-RG-CALENDARIUM (M30, colitur; see C38)" + else if contains title "Mass of the B. V. M." then Some "BVM-SATURDAY-MASS (M26 shape 1)" else if first_is "Col 1:12-20" then Some "CHRIST-THE-KING-WEEK (M26 shape 2b)" else if diffs = [ Colour_f ] && List.mem c.c_observed_slug m21_2038_slugs then Some "COLOUR (M21)" else if first_is "Judith" then Some "JUDITH (M28, register 6.6)" @@ -2069,6 +2100,10 @@ let test_2038_class_counts () = Paschaltide. 2 of 2 possible -- neither 9 nor 14 August 2038 is a Sunday, so both vigils are actually observed that year. *) ("VIGIL-COLOUR-RG128 (M29, colitur; see C37)", 2); + (* ef-sanctoral-status: 13 November 2038 is a Saturday, so the + promoted `didacus` displaces RG 78's BVM Office there. 1 of 2 + possible: 16 May 2038 is a Sunday and `ubaldus` is impeded. *) + ("PROMOTED-FEAST-RG-CALENDARIUM (M30, colitur; see C38)", 1); ("COMM-NAME-FORM (same entity, different English name)", 2); ("COMM-ONLY-TIE-BREAK (RG-under-determined convention -- register 6.16)", 1); ("JOSEPH-ANNUNCIATION-TRANSFER-ORDER (C14's own collision)", 2); diff --git a/test/test_sanctoral_ef.ml b/test/test_sanctoral_ef.ml index ebf96dc..5c46edf 100644 --- a/test/test_sanctoral_ef.ml +++ b/test/test_sanctoral_ef.ml @@ -47,7 +47,13 @@ let test_load_and_counts () = let commemoration_only = List.filter (fun e -> e.L.cel.Cel.status = Cel.Commemoration_only) l.L.entries in - Alcotest.(check int) "104 Commemoration_only" 104 (List.length commemoration_only); + (* 102, not 104: ef-sanctoral-status promoted `ubaldus` (16 May) and + `didacus` (13 November) to Feast. Both are ranked "III classis" outright + in the Missal's own universal calendarium, with no commemoration rubric, + and both have their own Mass entry in the Proprium taking its readings + from a Common. They were the ONLY two defects found by auditing all 290 + fixed-date entries against that calendarium -- see the register. *) + Alcotest.(check int) "102 Commemoration_only" 102 (List.length commemoration_only); let class1 = List.filter (fun e -> e.L.cel.Cel.rank = V.Class1) l.L.entries in Alcotest.(check int) "12 Class1" 12 (List.length class1); let temporal_subjects = List.filter (fun e -> e.L.cel.Cel.subject = Sub.Temporal) l.L.entries in |
