From 3695e0897988b6ca8d564db8ff295df61088f5b0 Mon Sep 17 00:00:00 2001 From: arriqaaq Date: Tue, 2 Jul 2024 07:46:29 +0530 Subject: [PATCH] chore: add test for versioned apis on tree --- src/art.rs | 50 +++++++++++++++++++++++++++++++++++++------------ src/iter.rs | 15 +++++---------- src/snapshot.rs | 3 +-- 3 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/art.rs b/src/art.rs index 03bba42..1bffd0c 100644 --- a/src/art.rs +++ b/src/art.rs @@ -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 @@ -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(); @@ -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 @@ -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); @@ -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 = 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 = 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); + } + } diff --git a/src/iter.rs b/src/iter.rs index c5573cc..d910577 100644 --- a/src/iter.rs +++ b/src/iter.rs @@ -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(); } } @@ -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(); } } @@ -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(); } } @@ -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 @@ -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 diff --git a/src/snapshot.rs b/src/snapshot.rs index 2772aca..2a19358 100644 --- a/src/snapshot.rs +++ b/src/snapshot.rs @@ -62,8 +62,7 @@ impl Snapshot { // 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), } }