mod common;
use hashconsing::HConsign;
use simple_term_rewriter::term::syntax::TermFactory;
use common::regex::constructors::{alt, atom, concat, empty, epsilon, star};
use common::regex::lang::RegexOp;
#[test]
fn display_leaf_empty() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(format!("{}", empty(&mut f)), "∅");
}
#[test]
fn display_leaf_epsilon() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(format!("{}", epsilon(&mut f)), "ε");
}
#[test]
fn display_leaf_atom() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(format!("{}", atom(b'a', &mut f)), "a");
assert_eq!(format!("{}", atom(b'z', &mut f)), "z");
}
#[test]
fn display_unary_star() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(format!("{}", star(atom(b'a', &mut f), &mut f)), "*(a)");
}
#[test]
fn display_unary_star_of_epsilon() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(format!("{}", star(epsilon(&mut f), &mut f)), "*(ε)");
}
#[test]
fn display_binary_alt() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(
format!("{}", alt(atom(b'a', &mut f), atom(b'b', &mut f), &mut f)),
"+(a, b)"
);
}
#[test]
fn display_binary_concat() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(
format!("{}", concat(epsilon(&mut f), empty(&mut f), &mut f)),
"·(ε, ∅)"
);
}
#[test]
fn display_nested_alt_of_star_and_concat() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(
format!(
"{}",
alt(
star(atom(b'a', &mut f), &mut f),
concat(atom(b'b', &mut f), epsilon(&mut f), &mut f),
&mut f
)
),
"+(*(a), ·(b, ε))"
);
}
#[test]
fn display_deeply_nested_stars() {
let mut f: TermFactory<RegexOp> = HConsign::empty();
assert_eq!(
format!(
"{}",
star(star(star(atom(b'a', &mut f), &mut f), &mut f), &mut f)
),
"*(*(*(a)))"
);
}