clex_gen 0.4.0

A generator for clex language
Documentation
use clex_gen::generator;

#[test]
fn test_generator_with_integer_expression() {
    let language = "(N[3,3]) (?:N[3,3]){\\1}";

    // Validate the output_text based on the generated AST
    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}";

    // Validate the output_text based on the generated AST
    assert_eq!(generator(language.to_string()).unwrap(), "3 1 2 1");
}

#[test]
fn test_generator_with_float_expression() {
    let language = "F[1, 1]";

    // Validate the output_text based on the generated AST
    assert_eq!(generator(language.to_string()).unwrap(), "1");
}

#[test]
fn test_generator_with_string_expression() {
    let language = "S";

    // Validate the output_text based on the generated AST
    assert!(!generator(language.to_string()).unwrap().is_empty());
}

#[test]
fn test_generator_with_custom_string_expression() {
    let language = "S[,,'0']";

    // Validate the output_text based on the generated AST
    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@]";

    // Validate the output_text based on the generated AST
    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); // N-1 edges = 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);
}