diff options
| author | Sébastien Paolacci <sebastien.paolacci@gmail.com> | 2013-12-22 19:07:08 +0100 |
|---|---|---|
| committer | Sébastien Paolacci <sebastien.paolacci@gmail.com> | 2013-12-23 09:35:52 +0100 |
| commit | ee887d70780bce4c89a8977d04f724064ee1ae8f (patch) | |
| tree | 3d1d5047924d35164847eea2ceb00410447fa92e | |
| parent | cab687853a63198e5de9aa094d4ac01d068d0285 (diff) | |
Add tests for 0-byte read propagation.
The two `Some(0)' used to be `None' before the patch, a zero-byte long read exhausting a reader (and thereafter) still produce a `None'.
| -rw-r--r-- | src/libstd/io/buffered.rs | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index 6350fabb018..df52f036d46 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -322,6 +322,21 @@ mod test { fn write(&mut self, _: &[u8]) { } } + /// A dummy reader intended at testing short-reads propagation. + pub struct ShortReader { + priv lengths: ~[uint], + } + + impl Reader for ShortReader { + fn read(&mut self, _: &mut [u8]) -> Option<uint> { + self.lengths.shift_opt() + } + + fn eof(&mut self) -> bool { + self.lengths.len() == 0 + } + } + #[test] fn test_buffered_reader() { let inner = MemReader::new(~[0, 1, 2, 3, 4]); @@ -475,6 +490,19 @@ mod test { assert_eq!(it.next(), None); } + #[test] + fn test_short_reads() { + let inner = ShortReader{lengths: ~[0, 1, 2, 0, 1, 0]}; + let mut reader = BufferedReader::new(inner); + let mut buf = [0, 0]; + assert_eq!(reader.read(buf), Some(0)); + assert_eq!(reader.read(buf), Some(1)); + assert_eq!(reader.read(buf), Some(2)); + assert_eq!(reader.read(buf), Some(0)); + assert_eq!(reader.read(buf), Some(1)); + assert_eq!(reader.read(buf), None); + } + #[bench] fn bench_buffered_reader(bh: &mut Harness) { |
