use spg_engine::{Engine, QueryResult};
fn b(e: &mut Engine, sql: &str) -> bool {
match e.execute(sql).unwrap() {
QueryResult::Rows { rows, .. } => {
matches!(rows[0].values[0], spg_storage::Value::Bool(true))
}
_ => panic!("rows"),
}
}
#[test]
fn regex_backreferences() {
let mut e = Engine::new();
assert!(b(&mut e, r"SELECT 'abab' ~ '(ab)\1'"));
assert!(!b(&mut e, r"SELECT 'abcd' ~ '(ab)\1'"));
assert!(b(&mut e, r"SELECT 'aa' ~ '(.)\1'"));
assert!(!b(&mut e, r"SELECT 'ab' ~ '(.)\1'"));
assert!(b(&mut e, r"SELECT 'aaaa' ~ '^(a*)\1$'"));
assert!(b(&mut e, r"SELECT 'abcb' ~ '(a(b)c)\2'"));
assert!(b(&mut e, r"SELECT 'aA' ~* '(a)\1'"));
assert!(e.execute(r"SELECT 'x' ~ '\1(a)'").is_err());
assert!(b(&mut e, "SELECT 'abc' ~ 'b'"));
}