From cb5bd0e346bbebd51df25dc3245c43ac92aa0d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B4=E7=A5=89=E7=87=95?= <10224602413@stu.ecnu.edu.cn> Date: Mon, 6 Jan 2025 22:44:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'examples/iterator=5Ftest.?= =?UTF-8?q?cc'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/iterate_test.cc | 76 ----------------------------------------------- examples/iterator_test.cc | 76 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 76 deletions(-) delete mode 100644 examples/iterate_test.cc create mode 100644 examples/iterator_test.cc diff --git a/examples/iterate_test.cc b/examples/iterate_test.cc deleted file mode 100644 index 8c647ed..0000000 --- a/examples/iterate_test.cc +++ /dev/null @@ -1,76 +0,0 @@ -#include -#include "leveldb/db.h" -#include "leveldb/options.h" -#include "gtest/gtest.h" - -class RangeQueryTest : public ::testing::Test { -protected: - leveldb::DB* db; - leveldb::Options options; - std::string db_path = "/tmp/range_testdb"; - - void SetUp() override { - options.create_if_missing = true; - leveldb::Status status = leveldb::DB::Open(options, db_path, &db); - ASSERT_TRUE(status.ok()) << "Failed to open DB: " << status.ToString(); - } - - void TearDown() override { - delete db; - } -}; - -TEST_F(RangeQueryTest, TestRangeQuery) { - // 插入一组键值对 - std::vector> data = { - {"a_key1", "value1"}, - {"a_key2", "value2"}, - {"b_key3", "value3"}, - {"b_key4", "value4"}, - {"c_key5", "value5"} - }; - for (const auto& pair : data) { - const std::string& key = pair.first; - const std::string& value = pair.second; - leveldb::Status status = db->Put(leveldb::WriteOptions(), key, value); - ASSERT_TRUE(status.ok()) << "Failed to put data: " << status.ToString(); - } - - // 查询范围内的键值对 - std::string range_start = "a_key1"; - std::string range_end = "b_key4"; - std::vector> expected_data = { - {"a_key1", "value1"}, - {"a_key2", "value2"}, - {"b_key3", "value3"}, - {"b_key4", "value4"} - }; - - leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions()); - it->Seek(range_start); // 从范围起始位置开始 - std::vector> actual_data; - while (it->Valid() && it->key().ToString() <= range_end) { - actual_data.emplace_back(it->key().ToString(), it->value().ToString()); - it->Next(); - } - delete it; - - // 验证范围查询结果是否符合预期 - ASSERT_EQ(actual_data.size(), expected_data.size()) << "Range query results size mismatch."; - for (size_t i = 0; i < actual_data.size(); ++i) { - EXPECT_EQ(actual_data[i].first, expected_data[i].first) << "Key mismatch at index " << i; - EXPECT_EQ(actual_data[i].second, expected_data[i].second) << "Value mismatch at index " << i; - } - - // 输出范围查询结果 - for (const auto& pair : actual_data) { - const std::string& key = pair.first; - const std::string& value = pair.second; - std::cout << "Key: " << key << ", Value: " << value << std::endl; - } -} - -int main(int argc, char** argv) { - ::testing::InitGoogleTest(&argc, argv); - return RUN_ALL_TESTS(); -} diff --git a/examples/iterator_test.cc b/examples/iterator_test.cc new file mode 100644 index 0000000..8c647ed --- /dev/null +++ b/examples/iterator_test.cc @@ -0,0 +1,76 @@ +#include +#include "leveldb/db.h" +#include "leveldb/options.h" +#include "gtest/gtest.h" + +class RangeQueryTest : public ::testing::Test { +protected: + leveldb::DB* db; + leveldb::Options options; + std::string db_path = "/tmp/range_testdb"; + + void SetUp() override { + options.create_if_missing = true; + leveldb::Status status = leveldb::DB::Open(options, db_path, &db); + ASSERT_TRUE(status.ok()) << "Failed to open DB: " << status.ToString(); + } + + void TearDown() override { + delete db; + } +}; + +TEST_F(RangeQueryTest, TestRangeQuery) { + // 插入一组键值对 + std::vector> data = { + {"a_key1", "value1"}, + {"a_key2", "value2"}, + {"b_key3", "value3"}, + {"b_key4", "value4"}, + {"c_key5", "value5"} + }; + for (const auto& pair : data) { + const std::string& key = pair.first; + const std::string& value = pair.second; + leveldb::Status status = db->Put(leveldb::WriteOptions(), key, value); + ASSERT_TRUE(status.ok()) << "Failed to put data: " << status.ToString(); + } + + // 查询范围内的键值对 + std::string range_start = "a_key1"; + std::string range_end = "b_key4"; + std::vector> expected_data = { + {"a_key1", "value1"}, + {"a_key2", "value2"}, + {"b_key3", "value3"}, + {"b_key4", "value4"} + }; + + leveldb::Iterator* it = db->NewIterator(leveldb::ReadOptions()); + it->Seek(range_start); // 从范围起始位置开始 + std::vector> actual_data; + while (it->Valid() && it->key().ToString() <= range_end) { + actual_data.emplace_back(it->key().ToString(), it->value().ToString()); + it->Next(); + } + delete it; + + // 验证范围查询结果是否符合预期 + ASSERT_EQ(actual_data.size(), expected_data.size()) << "Range query results size mismatch."; + for (size_t i = 0; i < actual_data.size(); ++i) { + EXPECT_EQ(actual_data[i].first, expected_data[i].first) << "Key mismatch at index " << i; + EXPECT_EQ(actual_data[i].second, expected_data[i].second) << "Value mismatch at index " << i; + } + + // 输出范围查询结果 + for (const auto& pair : actual_data) { + const std::string& key = pair.first; + const std::string& value = pair.second; + std::cout << "Key: " << key << ", Value: " << value << std::endl; + } +} + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +}