Skip to content

Commit

Permalink
test: disjoint segment scan, closes #26
Browse files Browse the repository at this point in the history
  • Loading branch information
marvin-j97 committed May 1, 2024
1 parent 2c3892f commit caae78e
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions tests/tree_disjoint_iter.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
use lsm_tree::Config;
use std::sync::Arc;

macro_rules! iter_closed {
($iter:expr) => {
assert!($iter.next().is_none(), "iterator should be closed (done)");
assert!(
$iter.next_back().is_none(),
"iterator should be closed (done)"
);
};
}

#[test]
fn tree_disjoint_iter() -> lsm_tree::Result<()> {
let tempdir = tempfile::tempdir()?;
let tree = crate::Config::new(&tempdir).open()?;

// IMPORTANT: Purposefully mangle the order of IDs
// to make sure stuff is still getting read in the correct order
// even if written out of order
let ids = [["d", "e", "f"], ["a", "b", "c"]];

for batch in ids {
for id in batch {
tree.insert(id, vec![], 0);
}
tree.flush_active_memtable()?;
}

// NOTE: Forwards

let iter = tree.iter();
let mut iter = iter.into_iter();

assert_eq!(Arc::from(*b"a"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"b"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"c"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"d"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"e"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"f"), iter.next().unwrap()?.0);
iter_closed!(iter);

// NOTE: Reverse

let iter = tree.iter();
let mut iter = iter.into_iter().rev();

assert_eq!(Arc::from(*b"f"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"e"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"d"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"c"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"b"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"a"), iter.next().unwrap()?.0);
iter_closed!(iter);

// NOTE: Ping Pong

let iter = tree.iter();
let mut iter = iter.into_iter();

assert_eq!(Arc::from(*b"a"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"f"), iter.next_back().unwrap()?.0);
assert_eq!(Arc::from(*b"b"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"e"), iter.next_back().unwrap()?.0);
assert_eq!(Arc::from(*b"c"), iter.next().unwrap()?.0);
assert_eq!(Arc::from(*b"d"), iter.next_back().unwrap()?.0);
iter_closed!(iter);

Ok(())
}

0 comments on commit caae78e

Please sign in to comment.