65 lines
1.9 KiB
C++
65 lines
1.9 KiB
C++
//
|
|
// Created by Kirill Zhukov on 20.04.2025.
|
|
//
|
|
|
|
|
|
|
|
TEST(SkipListTests, BasicOperations) {
|
|
std::string db_name = "test_db";
|
|
VersionManager version_manager(db_name);
|
|
LFSkipList<Hash128, std::string> table(version_manager);
|
|
|
|
table.insert(compute_hash128("a", 1), "apple");
|
|
table.insert(compute_hash128("b", 1), "banana");
|
|
table.insert(compute_hash128("c", 1), "cherry");
|
|
|
|
auto a = table.find(compute_hash128("a", 1));
|
|
auto b = table.find(compute_hash128("b", 1));
|
|
auto c = table.find(compute_hash128("c", 1));
|
|
auto d = table.find(compute_hash128("d", 1));
|
|
|
|
ASSERT_TRUE(a.has_value());
|
|
EXPECT_EQ(a.value(), "apple");
|
|
|
|
ASSERT_TRUE(b.has_value());
|
|
EXPECT_EQ(b.value(), "banana");
|
|
|
|
ASSERT_TRUE(c.has_value());
|
|
EXPECT_EQ(c.value(), "cherry");
|
|
|
|
ASSERT_FALSE(d.has_value());
|
|
}
|
|
|
|
TEST(VersionManagerTests, PersistenceAcrossRestarts) {
|
|
std::string db_name = "test_db";
|
|
{
|
|
VersionManager vm1(db_name);
|
|
(void)vm1.next_version();
|
|
(void)vm1.next_version();
|
|
(void)vm1.next_version();
|
|
}
|
|
|
|
VersionManager vm2(db_name);
|
|
uint64_t v4 = vm2.next_version();
|
|
|
|
ASSERT_GT(v4, 3u) << "Version did not persist correctly";
|
|
}
|
|
|
|
TEST(SSTableTests, WriteAndRead) {
|
|
std::string db_name = "test_db";
|
|
VersionManager version_manager(db_name);
|
|
|
|
LFSkipList<Hash128, std::string> table(version_manager);
|
|
table.insert(compute_hash128("dog", 3), "bark");
|
|
table.insert(compute_hash128("cat", 3), "meow");
|
|
table.insert(compute_hash128("cow", 3), "moo");
|
|
|
|
write_sstable_with_index(table, "test_sstable.dat");
|
|
|
|
LFSkipList<Hash128, std::string> loaded_table(version_manager);
|
|
read_sstable_with_mmap(loaded_table, "test_sstable.dat");
|
|
|
|
ASSERT_TRUE(loaded_table.find(compute_hash128("dog", 3)).has_value());
|
|
ASSERT_TRUE(loaded_table.find(compute_hash128("cat", 3)).has_value());
|
|
ASSERT_TRUE(loaded_table.find(compute_hash128("cow", 3)).has_value());
|
|
} |