// // Created by Kirill Zhukov on 20.04.2025. // TEST(SkipListTests, BasicOperations) { std::string db_name = "test_db"; VersionManager version_manager(db_name); LFSkipList 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 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 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()); }