base64-ng 2.0.1

no_std-first Base64 encoding and decoding with strict RFC 4648 APIs and optional SIMD
Documentation
#[cfg(all(feature = "simd", any(target_arch = "x86", target_arch = "x86_64")))]
#[test]
fn every_x86_encode_threshold_and_downgrade_edge_is_forced() {
    use super::{EncodeBackend, X86_AVX2_MIN_INPUT, X86_AVX512_MIN_INPUT, select_x86};
    use EncodeBackend::{Avx2, Avx512Vbmi, Scalar, Ssse3Sse41};

    let select = |candidate, input_len, rejected| {
        let mut visited = [None; 2];
        let selected = select_x86(candidate, input_len, |backend| {
            if let Some(slot) = visited.iter_mut().find(|slot| slot.is_none()) {
                *slot = Some(backend);
            }
            Some(backend) != rejected
        });
        (selected, visited)
    };

    assert_eq!(select(Avx512Vbmi, 11, None), (Scalar, [None, None]));
    assert_eq!(
        select(Avx512Vbmi, 12, None),
        (Ssse3Sse41, [Some(Ssse3Sse41), None])
    );
    assert_eq!(
        select(Avx512Vbmi, X86_AVX2_MIN_INPUT, None),
        (Avx2, [Some(Avx2), None])
    );
    assert_eq!(
        select(Avx512Vbmi, X86_AVX512_MIN_INPUT - 1, None),
        (Avx2, [Some(Avx2), None])
    );
    assert_eq!(
        select(Avx512Vbmi, X86_AVX512_MIN_INPUT, None),
        (Avx512Vbmi, [Some(Avx512Vbmi), None])
    );
    assert_eq!(
        select(Avx512Vbmi, X86_AVX512_MIN_INPUT, Some(Avx512Vbmi)),
        (Avx2, [Some(Avx512Vbmi), Some(Avx2)])
    );
    assert_eq!(
        select(Avx2, X86_AVX2_MIN_INPUT, Some(Avx2)),
        (Ssse3Sse41, [Some(Avx2), Some(Ssse3Sse41)])
    );
    assert_eq!(
        select(Ssse3Sse41, 12, Some(Ssse3Sse41)),
        (Scalar, [Some(Ssse3Sse41), None])
    );
}

#[cfg(all(feature = "simd", target_arch = "aarch64", target_endian = "little"))]
#[test]
fn every_neon_encode_threshold_and_downgrade_edge_is_forced() {
    use super::{EncodeBackend, NEON_MIN_INPUT, select_neon};

    assert_eq!(
        select_neon(EncodeBackend::Neon, NEON_MIN_INPUT - 1, |_| true),
        EncodeBackend::Scalar
    );
    assert_eq!(
        select_neon(EncodeBackend::Neon, NEON_MIN_INPUT, |_| true),
        EncodeBackend::Neon
    );
    assert_eq!(
        select_neon(EncodeBackend::Neon, NEON_MIN_INPUT, |_| false),
        EncodeBackend::Scalar
    );
}

#[cfg(all(
    feature = "std",
    feature = "simd",
    target_arch = "riscv64",
    target_os = "linux"
))]
#[test]
fn every_rvv_encode_threshold_and_downgrade_edge_is_forced() {
    use super::{EncodeBackend, RVV_MIN_INPUT, select_rvv};

    assert_eq!(
        select_rvv(EncodeBackend::Rvv, RVV_MIN_INPUT - 1, |_| true),
        EncodeBackend::Scalar
    );
    assert_eq!(
        select_rvv(EncodeBackend::Rvv, RVV_MIN_INPUT, |_| true),
        EncodeBackend::Rvv
    );
    assert_eq!(
        select_rvv(EncodeBackend::Rvv, RVV_MIN_INPUT, |_| false),
        EncodeBackend::Scalar
    );
}