Mercurial > lbo > hg > leveldb-rs
changeset 67:313f1e5f4c26
Improve Block tests and BlockHandle encoding method
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 02 Jul 2016 21:02:54 +0200 |
parents | abd39cff7ef9 |
children | 55abb1f11da8 |
files | src/block.rs src/blockhandle.rs |
diffstat | 2 files changed, 20 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/block.rs Sat Jul 02 19:08:44 2016 +0200 +++ b/src/block.rs Sat Jul 02 21:02:54 2016 +0200 @@ -363,6 +363,23 @@ } #[test] + fn test_empty_block() { + let mut o = Options::default(); + o.block_restart_interval = 16; + let builder = BlockBuilder::new(o, StandardComparator); + + let blockc = builder.finish(); + assert_eq!(blockc.len(), 8); + assert_eq!(blockc, vec![0, 0, 0, 0, 1, 0, 0, 0]); + + let block = Block::new(blockc); + let block_iter = block.iter(); + for _ in block_iter { + panic!("expected 0 iterations"); + } + } + + #[test] fn test_build_iterate() { let data = get_data(); let mut builder = BlockBuilder::new(Options::default(), StandardComparator);
--- a/src/blockhandle.rs Sat Jul 02 19:08:44 2016 +0200 +++ b/src/blockhandle.rs Sat Jul 02 21:02:54 2016 +0200 @@ -40,13 +40,10 @@ /// Returns how many bytes were written, or 0 if the write failed because `dst` is too small. pub fn encode_to(&self, dst: &mut [u8]) -> usize { - if dst.len() < self.offset.required_space() + self.size.required_space() { - 0 - } else { - let off = self.offset.encode_var(dst); - off + self.size.encode_var(&mut dst[off..]) - } + assert!(dst.len() >= self.offset.required_space() + self.size.required_space()); + let off = self.offset.encode_var(dst); + off + self.size.encode_var(&mut dst[off..]) } }