simdsieve 0.1.1

SIMD-accelerated byte pattern pre-filtering with AVX-512, AVX2, NEON, and scalar fallback
Documentation
#![allow(
    clippy::cast_possible_truncation,
    clippy::cast_sign_loss,
    clippy::unreadable_literal,
    clippy::panic,
    clippy::manual_let_else
)]
use rand::rngs::StdRng;
use rand::{RngCore, SeedableRng};
use simdsieve::SimdSieve;

#[allow(clippy::if_same_then_else)]
#[test]
fn test_simd_scalar_absolute_parity_multi_pattern() {
    let mut rng = StdRng::seed_from_u64(42);
    let mut haystack = vec![0u8; 100_000];
    rng.fill_bytes(&mut haystack);

    let t1 = [haystack[500], haystack[501], haystack[502]];
    let t2 = [haystack[1500], haystack[1501]];

    let hw_sieve = SimdSieve::new(&haystack, &[&t1, &t2]).unwrap();
    let hw_results: Vec<usize> = hw_sieve.collect();

    let mut expected = Vec::new();
    for i in 0..haystack.len() {
        if i + 3 <= haystack.len() && haystack[i..i + 3] == t1 {
            expected.push(i);
        } else if i + 2 <= haystack.len() && haystack[i..i + 2] == t2 {
            expected.push(i);
        }
    }

    expected.sort_unstable();
    expected.dedup();

    assert_eq!(
        hw_results, expected,
        "SIMD sieve output must match brute-force linear scan"
    );
}