in src/util.rs [1130:1169]
fn test_ascii_unescape_default() {
let mut alphabet = r#"\\'"\t\n\r"#.as_bytes().to_vec();
alphabet.push(b'a');
alphabet.push(b'1');
alphabet.push(0);
alphabet.push(0xff);
let mut input = vec![];
let mut output = vec![];
let mut alphabet_indexes = [0; 3];
let mut tested_cases = 0;
// Following loop may test duplicated inputs, but it's not a problem
loop {
input.clear();
output.clear();
for idx in alphabet_indexes {
if idx < alphabet.len() {
input.push(alphabet[idx]);
}
}
if input.is_empty() {
break;
}
output.extend(input.as_slice().escape_ascii());
let result = super::ascii_unescape_default(&output).unwrap();
assert_eq!(input, result, "{:?}", output);
tested_cases += 1;
for idx in &mut alphabet_indexes {
*idx += 1;
if *idx > alphabet.len() {
// Use `>` so we can test various input length.
*idx = 0;
} else {
break;
}
}
}
assert_eq!(tested_cases, (alphabet.len() + 1).pow(3) - 1);
let empty_result = super::ascii_unescape_default(&[]).unwrap();
assert!(empty_result.is_empty(), "{:?}", empty_result);
}