1pub const DEFAULT_CHUNK_SIZE: usize = 16384;
3
4pub fn chunk_bytes(data: &[u8], chunk_size: usize) -> Vec<&[u8]> {
6 data.chunks(chunk_size).collect()
7}
8
9pub fn chunk_bytes_iter(data: &[u8], chunk_size: usize) -> impl Iterator<Item = &[u8]> {
11 data.chunks(chunk_size)
12}
13
14pub fn estimate_chunk_count(data_size: usize, chunk_size: usize) -> usize {
16 (data_size + chunk_size - 1) / chunk_size
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 #[test]
24 fn test_exact_multiple() {
25 let data = vec![0u8; 64];
26 let chunks = chunk_bytes(&data, 16);
27 assert_eq!(chunks.len(), 4);
28 assert!(chunks.iter().all(|c| c.len() == 16));
29 }
30
31 #[test]
32 fn test_non_exact() {
33 let data = vec![0u8; 50];
34 let chunks = chunk_bytes(&data, 16);
35 assert_eq!(chunks.len(), 4);
36 assert_eq!(chunks[3].len(), 2);
37 }
38
39 #[test]
40 fn test_smaller_than_chunk() {
41 let data = vec![0u8; 5];
42 let chunks = chunk_bytes(&data, 16);
43 assert_eq!(chunks.len(), 1);
44 }
45
46 #[test]
47 fn test_estimate() {
48 assert_eq!(estimate_chunk_count(100, 16), 7);
49 assert_eq!(estimate_chunk_count(64, 16), 4);
50 assert_eq!(estimate_chunk_count(0, 16), 0);
51 }
52}