#![allow(warnings)]
use memspan::skip;
fn build(len: usize, hit_byte: u8) -> Vec<u8> {
let mut v = vec![b'z'; len];
v[len - 1] = hit_byte;
v
}
#[test]
fn fixed_array_n1_skip_until() {
let n = [b'X'];
for len in [1usize, 7, 15, 16, 17, 32, 64, 128] {
let input = build(len, b'X');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
}
#[test]
fn fixed_array_n3_skip_until() {
let n = [b'X', b'Y', b'Z'];
for len in [1usize, 7, 15, 16, 17, 32, 64, 128] {
let input = build(len, b'Z');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
}
#[test]
fn fixed_array_n4_skip_until() {
let n = [b'A', b'B', b'C', b'D'];
for len in [1usize, 7, 15, 16, 17, 32, 64, 128] {
let input = build(len, b'D');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
}
#[test]
fn fixed_array_n6_skip_until() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F'];
for len in [1usize, 7, 15, 16, 17, 32, 64, 128] {
let input = build(len, b'F');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
}
#[test]
fn fixed_array_n7_skip_until() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F', b'G'];
for len in [1usize, 7, 15, 16, 17, 32, 64, 128] {
let input = build(len, b'G');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
}
#[test]
fn fixed_array_n8_skip_until() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H'];
for len in [1usize, 7, 15, 16, 17, 32, 64, 128] {
let input = build(len, b'H');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
}
#[test]
fn fixed_array_prefix_len_n1() {
let n = [b'A'];
assert_eq!(skip::skip_while(b"AAAB", n), 3);
assert_eq!(skip::skip_while(b"BAAA", n), 0);
}
#[test]
fn fixed_array_prefix_len_n3() {
let n = [b'A', b'B', b'C'];
assert_eq!(skip::skip_while(b"ABCABCX", n), 6);
assert_eq!(skip::skip_while(b"XABC", n), 0);
}
#[test]
fn fixed_array_prefix_len_n4() {
let n = [b'A', b'B', b'C', b'D'];
assert_eq!(skip::skip_while(b"ABCDABCDX", n), 8);
}
#[test]
fn fixed_array_prefix_len_n6() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F'];
assert_eq!(skip::skip_while(b"ABCDEFX", n), 6);
}
#[test]
fn fixed_array_prefix_len_n7() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F', b'G'];
assert_eq!(skip::skip_while(b"ABCDEFGX", n), 7);
}
#[test]
fn fixed_array_prefix_len_n8() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H'];
assert_eq!(skip::skip_while(b"ABCDEFGHX", n), 8);
}
#[test]
fn slice_n1_skip_until() {
let n: &[u8] = b"X";
assert_eq!(skip::skip_until(b"zzX", n), Some(2));
assert_eq!(skip::skip_until(b"zzz", n), None);
for len in [16usize, 32, 64] {
let input = build(len, b'X');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
}
}
#[test]
fn slice_n3_skip_until() {
let n: &[u8] = b"XYZ";
assert_eq!(skip::skip_until(b"zzZ", n), Some(2));
assert_eq!(skip::skip_until(b"zzz", n), None);
for len in [16usize, 32, 64] {
let input = build(len, b'Z');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
}
}
#[test]
fn slice_n4_skip_until() {
let n: &[u8] = b"ABCD";
assert_eq!(skip::skip_until(b"zzD", n), Some(2));
for len in [16usize, 32, 64] {
let input = build(len, b'D');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
}
}
#[test]
fn slice_n6_skip_until() {
let n: &[u8] = b"ABCDEF";
assert_eq!(skip::skip_until(b"zzF", n), Some(2));
assert_eq!(skip::skip_until(b"zzz", n), None);
for len in [16usize, 32, 64] {
let input = build(len, b'F');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
}
}
#[test]
fn slice_n7_skip_until() {
let n: &[u8] = b"ABCDEFG";
assert_eq!(skip::skip_until(b"zzG", n), Some(2));
assert_eq!(skip::skip_until(b"zzz", n), None);
for len in [16usize, 32, 64] {
let input = build(len, b'G');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
}
}
#[test]
fn slice_n8_skip_until() {
let n: &[u8] = b"ABCDEFGH";
assert_eq!(skip::skip_until(b"zzH", n), Some(2));
assert_eq!(skip::skip_until(b"zzz", n), None);
for len in [16usize, 32, 64] {
let input = build(len, b'H');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
}
}
#[test]
fn slice_prefix_len_n1() {
let n: &[u8] = b"A";
assert_eq!(skip::skip_while(b"AAAB", n), 3);
assert_eq!(skip::skip_while(b"BAAA", n), 0);
}
#[test]
fn slice_prefix_len_n3() {
let n: &[u8] = b"ABC";
assert_eq!(skip::skip_while(b"ABCABCX", n), 6);
}
#[test]
fn slice_prefix_len_n4() {
let n: &[u8] = b"ABCD";
assert_eq!(skip::skip_while(b"ABCDX", n), 4);
}
#[test]
fn slice_prefix_len_n6() {
let n: &[u8] = b"ABCDEF";
assert_eq!(skip::skip_while(b"ABCDEFX", n), 6);
}
#[test]
fn slice_prefix_len_n7() {
let n: &[u8] = b"ABCDEFG";
assert_eq!(skip::skip_while(b"ABCDEFGX", n), 7);
}
#[test]
fn slice_prefix_len_n8() {
let n: &[u8] = b"ABCDEFGH";
assert_eq!(skip::skip_while(b"ABCDEFGHX", n), 8);
}
#[test]
fn ref_delegation_skip_until() {
let n: &[u8] = b"XY";
let rn: &&[u8] = &&n;
for len in [1usize, 16, 32] {
let input = build(len, b'Y');
assert_eq!(skip::skip_until(&input, rn), Some(len - 1), "len={len}");
}
}
#[test]
fn ref_delegation_skip_while() {
let n: &[u8] = b"AB";
let rn: &&[u8] = &&n;
assert_eq!(skip::skip_while(b"ABABX", rn), 4);
}
#[test]
fn ref_delegation_count_find() {
let n: &[u8] = b"AB";
let rn: &&[u8] = &&n;
assert_eq!(skip::count_matches(b"ABCABC", rn), 4);
assert_eq!(skip::find_last(b"ABCABC", rn), Some(4));
}
#[test]
fn count_matches_zero_needle_array() {
let n: [u8; 0] = [];
let input: Vec<u8> = vec![b'a'; 32];
assert_eq!(skip::count_matches(&input, n), 0);
assert_eq!(skip::find_last(&input, n), None);
}
#[test]
fn fixed_array_n9_skip_until() {
let n = [b'A', b'B', b'C', b'D', b'E', b'F', b'G', b'H', b'I'];
for len in [1usize, 7, 15, 16, 17, 32, 64] {
let input = build(len, b'I');
assert_eq!(skip::skip_until(&input, n), Some(len - 1), "len={len}");
let miss = vec![b'z'; len];
assert_eq!(skip::skip_until(&miss, n), None, "len={len}");
}
assert_eq!(skip::skip_while(b"ABCDEFGHIX", n), 9);
}
#[test]
fn count_find_fixed_array_n3() {
let n = [b'a', b'e', b'i'];
let input: Vec<u8> = vec![b'a'; 32];
assert_eq!(skip::count_matches(&input, n), 32);
assert_eq!(skip::find_last(&input, n), Some(31));
}
#[test]
fn count_find_fixed_array_n6() {
let n = [b'a', b'b', b'c', b'd', b'e', b'f'];
let input: Vec<u8> = b"abcdef".iter().cycle().copied().take(32).collect();
assert_eq!(skip::count_matches(&input, n), 32);
assert_eq!(skip::find_last(&input, n), Some(31));
}
#[test]
fn count_find_fixed_array_n8() {
let n = [b'1', b'2', b'3', b'4', b'5', b'6', b'7', b'8'];
let input: Vec<u8> = b"12345678".iter().cycle().copied().take(64).collect();
assert_eq!(skip::count_matches(&input, n), 64);
assert_eq!(skip::find_last(&input, n), Some(63));
}