use clex_gen::generator;
#[test]
fn test_generator_with_integer_expression() {
let language = "(N[3,3]) (?:N[3,3]){\\1}";
assert_eq!(generator(language.to_string()).unwrap(), "3 3 3 3");
}
#[test]
fn test_group_not_found_edge_case() {
let language = "(?:(N)){\\1}";
assert!(generator(language.to_string()).is_err());
}
#[test]
fn test_generator_with_nested_expression() {
let language = "(N[3,3]) (?:(N[1,1]) N[2,2]{\\2}) N[1,1]{\\2}";
assert_eq!(generator(language.to_string()).unwrap(), "3 1 2 1");
}
#[test]
fn test_generator_with_float_expression() {
let language = "F[1, 1]";
assert_eq!(generator(language.to_string()).unwrap(), "1");
}
#[test]
fn test_generator_with_string_expression() {
let language = "S";
assert!(!generator(language.to_string()).unwrap().is_empty());
}
#[test]
fn test_generator_with_custom_string_expression() {
let language = "S[,,'0']";
let gen_language = generator(language.to_string()).unwrap();
assert!(!gen_language.is_empty() && gen_language.chars().all(|c| c == '0'));
}
#[test]
fn test_generator_with_numeral_charset_string_expression() {
let language = "S[,,@CH_NUM@]";
let gen_language = generator(language.to_string()).unwrap();
assert!(!gen_language.is_empty() && gen_language.chars().all(|c| c.is_ascii_digit()));
}
#[test]
fn test_generator_graph_primitives() {
let perm_res = generator("@PERM(5)@".to_string()).unwrap();
let nums: Vec<i64> = perm_res
.split_whitespace()
.map(|s| s.parse().unwrap())
.collect();
assert_eq!(nums.len(), 5);
let tree_res = generator("@TREE(4)@".to_string()).unwrap();
let lines: Vec<&str> = tree_res.trim().lines().collect();
assert_eq!(lines.len(), 3);
let dag_res = generator("@DAG(4, 3)@".to_string()).unwrap();
let dag_lines: Vec<&str> = dag_res.trim().lines().collect();
assert_eq!(dag_lines.len(), 3);
}