summaryrefslogtreecommitdiff
path: root/lib/kernel/validate.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kernel/validate.ml')
-rw-r--r--lib/kernel/validate.ml11
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/kernel/validate.ml b/lib/kernel/validate.ml
index 1a0248b..c9d4263 100644
--- a/lib/kernel/validate.ml
+++ b/lib/kernel/validate.ml
@@ -220,7 +220,14 @@ let run (rite : ('s, 'r) Rite.t) (layer : 'r Layer.t) ~year =
(Printf.sprintf "resolving the year raised (%s); nothing could be verified as accounted for"
(Printexc.to_string exn))
| resolved ->
- let idx = Layer.index_by_date layer in
+ (* Same span reasoning as {!Calendar.year}: the liturgical year
+ straddles civil [year] and [year + 1], so both are resolved for
+ movable entries. *)
+ (* A liturgical year straddles two civil years, so both are named.
+ [Layer.index] filters them to the kernel domain, which is what keeps
+ the edges (year = 1583 naming 1582, year = 9999 naming 10000) from
+ calling the rite's [easter] out of range. *)
+ let idx = Layer.index layer ~easter:rite.Rite.easter ~years:[ year - 1; year; year + 1 ] in
let bump tbl slug = Hashtbl.replace tbl slug (1 + (try Hashtbl.find tbl slug with Not_found -> 0)) in
(* Expected: how many times each layer entry's own Date_spec resolves
within [start, stop]. Walking dates and querying [Layer.on_date]
@@ -232,7 +239,7 @@ let run (rite : ('s, 'r) Rite.t) (layer : 'r Layer.t) ~year =
let expected : (string, int) Hashtbl.t = Hashtbl.create 64 in
List.iter
(fun date ->
- Layer.on_date idx ~month:(Date.month date) ~day:(Date.day date)
+ Layer.on_date idx date
|> List.iter (fun (e : 'r Layer.entry) ->
bump expected (Slug.to_string e.Layer.cel.Celebration.slug)))
days;