macro_rules! searcher {
($name:ident, $re:expr, $haystack:expr) => (
searcher!($name, $re, $haystack, vec vec![]);
);
($name:ident, $re:expr, $haystack:expr, $($steps:expr,)*) => (
searcher!($name, $re, $haystack, vec vec![$($steps),*]);
);
($name:ident, $re:expr, $haystack:expr, $($steps:expr),*) => (
searcher!($name, $re, $haystack, vec vec![$($steps),*]);
);
($name:ident, $re:expr, $haystack:expr, vec $expect_steps:expr) => (
#[ test]
#[ allow(unused_imports)]
fn $name() {
use std::str::pattern::{Pattern, Searcher};
use std::str::pattern::SearchStep::{Match , Reject, Done};
let re = regex::Regex::new($re).unwrap();
let mut se = re.into_searcher($haystack);
let mut got_steps = vec![];
loop {
match se.next() {
Done => break ,
step => { got_steps.push(step); }
}
}
assert_eq!(got_steps, $expect_steps);
}
);
}
searcher!(searcher_empty_regex_empty_haystack, r"" , "" , Match (0 , 0 ));
searcher!(
searcher_empty_regex,
r"" ,
"ab" ,
Match (0 , 0 ),
Reject(0 , 1 ),
Match (1 , 1 ),
Reject(1 , 2 ),
Match (2 , 2 )
);
searcher!(searcher_empty_haystack, r"\d" , "" );
searcher!(searcher_one_match, r"\d" , "5" , Match (0 , 1 ));
searcher!(searcher_no_match, r"\d" , "a" , Reject(0 , 1 ));
searcher!(
searcher_two_adjacent_matches,
r"\d" ,
"56" ,
Match (0 , 1 ),
Match (1 , 2 )
);
searcher!(
searcher_two_non_adjacent_matches,
r"\d" ,
"5a6" ,
Match (0 , 1 ),
Reject(1 , 2 ),
Match (2 , 3 )
);
searcher!(searcher_reject_first, r"\d" , "a6" , Reject(0 , 1 ), Match (1 , 2 ));
searcher!(
searcher_one_zero_length_matches,
r"\d*" ,
"a1b2" ,
Match (0 , 0 ), // ^
Reject(0 , 1 ), // a
Match (1 , 2 ), // a1
Reject(2 , 3 ), // a1b
Match (3 , 4 ), // a1b2
);
searcher!(
searcher_many_zero_length_matches,
r"\d*" ,
"a1bbb2" ,
Match (0 , 0 ), // ^
Reject(0 , 1 ), // a
Match (1 , 2 ), // a1
Reject(2 , 3 ), // a1b
Match (3 , 3 ), // a1bb
Reject(3 , 4 ), // a1bb
Match (4 , 4 ), // a1bbb
Reject(4 , 5 ), // a1bbb
Match (5 , 6 ), // a1bbba
);
searcher!(
searcher_unicode,
r".+?" ,
"Ⅰ1Ⅱ2" ,
Match (0 , 3 ),
Match (3 , 4 ),
Match (4 , 7 ),
Match (7 , 8 )
);
Messung V0.5 in Prozent C=81 H=92 G=86
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland