Skip to content

Commit

Permalink
chore: add test for versioned apis on tree
Browse files Browse the repository at this point in the history
  • Loading branch information
arriqaaq committed Jul 2, 2024
1 parent dbbf250 commit 3695e08
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 24 deletions.
50 changes: 38 additions & 12 deletions src/art.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2509,8 +2509,7 @@ mod tests {

for i in (0..num_keys).rev() {
let key = VariableSizeKey::from_str(&format!("key{}", i)).unwrap();
tree.insert_unchecked(&key, i as i32, i, 0)
.unwrap();
tree.insert_unchecked(&key, i as i32, i, 0).unwrap();
}

// Verify total entries
Expand All @@ -2527,10 +2526,8 @@ mod tests {
let key = VariableSizeKey::from_str("key1").unwrap();

// Insert the same key with two different versions
tree.insert_unchecked(&key, 2, 2, 0)
.unwrap(); // Second version
tree.insert_unchecked(&key, 1, 1, 0)
.unwrap(); // First version
tree.insert_unchecked(&key, 2, 2, 0).unwrap(); // Second version
tree.insert_unchecked(&key, 1, 1, 0).unwrap(); // First version

// Verify the order during iteration
let mut iter = tree.iter();
Expand All @@ -2552,10 +2549,8 @@ mod tests {
// Insert two versions for each key
for i in 0..num_keys {
let key = VariableSizeKey::from_str(&format!("key{}", i)).unwrap();
tree.insert_unchecked(&key, i as u64 + 1000, 2, 0)
.unwrap(); // Second version
tree.insert_unchecked(&key, i as u64, 1, 0)
.unwrap(); // First version
tree.insert_unchecked(&key, i as u64 + 1000, 2, 0).unwrap(); // Second version
tree.insert_unchecked(&key, i as u64, 1, 0).unwrap(); // First version
}

// Verify get at version 0 gives the latest version for each key
Expand Down Expand Up @@ -2715,8 +2710,8 @@ mod tests {
let value1_2 = 20;
let ts1_1 = 100;
let ts1_2 = 200;
tree.insert(&key1, value1_1, 0, ts1_1).unwrap();
tree.insert(&key1, value1_2,0, ts1_2).unwrap();
tree.insert(&key1, value1_1, 0, ts1_1).unwrap();
tree.insert(&key1, value1_2, 0, ts1_2).unwrap();

let history1 = tree.get_version_history(&key1).unwrap();
assert_eq!(history1.len(), 2);
Expand Down Expand Up @@ -2750,5 +2745,36 @@ mod tests {
assert!(tree.get_version_history(&key3).is_err());
}

#[test]
fn test_retrieving_value_at_future_timestamp() {
let mut tree: Tree<VariableSizeKey, i32> = Tree::new();
let key = VariableSizeKey::from_str("test_key").unwrap();
let value = 10;
let ts_insert = 100;
let ts_future = 200;
tree.insert(&key, value, 0, ts_insert).unwrap();

let (retrieved_value, version, ts) = tree.get_at_ts(&key, ts_future).unwrap();
assert_eq!(retrieved_value, value);
assert_eq!(version, 1);
assert_eq!(ts, ts_insert);
}

#[test]
fn test_inserting_and_retrieving_with_same_timestamp() {
let mut tree: Tree<VariableSizeKey, i32> = Tree::new();
let key = VariableSizeKey::from_str("test_key").unwrap();
let value1 = 10;
let value2 = 20;
let ts = 100;
tree.insert_unchecked(&key, value1, 1, ts).unwrap();
tree.insert_unchecked(&key, value2, 1, ts).unwrap();

let (retrieved_value, version, t) = tree.get_at_ts(&key, ts).unwrap();
assert_eq!(retrieved_value, value2);
assert_eq!(version, 1);
assert_eq!(t, ts);
}


}
15 changes: 5 additions & 10 deletions src/iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -405,8 +405,7 @@ mod tests {
for i in 0..num_keys {
let key: FixedSizeKey<16> = i.into();
for version in 1..versions_per_key + 1 {
tree.insert_unchecked(&key, i, version, 0_u64)
.unwrap();
tree.insert_unchecked(&key, i, version, 0_u64).unwrap();
}
}

Expand Down Expand Up @@ -461,8 +460,7 @@ mod tests {
for i in 0..num_keys {
let key: FixedSizeKey<16> = i.into();
for version in (1..=versions_per_key).rev() {
tree.insert_unchecked(&key, i, version, 0_u64)
.unwrap();
tree.insert_unchecked(&key, i, version, 0_u64).unwrap();
}
}

Expand Down Expand Up @@ -525,8 +523,7 @@ mod tests {
for i in 0..num_keys {
let key: FixedSizeKey<16> = i.into();
for version in 1..=versions_per_key {
tree.insert_unchecked(&key, i, version, 0_u64)
.unwrap();
tree.insert_unchecked(&key, i, version, 0_u64).unwrap();
}
}

Expand Down Expand Up @@ -610,8 +607,7 @@ mod tests {
let key: FixedSizeKey<16> = 1u16.into();
let versions = [1, 2];
for &version in &versions {
tree.insert_unchecked(&key, 1, version, 0_u64)
.unwrap();
tree.insert_unchecked(&key, 1, version, 0_u64).unwrap();
}

// Use iterator to iterate through the tree
Expand Down Expand Up @@ -654,8 +650,7 @@ mod tests {
let key: FixedSizeKey<16> = 1u16.into();
let versions = [1, 2];
for &version in &versions {
tree.insert_unchecked(&key, 1, version, 0_u64)
.unwrap();
tree.insert_unchecked(&key, 1, version, 0_u64).unwrap();
}

// Define start and end keys for the range query
Expand Down
3 changes: 1 addition & 2 deletions src/snapshot.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,7 @@ impl<P: KeyTrait, V: Clone> Snapshot<P, V> {

// Use a recursive function to get the value and timestamp from the root node
match self.root.as_ref() {
Some(root) => Node::get_recurse(root, key, root.version())
.map(|(value, version, ts)| (value, version, ts)),
Some(root) => Node::get_recurse(root, key, root.version()),
None => Err(TrieError::KeyNotFound),
}
}
Expand Down

0 comments on commit 3695e08

Please sign in to comment.