use powdb_query::lexer::POWQL_KEYWORDS;
#[test]
fn the_documented_keyword_list_equals_the_lexer_table() {
let doc = std::fs::read_to_string(concat!(env!("CARGO_MANIFEST_DIR"), "/../../docs/POWQL.md"))
.expect("docs/POWQL.md must exist in the workspace");
let anchor = "### Complete keyword list";
let start = doc.find(anchor).expect("keyword-list section must exist");
let block_start = doc[start..].find("```").expect("code block must open") + start + 3;
let block_end = doc[block_start..]
.find("```")
.expect("code block must close")
+ block_start;
let mut documented: Vec<&str> = doc[block_start..block_end]
.split([',', '\n', ' '])
.map(str::trim)
.filter(|w| !w.is_empty())
.collect();
documented.sort_unstable();
let mut expected: Vec<&str> = POWQL_KEYWORDS.to_vec();
expected.sort_unstable();
let missing: Vec<_> = expected
.iter()
.filter(|w| !documented.contains(w))
.collect();
let extra: Vec<_> = documented
.iter()
.filter(|w| !expected.contains(w))
.collect();
assert_eq!(
documented, expected,
"docs/POWQL.md keyword list disagrees with lexer POWQL_KEYWORDS \
(missing from doc: {missing:?}; documented but not reserved: {extra:?})"
);
}