mod assist;
mod lu;
mod major;
mod sun_moon;
mod ziwei;
use super::Rule;
pub fn all() -> impl Iterator<Item = &'static Rule> {
ziwei::RULES
.iter()
.chain(sun_moon::RULES)
.chain(major::RULES)
.chain(lu::RULES)
.chain(assist::RULES)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::pattern::ALL_PATTERNS;
#[test]
fn rules_cover_every_pattern_key_once() {
let mut keys: Vec<_> = all().map(|r| r.key).collect();
let n = keys.len();
keys.sort_by_key(|k| k.as_key());
keys.dedup();
assert_eq!(keys.len(), n, "duplicate rule");
let missing: Vec<_> = ALL_PATTERNS
.iter()
.filter(|p| !all().any(|r| r.key == **p))
.map(|p| p.as_key())
.collect();
assert!(missing.is_empty(), "patterns without rule: {missing:?}");
}
}