aboutsummaryrefslogtreecommitdiff
path: root/test/test_sanctoral_ef.ml
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_sanctoral_ef.ml')
-rw-r--r--test/test_sanctoral_ef.ml37
1 files changed, 35 insertions, 2 deletions
diff --git a/test/test_sanctoral_ef.ml b/test/test_sanctoral_ef.ml
index 8fb178f..e3b34a6 100644
--- a/test/test_sanctoral_ef.ml
+++ b/test/test_sanctoral_ef.ml
@@ -28,17 +28,50 @@ let load () =
let mkdate m d = match DS.fixed ~month:m ~day:d with Ok t -> t | Error e -> failwith e
+(* Counts re-derived 2026-08-12 (ef-rebootstrap) against the regenerated
+ source INI directly (`grep -c '^\['` minus the [layer] header itself;
+ `grep '^rank' | sort | uniq -c`) -- NOT copied from a `colitur day`/
+ bootstrap-tool run, per this project's own "derive the new value, don't
+ transcribe it from output" pinning discipline. The source's SHA-256 moved
+ 6a25e634... -> 1b303ef2..., correcting: 15 entries wrongly `rank =
+ commemoration` that are really class-3 feasts (322 -> 327's own feast/
+ comm split moves 15 the other way before the net +5 below); 5 entries
+ newly present (agnes-secundo, boniface-martyr, eusebius-confessor,
+ evaristus, theodore -- all Commemoration_only), so 322 + 5 = 327 and
+ 114 - 15 + 5 = 104. Class1 count (12) is untouched by this regeneration --
+ none of the 20 changed/added entries is Class1. *)
let test_load_and_counts () =
let l = load () in
- Alcotest.(check int) "322 entries" 322 (List.length l.L.entries);
+ Alcotest.(check int) "327 entries" 327 (List.length l.L.entries);
let commemoration_only =
List.filter (fun e -> e.L.cel.Cel.status = Cel.Commemoration_only) l.L.entries
in
- Alcotest.(check int) "114 Commemoration_only" 114 (List.length commemoration_only);
+ Alcotest.(check int) "104 Commemoration_only" 104 (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
Alcotest.(check int) "no Subject.Temporal" 0 (List.length temporal_subjects);
+ (* ef-rebootstrap fix round 1 (F8): a guard against WHOLESALE Polish-name
+ loss, the exact defect lectio itself shipped once (a regeneration that
+ dropped all 322 name.pl entries, the "SECOND Critical" the lectio side
+ of this session's own work found and fixed -- register/ledger record).
+ `parse_names`'s own `field_opt` change (this task's first commit) can
+ legitimately drop to en-only for a genuinely pl-less source entry --
+ verified NOT to silently drop a PRESENT name -- but nothing before
+ this assertion would have caught a regeneration that dropped pl
+ WHOLESALE the way lectio's once did: `test_load_and_counts` checked
+ entry/status/rank counts only, none of which move if every name.pl
+ vanishes. Independently re-derived, not transcribed: `grep -c
+ '^name.pl' tridentine-calendar.ini` = 322 (327 entries, 5 lack it --
+ the same 5 `parse_names` documents), cross-checked against
+ `grep -c '(pl' data/ef/sanctoral.sexp` = 322 exactly. *)
+ let with_pl =
+ List.filter
+ (fun e -> Names.find e.L.cel.Cel.names (Lang.of_string_exn "pl") <> None)
+ l.L.entries
+ in
+ Alcotest.(check int) "322 of 327 entries carry a Polish name (5 legitimately do not)" 322
+ (List.length with_pl);
(* Every slug already had to pass Slug.of_string during load (Slug.t_of_sexp
is the validating parser -- an invalid slug would have failed the whole
Layer.load with Error, never landing here silently). Re-checking is