diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/test_differential.ml | 10 | ||||
| -rw-r--r-- | test/test_golden.ml | 31 | ||||
| -rw-r--r-- | test/test_oracle.ml | 31 |
3 files changed, 71 insertions, 1 deletions
diff --git a/test/test_differential.ml b/test/test_differential.ml index c121d91..849bde4 100644 --- a/test/test_differential.ml +++ b/test/test_differential.ml @@ -903,6 +903,15 @@ let holy_week_slugs = this ONE of C23's six days in addition to the two citation fields. *) let good_friday_slug = "ef-passiontide-2-friday" +(* C37 (ef-oconnell-rubrics): RG 128 gives violet to "II/III-class vigils + outside Paschaltide". These two carried Red and White respectively -- + inherited from lectio, which inherited them from missalemeum, which is + generated from Divinum Officium. All three agree with each other and + disagree with the Missal, so no layer sharing that lineage could see it. + The Ascension's vigil is NOT here: it is the one II-class vigil INSIDE + Paschaltide and is correctly white already. *) +let violet_vigil_slugs = [ "vigil-of-st-lawrence"; "vigil-of-the-assumption" ] + (* 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 @@ -1284,6 +1293,7 @@ let layer_c_reason (l : row) (c : row) diffs = filed there. See data/ef/expected-divergences.sexp's own closure note. *) 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 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_golden.ml b/test/test_golden.ml index 876e3de..33ca362 100644 --- a/test/test_golden.ml +++ b/test/test_golden.ml @@ -1315,9 +1315,38 @@ let test_rogation_wednesday_yields_to_a_feast_2026 () = "2026-05-13 wednesday season=paschaltide week=6 slug=ef-ascension-vigil rank=class-2 colour=white \ subject=temporal name_la=- comms=[robert-bellarmine:ordinary] in=- out=[]" +(* RG 128, transcribed in docs/research/rules-register.md ยง3b: violet is used + for "II/III-class vigils outside Paschaltide". Two of colitur's five vigils + disagreed with that rule until the ef-oconnell-rubrics branch -- the + Assumption's (II class, 14 August) was White and St Lawrence's (III class, + 9 August) was Red. Both are outside Paschaltide, so both are violet. + + O'Connell, The Celebration of Mass 4th ed. (1964), section 4(c) states the + same rule and its footnote 169 names the sole exception -- "the only vigil + of II class within Eastertide is that of the Ascension and its colour is + white" -- which colitur already emits correctly (ef-ascension-vigil, white, + pinned by the two Rogation Wednesday cases just above). + + Pinned in years where each vigil is actually OBSERVED rather than impeded: + 9 August 2025 is a Saturday and 14 August 2025 a Thursday, both checked + with `date -d`. In 2026, 9 August is a Sunday and the vigil never appears. *) +let test_vigil_of_st_lawrence_is_violet_2025 () = + check ~msg:"RG 128: III-class vigil outside Paschaltide is violet, not red" 2025 8 9 + "2025-08-09 saturday season=time-after-pentecost week=8 slug=vigil-of-st-lawrence \ + rank=class-3 colour=violet subject=saint name_la=- comms=[romanus:ordinary] in=- out=[]" + +let test_vigil_of_the_assumption_is_violet_2025 () = + check ~msg:"RG 128: II-class vigil outside Paschaltide is violet, not white" 2025 8 14 + "2025-08-14 thursday season=time-after-pentecost week=9 slug=vigil-of-the-assumption \ + rank=class-2 colour=violet subject=saint name_la=- comms=[eusebius-confessor:ordinary] in=- out=[]" + let suite = ( "golden pins (known-tricky years)", - [ Alcotest.test_case "Easter extreme: 1598 earliest (22 Mar, Gauss-verified)" `Quick + [ Alcotest.test_case "RG128: St Lawrence's vigil is violet (2025)" `Quick + test_vigil_of_st_lawrence_is_violet_2025; + Alcotest.test_case "RG128: the Assumption's vigil is violet (2025)" `Quick + test_vigil_of_the_assumption_is_violet_2025; + Alcotest.test_case "Easter extreme: 1598 earliest (22 Mar, Gauss-verified)" `Quick test_easter_extreme_1598; Alcotest.test_case "Easter extreme: 1666 latest (25 Apr, Gauss-verified)" `Quick test_easter_extreme_1666; diff --git a/test/test_oracle.ml b/test/test_oracle.ml index 5177716..129c43b 100644 --- a/test/test_oracle.ml +++ b/test/test_oracle.ml @@ -1323,6 +1323,21 @@ let m25_dates = [ "2026-03-09"; "2026-03-24"; "2027-03-01"; "2027-03-16" ] to distinguish this population from a genuinely new, unrelated citation bug on some other Time-after-Pentecost feria): the SAME discipline this file's own header names for every other entry here. *) +(* M29 (ef-oconnell-rubrics) -- RG 128: violet for "vigils of II and III + class outside Paschaltide". The Vigil of St Lawrence (9 August, III class) + and the Vigil of the Assumption (14 August, II class) both qualify; + missalemeum keeps red and white respectively, as lectio and colitur also + did before this branch, because all three descend from Divinum Officium's + data files. This is the one divergence class in the file where the oracle + is not an independent witness against colitur at all -- it is colitur's own + discarded ancestor. See data/ef/expected-divergences.sexp's C37, the same + 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`. *) +let m29_dates = + [ "2026-08-14"; "2027-08-09"; "2027-08-14"; "2035-08-09"; "2035-08-14"; "2038-08-09"; + "2038-08-14" ] + let m26_dates = [ "2026-01-03"; "2026-01-10"; "2026-02-14"; "2026-06-02"; "2026-06-03"; "2026-06-20"; "2026-06-27"; "2026-07-04"; @@ -1477,6 +1492,7 @@ let layer_m_reason (c : colitur_row) (o : oracle_row) diffs = List.mem c.c_date m27_dates && 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 None (* ---------------------------------------------------------------------- *) @@ -1919,6 +1935,17 @@ let classify_2038 (c : colitur_row) (o : oracle_row) diffs = Some "IMPEDED-SUNDAY-COMM (M8's rule, RG 109(a)/111(a))" else if List.mem Comm_identity_unresolved diffs then Some "COMM-IDENTITY-UNRESOLVED (temporal-origin, no English name -- M15's limit)" + (* RG 128 -- the two vigils of II/III class outside Paschaltide whose + colour this branch (ef-oconnell-rubrics) corrected from the values + inherited via lectio from missalemeum's own Divinum Officium data. + Same population as M29 in the 2026-2027 window and C37 in the lectio + differential; named here in this window's own vocabulary. Gated on the + exact date and colour alone, so any other divergence on these days + would still surface. *) + else if + List.mem c.c_date [ "2035-08-09"; "2035-08-14"; "2038-08-09"; "2038-08-14" ] + && diffs = [ Colour_f ] + then Some "VIGIL-COLOUR-RG128 (M29, colitur; see C37)" else None (* COMMEMORATIONS join the live-window comparison (2026-08-18). @@ -2038,6 +2065,10 @@ let test_2038_class_counts () = ("CHRIST-THE-KING-WEEK (M26 shape 2b)", 2); ("CHRISTMAS-MULTI-MASS (M27)", 1); ("COLOUR (M21)", 7); + (* RG 128, ef-oconnell-rubrics: the two vigils of II/III class outside + 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); ("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); |
