50 lines
1.3 KiB
Rust
50 lines
1.3 KiB
Rust
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(&s);
|
|
parse_one_file((String::from("{% as s e1e %} adasd {%}") + s.as_str()).as_str());
|
|
parse_one_file((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("{@ x @}{@}"),
|
|
Ok(Plemege::Package(string_map! {
|
|
"x" => Plemege::Element(Element{argc: 0, sub_elements: vec![]})
|
|
})))
|
|
}
|