Files
brk/crates/lsm-tree/tests/tree_weak_delete_queue.rs
2026-08-02 22:47:43 +02:00

108 lines
2.4 KiB
Rust

use lsm_tree::{AbstractTree, Guard, SeqNo, SequenceNumberCounter, get_tmp_folder};
use test_log::test;
#[test]
fn tree_weak_delete_queue() -> lsm_tree::Result<()> {
let folder = get_tmp_folder();
let path = folder.path();
let tree = lsm_tree::Config::new(
path,
SequenceNumberCounter::default(),
SequenceNumberCounter::default(),
)
.open()?;
tree.insert("a", "a", 0);
tree.insert("b", "b", 0);
tree.insert("c", "c", 0);
tree.insert("d", "d", 0);
tree.insert("e", "e", 0);
assert_eq!(
b"a",
&*tree.first_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("a", 1);
assert_eq!(
b"b",
&*tree.first_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("b", 1);
assert_eq!(
b"c",
&*tree.first_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("c", 1);
assert_eq!(
b"d",
&*tree.first_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("d", 1);
assert_eq!(
b"e",
&*tree.first_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("e", 1);
assert!(tree.is_empty(SeqNo::MAX, None)?);
Ok(())
}
#[test]
fn tree_weak_delete_queue_reverse() -> lsm_tree::Result<()> {
let folder = tempfile::tempdir()?;
let path = folder.path();
let tree = lsm_tree::Config::new(
path,
SequenceNumberCounter::default(),
SequenceNumberCounter::default(),
)
.open()?;
tree.insert("a", "a", 0);
tree.insert("b", "b", 0);
tree.insert("c", "c", 0);
tree.insert("d", "d", 0);
tree.insert("e", "e", 0);
assert_eq!(
b"e",
&*tree.last_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("e", 1);
assert_eq!(
b"d",
&*tree.last_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("d", 1);
assert_eq!(
b"c",
&*tree.last_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("c", 1);
assert_eq!(
b"b",
&*tree.last_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("b", 1);
assert_eq!(
b"a",
&*tree.last_key_value(SeqNo::MAX, None).unwrap().key()?
);
tree.remove_weak("a", 1);
assert!(tree.is_empty(SeqNo::MAX, None)?);
Ok(())
}