diff options
Diffstat (limited to 'test/test_fiuv_ordo.ml')
| -rw-r--r-- | test/test_fiuv_ordo.ml | 77 |
1 files changed, 47 insertions, 30 deletions
diff --git a/test/test_fiuv_ordo.ml b/test/test_fiuv_ordo.ml index 24eeed0..5c009a9 100644 --- a/test/test_fiuv_ordo.ml +++ b/test/test_fiuv_ordo.ml @@ -68,7 +68,7 @@ let sha256_of_file path = | Some i -> String.sub line 0 i | None -> Alcotest.failf "unexpected sha256sum output for %s: %S" path line) -let fixture_sha256 = "a52cc4dae32ce4d07446c9daa86287cb99796f6584b3d571e3a3cbdc93fca396" +let fixture_sha256 = "a744a2dbc7c8cf09590005e956c973f316209f3cf102b8035edadebf764110de" let real_layer () = let layer = @@ -112,6 +112,12 @@ type ordo_row = { gloria : bool option; credo : bool option; praef : string option; + alt_te_deum : bool option; + (** the "-VEL-" Cum-Sanctissima-alternative office's own Te Deum, + when this day prints one -- see tools/extract_fiuv_ordo.ml's own + [row.alt_te_deum] citation. Captured, not compared here: closing + F3 needed [te_deum] itself to stop reading it, not a new + colitur-side axis to check it against. *) } [@@deriving sexp] @@ -361,57 +367,68 @@ let test_gloria_matches_or_is_explained () = let test_te_deum_coverage () = let ordo = ordo_rows () in let no_te_deum = List.filter (fun o -> o.te_deum = None) ordo in - Alcotest.(check int) "the unresolved-Te-Deum population matches this fixture's own measured figure" 127 + Alcotest.(check int) "the unresolved-Te-Deum population matches this fixture's own measured figure" 133 (List.length no_te_deum) let describe_te_deum_mismatch (o : ordo_row) (t : colitur_te_deum_row) = Printf.sprintf "%s %S: colitur te_deum=%b, Ordo te_deum=%b (rank=%s commemoration=%b)" o.date o.title t.t_te_deum (Option.get o.te_deum) (V.rank_to_string t.t_rank) t.t_has_commemoration -(* F2 (every I-class and omissible vigil) and F4 (the three September - Ember days) were BOTH found against the FIRST, buggy extraction (see - the fixture's own provenance header, "RE-EXTRACTED" note, and - {!Rite_ef.Rubrics_ef.te_deum}'s own 237(a) comment for the full - account of the extractor bug and its fix) -- re-run against the - corrected data, NEITHER fires any more: colitur's own answer already - matched the CORRECTED Ordo on every one of those 7 dates, all along. +(* F2 (every I-class and omissible vigil), F4 (the three September Ember + days) and NOW F3 (the privileged-Lenten/Passiontide-feria-plus- + commemoration shape) were ALL THREE found against a buggy extraction + (see the fixture's own provenance header, "FIX HISTORY" section, and + {!Rite_ef.Rubrics_ef.te_deum}'s own 237(a) comment for F2/F4's own + account) -- re-run against the corrected data, NONE of the three fires + any more. + + F3 specifically was NEVER a Te Deum defect on either side: the six + dates print a complete SECOND office after a literal "-VEL-" ("or") + separator -- the same saint kept outright under the 2020 decree Cum + Sanctissima, with its OWN "Ad Mat. ... Te Deum" lessons -- and + tools/extract_fiuv_ordo.ml's own [extract_te_deum] used to scan the + WHOLE block unbounded, so on these six days (whose PRIMARY, strict- + 1962 office states no "Ad Mat." of its own at all) it silently read + the SECOND office's Te Deum instead. Fixed at the source + (tools/extract_fiuv_ordo.ml's own [split_at_alt_office]); the fixture + re-extracted from the SAME pdftotext dump. colitur's own answer + ([false], the primary office's own ferial Matins) was never wrong -- + the OTHER side of the comparison was reading the wrong printed office. + [te_deum] now reads [None] (unresolved, not [false]) on these six + dates, because the PRIMARY office's own text states no "Ad Mat." at + all, so there is nothing to positively confirm either direction from + -- consistent with [te_deum]'s own documented meaning elsewhere in + this fixture. + + NOTE, so a reader arriving here from data/ef/expected-divergences-lms.sexp's + own L5 does not draw the wrong conclusion: F3 never "contradicted" L5 + in the first place, and its removal does not corroborate L5 either. + Both were the SAME underlying fact read two different ways -- L5's own + 16 LMS dates and these 6 FIUV dates are exactly the shape the 2020 + decree Cum Sanctissima changes, and colitur, by CLAUDE.md's own binding + decision 2, models the 1962 core without it. See L5's own rewritten + entry for the full account, including the FIUV "-VEL-" dual printing + as the decisive evidence for BOTH files. + Removed rather than kept as dead code with an [expected 0] pin, the same "an entry that stops firing is a real change, not silently absorbed" discipline data/ef/expected-divergences-lms.sexp's own L1/L3 closures already establish -- see that file's own history for the - precedent this follows. - - F3, the privileged-Lenten/Passiontide-feria-plus-commemoration shape - L5 (data/ef/expected-divergences-lms.sexp) already found for Gloria, - REMAINS: 6 instances, unaffected by the extractor fix (none of the six - raw source lines used "sine Te Deum" at all -- confirmed directly - against the pdftotext dump, see F3's own citation). CONTRADICTS L5, - not corroborates it: FIUV's own [gloria] is [false] on all six dates - (agreeing with colitur), while its [te_deum] is [true] on the same six - -- see F3's own citation in data/ef/expected-divergences-fiuv.sexp for - the full account of why Gloria and Te Deum diverge on the identical - day. *) -let is_f3_lenten_commemoration (_ : ordo_row) (t : colitur_te_deum_row) = - t.t_has_commemoration && t.t_rank = V.Class3 + precedent this follows. *) let test_te_deum_matches_or_is_explained () = let ordo = ordo_rows () in let colitur = colitur_te_deum_rows () in let unexplained = ref [] in - let f3_count = ref 0 in List.iter2 (fun (o : ordo_row) (t : colitur_te_deum_row) -> if not (String.equal o.date t.t_date) then Alcotest.failf "misaligned: ordo %s vs colitur %s" o.date t.t_date; match o.te_deum with | None -> () - | Some otd -> - if Bool.equal otd t.t_te_deum then () - else if is_f3_lenten_commemoration o t then incr f3_count - else unexplained := describe_te_deum_mismatch o t :: !unexplained) + | Some otd -> if Bool.equal otd t.t_te_deum then () else unexplained := describe_te_deum_mismatch o t :: !unexplained) ordo colitur; Alcotest.(check (list string)) "every Te Deum mismatch is named in the allow-list -- none unexplained" [] - (List.rev !unexplained); - Alcotest.(check int) "F3 (Lenten privileged feria + commemoration) count" 6 !f3_count + (List.rev !unexplained) let suite = ( "fiuv-ordo", |
