pub(crate) const MIN_CHUNK: usize = 2 * 1024;
const AVG_BITS: u32 = 14; pub(crate) const MAX_CHUNK: usize = 64 * 1024;
pub(crate) const INLINE_MAX: usize = 4 * 1024;
const MASK: u64 = (1u64 << AVG_BITS) - 1;
const fn gear_table() -> [u64; 256] {
let mut table = [0u64; 256];
let mut state: u64 = 0x2545_F491_4F6C_DD1D;
let mut i = 0;
while i < 256 {
state ^= state << 13;
state ^= state >> 7;
state ^= state << 17;
table[i] = state;
i += 1;
}
table
}
static GEAR: [u64; 256] = gear_table();
pub(crate) fn chunk(data: &[u8]) -> Vec<&[u8]> {
let mut out = Vec::new();
let mut start = 0usize;
while start < data.len() {
let end = next_boundary(&data[start..]) + start;
out.push(&data[start..end]);
start = end;
}
out
}
fn next_boundary(data: &[u8]) -> usize {
if data.len() <= MIN_CHUNK {
return data.len();
}
let limit = data.len().min(MAX_CHUNK);
let mut hash = 0u64;
for &byte in &data[..MIN_CHUNK] {
hash = (hash << 1).wrapping_add(GEAR[byte as usize]);
}
for (offset, &byte) in data.iter().enumerate().take(limit).skip(MIN_CHUNK) {
hash = (hash << 1).wrapping_add(GEAR[byte as usize]);
if hash & MASK == 0 {
return offset + 1;
}
}
limit
}
#[cfg(test)]
mod tests {
use super::*;
fn pseudo_random(len: usize, seed: u64) -> Vec<u8> {
let mut state = seed | 1;
(0..len)
.map(|_| {
state ^= state << 13;
state ^= state >> 7;
state ^= state << 17;
(state >> 24) as u8
})
.collect()
}
#[test]
fn chunks_reassemble_exactly() {
for len in [0, 1, 100, MIN_CHUNK, MIN_CHUNK + 1, 300_000] {
let data = pseudo_random(len, 42);
let rejoined: Vec<u8> = chunk(&data).concat();
assert_eq!(rejoined, data, "round-trip failed at len {len}");
}
}
#[test]
fn chunks_respect_size_bounds() {
let data = pseudo_random(1_000_000, 7);
let chunks = chunk(&data);
assert!(chunks.len() > 1, "large input should split");
for c in &chunks[..chunks.len() - 1] {
assert!(c.len() >= MIN_CHUNK, "chunk below minimum: {}", c.len());
assert!(c.len() <= MAX_CHUNK, "chunk above maximum: {}", c.len());
}
}
#[test]
fn chunking_is_deterministic() {
let data = pseudo_random(500_000, 99);
let a: Vec<usize> = chunk(&data).iter().map(|c| c.len()).collect();
let b: Vec<usize> = chunk(&data).iter().map(|c| c.len()).collect();
assert_eq!(a, b);
}
#[test]
fn all_zero_input_still_terminates_and_reassembles() {
let data = vec![0u8; 500_000];
let chunks = chunk(&data);
assert!(chunks.iter().all(|c| !c.is_empty()));
assert_eq!(chunks.concat(), data);
}
#[test]
fn edit_in_middle_preserves_distant_chunks() {
let original = pseudo_random(400_000, 5);
let mut edited = original.clone();
edited.splice(200_000..200_000, b"INSERTED PAYLOAD".iter().copied());
let before: Vec<&[u8]> = chunk(&original);
let after: Vec<&[u8]> = chunk(&edited);
let shared = before
.iter()
.filter(|c| after.iter().any(|d| d == *c))
.count();
let ratio = shared as f64 / before.len() as f64;
assert!(
ratio > 0.8,
"expected most chunks to survive a local edit, kept {shared}/{} ({ratio:.2})",
before.len()
);
}
}