145 lines
4.1 KiB
Rust
145 lines
4.1 KiB
Rust
use radixtree::RadixTree;
|
|
use std::path::PathBuf;
|
|
use tempfile::tempdir;
|
|
|
|
#[test]
|
|
fn test_basic_operations() -> Result<(), radixtree::Error> {
|
|
// Create a temporary directory for the test
|
|
let temp_dir = tempdir().expect("Failed to create temp directory");
|
|
let db_path = temp_dir.path().to_str().unwrap();
|
|
|
|
// Create a new radix tree
|
|
let mut tree = RadixTree::new(db_path, true)?;
|
|
|
|
// Test setting and getting values
|
|
let key = "test_key";
|
|
let value = b"test_value".to_vec();
|
|
tree.set(key, value.clone())?;
|
|
|
|
let retrieved_value = tree.get(key)?;
|
|
assert_eq!(retrieved_value, value);
|
|
|
|
// Test updating a value
|
|
let new_value = b"updated_value".to_vec();
|
|
tree.update(key, new_value.clone())?;
|
|
|
|
let updated_value = tree.get(key)?;
|
|
assert_eq!(updated_value, new_value);
|
|
|
|
// Test deleting a value
|
|
tree.delete(key)?;
|
|
|
|
// Trying to get a deleted key should return an error
|
|
let result = tree.get(key);
|
|
assert!(result.is_err());
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_empty_key() -> Result<(), radixtree::Error> {
|
|
// Create a temporary directory for the test
|
|
let temp_dir = tempdir().expect("Failed to create temp directory");
|
|
let db_path = temp_dir.path().to_str().unwrap();
|
|
|
|
// Create a new radix tree
|
|
let mut tree = RadixTree::new(db_path, true)?;
|
|
|
|
// Test setting and getting empty key
|
|
let key = "";
|
|
let value = b"value_for_empty_key".to_vec();
|
|
tree.set(key, value.clone())?;
|
|
|
|
let retrieved_value = tree.get(key)?;
|
|
assert_eq!(retrieved_value, value);
|
|
|
|
// Test deleting empty key
|
|
tree.delete(key)?;
|
|
|
|
// Trying to get a deleted key should return an error
|
|
let result = tree.get(key);
|
|
assert!(result.is_err());
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_multiple_keys() -> Result<(), radixtree::Error> {
|
|
// Create a temporary directory for the test
|
|
let temp_dir = tempdir().expect("Failed to create temp directory");
|
|
let db_path = temp_dir.path().to_str().unwrap();
|
|
|
|
// Create a new radix tree
|
|
let mut tree = RadixTree::new(db_path, true)?;
|
|
|
|
// Insert multiple keys
|
|
let test_data = [
|
|
("key1", b"value1".to_vec()),
|
|
("key2", b"value2".to_vec()),
|
|
("key3", b"value3".to_vec()),
|
|
];
|
|
|
|
for (key, value) in &test_data {
|
|
tree.set(key, value.clone())?;
|
|
}
|
|
|
|
// Verify all keys can be retrieved
|
|
for (key, expected_value) in &test_data {
|
|
let retrieved_value = tree.get(key)?;
|
|
assert_eq!(&retrieved_value, expected_value);
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_shared_prefixes() -> Result<(), radixtree::Error> {
|
|
// Create a temporary directory for the test
|
|
let temp_dir = tempdir().expect("Failed to create temp directory");
|
|
let db_path = temp_dir.path().to_str().unwrap();
|
|
|
|
// Create a new radix tree
|
|
let mut tree = RadixTree::new(db_path, true)?;
|
|
|
|
// Insert keys with shared prefixes
|
|
let test_data = [
|
|
("test", b"value_test".to_vec()),
|
|
("testing", b"value_testing".to_vec()),
|
|
("tested", b"value_tested".to_vec()),
|
|
];
|
|
|
|
for (key, value) in &test_data {
|
|
tree.set(key, value.clone())?;
|
|
}
|
|
|
|
// Verify all keys can be retrieved
|
|
for (key, expected_value) in &test_data {
|
|
let retrieved_value = tree.get(key)?;
|
|
assert_eq!(&retrieved_value, expected_value);
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[test]
|
|
fn test_persistence() -> Result<(), radixtree::Error> {
|
|
// Create a temporary directory for the test
|
|
let temp_dir = tempdir().expect("Failed to create temp directory");
|
|
let db_path = temp_dir.path().to_str().unwrap();
|
|
|
|
// Create a new radix tree and add some data
|
|
{
|
|
let mut tree = RadixTree::new(db_path, true)?;
|
|
tree.set("persistent_key", b"persistent_value".to_vec())?;
|
|
} // Tree is dropped here
|
|
|
|
// Create a new tree instance with the same path
|
|
{
|
|
let mut tree = RadixTree::new(db_path, false)?;
|
|
let value = tree.get("persistent_key")?;
|
|
assert_eq!(value, b"persistent_value".to_vec());
|
|
}
|
|
|
|
Ok(())
|
|
}
|