changeset 31:6807859c7538

Implement end-to-end tests for Block, BlockBuilder, BlockIter
author Lewin Bormann <lbo@spheniscida.de>
date Sun, 12 Jun 2016 14:30:53 +0200
parents f8517432c11d
children f750122fd546
files src/block.rs
diffstat 1 files changed, 48 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/block.rs	Sun Jun 12 14:30:35 2016 +0200
+++ b/src/block.rs	Sun Jun 12 14:30:53 2016 +0200
@@ -249,6 +249,53 @@
 
 #[cfg(test)]
 mod tests {
+    use super::*;
+    use types::*;
+
+    fn get_data() -> Vec<(&'static [u8], &'static [u8])> {
+        vec![("key1".as_bytes(), "value1".as_bytes()),
+             ("loooooooooooooooooooooooooooooooooongerkey1".as_bytes(), "shrtvl1".as_bytes()),
+             ("medium length key 1".as_bytes(), "some value 2".as_bytes()),
+             ("prefix_key1".as_bytes(), "value".as_bytes()),
+             ("prefix_key2".as_bytes(), "value".as_bytes()),
+             ("prefix_key3".as_bytes(), "value".as_bytes())]
+    }
+
     #[test]
-    fn test_iter() {}
+    fn test_block_builder() {
+        let mut o = Options::default();
+        o.block_restart_interval = 3;
+
+        let mut builder = BlockBuilder::new(o);
+
+        for &(k, v) in get_data().iter() {
+            builder.add(k, v);
+            assert!(builder.counter <= 3);
+        }
+
+        let block = builder.finish();
+        assert_eq!(block.len(), 145);
+    }
+
+    #[test]
+    fn test_build_iterate() {
+        let data = get_data();
+        let mut builder = BlockBuilder::new(Options::default());
+
+        for &(k, v) in data.iter() {
+            builder.add(k, v);
+        }
+
+        let block_contents = builder.finish();
+
+        let block = Block::new(block_contents);
+        let block_iter = block.iter();
+        let mut i = 0;
+        for (k, v) in block_iter {
+            assert_eq!(&k[..], data[i].0);
+            assert_eq!(v, data[i].1);
+            i += 1;
+        }
+        assert_eq!(i, data.len());
+    }
 }