changeset 43:acefae6a4594

Optimize LookupKey allocation and add test
author Lewin Bormann <lbo@spheniscida.de>
date Thu, 16 Jun 2016 20:48:42 +0200
parents f484809acbe7
children d4e19a78a471
files src/memtable.rs
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/memtable.rs	Thu Jun 16 20:29:24 2016 +0200
+++ b/src/memtable.rs	Thu Jun 16 20:48:42 2016 +0200
@@ -22,6 +22,8 @@
                                          <u64 as FixedInt>::required_space());
         let mut i = 0;
 
+        key.reserve(8 + k.len().required_space() + k.len());
+
         key.resize(k.len().required_space(), 0);
         i += k.len().encode_var(&mut key[i..]);
 
@@ -262,6 +264,23 @@
     }
 
     #[test]
+    fn test_lookupkey() {
+        use integer_encoding::VarInt;
+
+        let lk1 = LookupKey::new("abcde".as_bytes(), 123);
+        let lk2 = LookupKey::new("xyabxy".as_bytes(), 97);
+
+        // Assert correct allocation strategy
+        assert_eq!(lk1.key.len(), 14);
+        assert_eq!(lk1.key.capacity(), 14);
+
+        assert_eq!(lk1.user_key(), "abcde".as_bytes());
+        assert_eq!(u32::decode_var(lk1.memtable_key()), (5, 1));
+        assert_eq!(lk2.internal_key(),
+                   vec![120, 121, 97, 98, 120, 121, 1, 97, 0, 0, 0, 0, 0, 0].as_slice());
+    }
+
+    #[test]
     fn test_add() {
         let mut mt = MemTable::new();
         mt.add(123,