let finder = match $mod::One::$cons(needle) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let iter = finder.iter(&data); let got = double_ended_take(
iter,
take_side.iter().cycle().cloned(),
); let expected = naive1_iter(needle, &data);
let finder = match $mod::Two::$cons(needle1, needle2) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let iter = finder.iter(&data); let got = double_ended_take(
iter,
take_side.iter().cycle().cloned(),
); let expected = naive2_iter(needle1, needle2, &data);
let finder = match $mod::Three::$cons(needle1, needle2, needle3) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let iter = finder.iter(&data); let got = double_ended_take(
iter,
take_side.iter().cycle().cloned(),
); let expected = naive3_iter(needle1, needle2, needle3, &data);
fn qc_memchr1_iter(data: Vec<u8>) -> TestResult { let needle = 0; let finder = match $mod::One::$cons(needle) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let got = finder.iter(&data); let expected = naive1_iter(needle, &data);
TestResult::from_bool(got.eq(expected))
}
fn qc_memchr1_rev_iter(data: Vec<u8>) -> TestResult { let needle = 0;
let finder = match $mod::One::$cons(needle) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let got = finder.iter(&data).rev(); let expected = naive1_iter(needle, &data).rev();
TestResult::from_bool(got.eq(expected))
}
fn qc_memchr2_iter(data: Vec<u8>) -> TestResult { let needle1 = 0; let needle2 = 1;
let finder = match $mod::Two::$cons(needle1, needle2) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let got = finder.iter(&data); let expected = naive2_iter(needle1, needle2, &data);
TestResult::from_bool(got.eq(expected))
}
fn qc_memchr2_rev_iter(data: Vec<u8>) -> TestResult { let needle1 = 0; let needle2 = 1;
let finder = match $mod::Two::$cons(needle1, needle2) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let got = finder.iter(&data).rev(); let expected = naive2_iter(needle1, needle2, &data).rev();
TestResult::from_bool(got.eq(expected))
}
fn qc_memchr3_iter(data: Vec<u8>) -> TestResult { let needle1 = 0; let needle2 = 1; let needle3 = 2;
let finder = match $mod::Three::$cons(needle1, needle2, needle3) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let got = finder.iter(&data); let expected = naive3_iter(needle1, needle2, needle3, &data);
TestResult::from_bool(got.eq(expected))
}
fn qc_memchr3_rev_iter(data: Vec<u8>) -> TestResult { let needle1 = 0; let needle2 = 1; let needle3 = 2;
let finder = match $mod::Three::$cons(needle1, needle2, needle3) {
None => return TestResult::discard(),
Some(finder) => finder,
}; let got = finder.iter(&data).rev(); let expected = naive3_iter(needle1, needle2, needle3, &data).rev();
TestResult::from_bool(got.eq(expected))
}
fn qc_memchr1_iter_size_hint(data: Vec<u8>) -> TestResult { // test that the size hint is within reasonable bounds let needle = 0; let finder = match $mod::One::$cons(needle) {
None => return TestResult::discard(),
Some(finder) => finder,
}; letmut iter = finder.iter(&data); letmut real_count = data
.iter()
.filter(|&&elt| elt == needle)
.count();
// take items from a DEI, taking front for each true and back for each false. // Return a vector with the concatenation of the fronts and the reverse of the // backs. #[cfg(not(miri))] pub(crate) fn double_ended_take<I, J>( mut iter: I,
take_side: J,
) -> alloc::vec::Vec<I::Item> where
I: DoubleEndedIterator,
J: Iterator<Item = bool>,
{ letmut found_front = alloc::vec![]; letmut found_back = alloc::vec![];
// return an iterator of the 0-based indices of haystack that match the needle #[cfg(not(miri))] pub(crate) fn naive1_iter<'a>(
n1: u8,
haystack: &'a [u8],
) -> impl DoubleEndedIterator<Item = usize> + 'a {
haystack.iter().enumerate().filter(move |&(_, &b)| b == n1).map(|t| t.0)
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.