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..])
     }
 }