Skip to content

Commit

Permalink
test: random input also for patterns
Browse files Browse the repository at this point in the history
  • Loading branch information
Armin Becher authored and Armin Becher committed Apr 27, 2024
1 parent 46a9289 commit f00871d
Showing 1 changed file with 44 additions and 41 deletions.
85 changes: 44 additions & 41 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -173,49 +173,52 @@ mod tests {
#[test]
fn is_match_random() {
const PATTERN_LEN: usize = 100;
let mut rng = rand::thread_rng();
let mut pattern: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(PATTERN_LEN)
.map(char::from)
.collect();
for _ in 0..rng.gen_range(0..15) {
let idx = rng.gen_range(0..PATTERN_LEN);
pattern.replace_range(idx..idx + 1, "?")
}
for _ in 0..rng.gen_range(0..15) {
let idx = rng.gen_range(0..PATTERN_LEN);
pattern.replace_range(idx..idx + 1, "*")
}
let m = WildMatch::new(&pattern);
for pattern_idx in 0..rng.gen_range(0..10_000) {
let mut input = pattern.clone();
for (i, c) in pattern.chars().rev().enumerate() {
let idx = pattern.len() - i - 1;
if c == '?' {
let rand_char: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(1)
.map(char::from)
.collect();
input.replace_range(idx..idx + 1, &rand_char)
}
if c == '*' {
let rand_char: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(rng.gen_range(0..15))
.map(char::from)
.collect();
input.replace_range(idx..idx + 1, &rand_char)

for _ in 0..1_000 {
let mut rng = rand::thread_rng();
let mut pattern: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(PATTERN_LEN)
.map(char::from)
.collect();
for _ in 0..rng.gen_range(0..15) {
let idx = rng.gen_range(0..PATTERN_LEN);
pattern.replace_range(idx..idx + 1, "?")
}
for _ in 0..rng.gen_range(0..15) {
let idx = rng.gen_range(0..PATTERN_LEN);
pattern.replace_range(idx..idx + 1, "*")
}
let m = WildMatch::new(&pattern);
for pattern_idx in 0..rng.gen_range(0..1_000) {
let mut input = pattern.clone();
for (i, c) in pattern.chars().rev().enumerate() {
let idx = pattern.len() - i - 1;
if c == '?' {
let rand_char: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(1)
.map(char::from)
.collect();
input.replace_range(idx..idx + 1, &rand_char)
}
if c == '*' {
let rand_char: String = rand::thread_rng()
.sample_iter(&Alphanumeric)
.take(rng.gen_range(0..15))
.map(char::from)
.collect();
input.replace_range(idx..idx + 1, &rand_char)
}
}
assert!(
m.matches(&input),
"Pattern ({}): {} doesn't match input: {}",
pattern_idx,
pattern,
input
);
}
assert!(
m.matches(&input),
"Pattern ({}): {} doesn't match input: {}",
pattern_idx,
pattern,
input
);
}
}

Expand Down

0 comments on commit f00871d

Please sign in to comment.