From 81096ce9e3e3ac2036f206b0da0dd1ac1a33ca41 Mon Sep 17 00:00:00 2001 From: Alexander Weiss Date: Thu, 7 Jul 2022 09:05:22 +0200 Subject: [PATCH] chunker: Correct treatment of empty files --- src/chunker.rs | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/chunker.rs b/src/chunker.rs index ead0f36..8ed9b11 100644 --- a/src/chunker.rs +++ b/src/chunker.rs @@ -76,7 +76,7 @@ impl Iterator for ChunkIter { if size < min_size { self.finished = true; vec.truncate(size + open_buf_len); - return Some(Ok(vec)); + return if vec.is_empty() { None } else { Some(Ok(vec)) }; } self.rabin @@ -229,3 +229,33 @@ fn qp(p: i32, g: &Polynom64) -> Polynom64 { // add x res.add(&2).modulo(g) } + +#[cfg(test)] +mod tests { + use super::*; + use std::io::Cursor; + + #[test] + fn chunk_empty() { + let empty: Vec = vec![]; + let mut reader = Cursor::new(empty); + + let poly = random_poly().unwrap(); + let chunker = ChunkIter::new(&mut reader, 0, &poly); + + let chunks: Vec<_> = chunker.into_iter().collect(); + assert_eq!(0, chunks.len()); + } + + #[test] + fn chunk_empty_wrong_hint() { + let empty: Vec = vec![]; + let mut reader = Cursor::new(empty); + + let poly = random_poly().unwrap(); + let chunker = ChunkIter::new(&mut reader, 100, &poly); + + let chunks: Vec<_> = chunker.into_iter().collect(); + assert_eq!(0, chunks.len()); + } +}