Mercurial > lbo > hg > leveldb-rs
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,