use yyyi_ru::mtgott::parser::*; use std::collections::HashMap; fn generate_strings( prefix: &mut String, target_length: usize, alphabet: &[char], f: &mut impl Fn(String), ) { if prefix.len() == target_length { f(prefix.clone()); } else { for &c in alphabet { prefix.push(c); generate_strings(prefix, target_length, alphabet, f); prefix.pop(); } } } #[test] fn test_parse_file_with_all_combinations() { let alphabet = [' ', '{', '%', '}', '$', 'a']; let target_length = 5 ; generate_strings(&mut String::new(), target_length, &alphabet, &mut |s| { println!("Parsing {s}"); parse_one_file_packed(&s); parse_one_file_packed((String::from("{% as s e1e %} adasd {%}") + s.as_str()).as_str()); parse_one_file_packed((String::from("{% as s e1e %} a{[111 . 2332]]dasd {%} {% as s e1e %} adas {{}}d {%} ") + s.as_str()).as_str()); }); } macro_rules! string_map { ($($key:expr => $val:expr),* $(,)?) => {{ let mut map = HashMap::new(); $( map.insert($key.to_string(), $val); )* map }}; } #[test] fn resulting_package() { assert_eq!(parse_one_file_packed("{@ x @}{@}"), Ok(Plemege::Package(string_map! { "x" => Plemege::Element(Element{argc: 0, sub_elements: vec![]}) }))) }