pub(crate) fn exercise(query: &str) {
let Ok(tokens) = rudb_parse::tokenize(query) else {
return;
};
let mut previous = 0;
for token in &tokens {
let (start, end) = (token.start as usize, token.end as usize);
assert!(start >= previous, "a token starts before the one before it ended");
assert!(start <= end, "a token ends before it starts");
assert!(end <= query.len(), "a token runs past the end of the query");
assert!(query.is_char_boundary(start), "a token starts in the middle of a character");
assert!(query.is_char_boundary(end), "a token ends in the middle of a character");
previous = end;
}
if rudb_parse::parse(query).is_err() {
return;
}
let _ = rudb_parse::parse_ast(query);
}