use memspan::skip;
#[test]
fn skip_binary_basic() {
assert_eq!(skip::skip_binary(b""), 0);
assert_eq!(skip::skip_binary(b"0"), 1);
assert_eq!(skip::skip_binary(b"1"), 1);
assert_eq!(skip::skip_binary(b"01010101"), 8);
assert_eq!(skip::skip_binary(b"012"), 2); assert_eq!(skip::skip_binary(b"a01"), 0);
}
#[test]
fn skip_binary_chunk_boundaries_exhaustive() {
for len in 1usize..=80 {
for miss_pos in 0..len {
let mut input = vec![b'0'; len];
input[miss_pos] = b'2';
assert_eq!(
skip::skip_binary(&input),
miss_pos,
"len={len}, miss_pos={miss_pos}"
);
}
let input = vec![b'1'; len];
assert_eq!(skip::skip_binary(&input), len, "len={len}, all-match");
}
}
#[test]
fn skip_octal_basic() {
assert_eq!(skip::skip_octal_digits(b""), 0);
assert_eq!(skip::skip_octal_digits(b"01234567"), 8);
assert_eq!(skip::skip_octal_digits(b"0128"), 3); assert_eq!(skip::skip_octal_digits(b"017a"), 3); assert_eq!(skip::skip_octal_digits(b"79a"), 1); }
#[test]
fn skip_octal_chunk_boundaries_exhaustive() {
for len in 1usize..=80 {
for miss_pos in 0..len {
let mut input = vec![b'7'; len];
input[miss_pos] = b'8';
assert_eq!(
skip::skip_octal_digits(&input),
miss_pos,
"len={len}, miss_pos={miss_pos}"
);
}
let input = vec![b'5'; len];
assert_eq!(skip::skip_octal_digits(&input), len, "len={len}, all-match");
}
}
#[test]
fn skip_digits_basic() {
assert_eq!(skip::skip_digits(b""), 0);
assert_eq!(skip::skip_digits(b"0123456789"), 10);
assert_eq!(skip::skip_digits(b"123abc"), 3);
assert_eq!(skip::skip_digits(b"a123"), 0);
}
#[test]
fn skip_digits_chunk_boundaries_exhaustive() {
for len in 1usize..=80 {
for miss_pos in 0..len {
let mut input = vec![b'5'; len];
input[miss_pos] = b'a';
assert_eq!(
skip::skip_digits(&input),
miss_pos,
"len={len}, miss_pos={miss_pos}"
);
}
let input = vec![b'9'; len];
assert_eq!(skip::skip_digits(&input), len, "len={len}, all-match");
}
}
#[test]
fn skip_hex_digits_basic() {
assert_eq!(skip::skip_hex_digits(b""), 0);
assert_eq!(skip::skip_hex_digits(b"deadBEEF"), 8);
assert_eq!(skip::skip_hex_digits(b"0123456789abcdefABCDEF"), 22);
assert_eq!(skip::skip_hex_digits(b"ffg"), 2); assert_eq!(skip::skip_hex_digits(b"FFG"), 2); assert_eq!(skip::skip_hex_digits(b"123:"), 3); assert_eq!(skip::skip_hex_digits(b"@"), 0); assert_eq!(skip::skip_hex_digits(b"`"), 0); assert_eq!(skip::skip_hex_digits(b"/"), 0); }
#[test]
fn skip_hex_digits_case_fold_boundary_chars() {
for b in 0u8..=255u8 {
let expected_hex = b.is_ascii_hexdigit();
let input = [b];
let result = skip::skip_hex_digits(&input);
let want = if expected_hex { 1 } else { 0 };
assert_eq!(
result, want,
"byte 0x{b:02x} ({:?}) — expected hex={expected_hex}",
b as char
);
}
}
#[test]
fn skip_hex_digits_chunk_boundaries_exhaustive() {
for len in 1usize..=80 {
for miss_pos in 0..len {
let mut input = vec![b'a'; len];
input[miss_pos] = b'g';
assert_eq!(
skip::skip_hex_digits(&input),
miss_pos,
"len={len}, miss_pos={miss_pos}"
);
}
let input = vec![b'F'; len];
assert_eq!(skip::skip_hex_digits(&input), len, "len={len}, all-match");
}
}
#[test]
fn skip_hex_digits_mixed_case_long() {
let input = b"0123456789aBcDeFAbCdEf0123456789ABCDEFabcdef0123456789FAFaFAFa";
assert_eq!(skip::skip_hex_digits(input), input.len());
}