in common/rusty_leveldb_sgx/src/block.rs [388:431]
fn test_block_iterate_reverse() {
let mut o = options::for_test();
o.block_restart_interval = 3;
let data = get_data();
let mut builder = BlockBuilder::new(o.clone());
for &(k, v) in data.iter() {
builder.add(k, v);
}
let block_contents = builder.finish();
let mut block = Block::new(o.clone(), block_contents).iter();
assert!(!block.valid());
assert_eq!(
block.next(),
Some(("key1".as_bytes().to_vec(), "value1".as_bytes().to_vec()))
);
assert!(block.valid());
block.next();
assert!(block.valid());
block.prev();
assert!(block.valid());
assert_eq!(
current_key_val(&block),
Some(("key1".as_bytes().to_vec(), "value1".as_bytes().to_vec()))
);
block.prev();
assert!(!block.valid());
// Verify that prev() from the last entry goes to the prev-to-last entry
// (essentially, that next() returning None doesn't advance anything)
while let Some(_) = block.next() {}
block.prev();
assert!(block.valid());
assert_eq!(
current_key_val(&block),
Some((
"prefix_key2".as_bytes().to_vec(),
"value".as_bytes().to_vec()
))
);
}