From 41dddae76e5689a110e1568452988b1f27f3cf06 Mon Sep 17 00:00:00 2001 From: resserops Date: Thu, 30 Oct 2025 00:26:21 +0800 Subject: [PATCH] test(leetcode): use YAML to manage test suite for problem #1 --- leetcode/0001-two-sum/test.cpp | 41 ----------------- leetcode/{0001-two-sum => 0001}/solution.hpp | 6 +-- leetcode/0001/test.cpp | 47 ++++++++++++++++++++ leetcode/0001/test_suite.yaml | 17 +++++++ leetcode/0001/title.txt | 1 + 5 files changed, 68 insertions(+), 44 deletions(-) delete mode 100644 leetcode/0001-two-sum/test.cpp rename leetcode/{0001-two-sum => 0001}/solution.hpp (76%) create mode 100644 leetcode/0001/test.cpp create mode 100644 leetcode/0001/test_suite.yaml create mode 100644 leetcode/0001/title.txt diff --git a/leetcode/0001-two-sum/test.cpp b/leetcode/0001-two-sum/test.cpp deleted file mode 100644 index 27a6f47..0000000 --- a/leetcode/0001-two-sum/test.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "solution.hpp" -#include "gmock/gmock.h" -#include "gtest/gtest.h" - -using namespace testing; - -void Expect(const std::vector &expected, const std::vector &nums, const int target) { - // 检查约束条件 - ASSERT_THAT(nums.size(), AllOf(Ge(2), Le(10000))); // 2 <= nums.length <= 10^4 - for (int n : nums) { - ASSERT_THAT(n, AllOf(Ge(-1000000000), Le(1000000000))); // -10^9 <= nums[i] <= 10^9 - } - ASSERT_THAT(target, AllOf(Ge(-1000000000), Le(1000000000))); // -10^9 <= target <= 10^9 - - // 验证目标函数 - Solution solution; - auto res{solution.twoSum(nums, target)}; - ASSERT_EQ(2, res.size()); - if (res[0] > res[1]) { - std::swap(res[0], res[1]); - } - EXPECT_EQ(expected, res); -} - -TEST(LeetCode1, Example1) { - const std::vector expected{0, 1}; - const std::vector nums{2, 7, 11, 15}; - Expect(expected, nums, 9); -} - -TEST(LeetCode1, Example2) { - const std::vector expected{1, 2}; - const std::vector nums{3, 2, 4}; - Expect(expected, nums, 6); -} - -TEST(LeetCode1, Example3) { - const std::vector expected{0, 1}; - const std::vector nums{3, 3}; - Expect(expected, nums, 6); -} diff --git a/leetcode/0001-two-sum/solution.hpp b/leetcode/0001/solution.hpp similarity index 76% rename from leetcode/0001-two-sum/solution.hpp rename to leetcode/0001/solution.hpp index 711e1d6..dbea879 100644 --- a/leetcode/0001-two-sum/solution.hpp +++ b/leetcode/0001/solution.hpp @@ -2,9 +2,9 @@ #include #include -class Solution { -public: - std::vector twoSum(const std::vector &nums, int target) { +// 方法1:哈希表 +struct Solution { + static std::vector twoSum(const std::vector &nums, int target) { std::unordered_map hash; for (std::size_t i{0}; i < nums.size(); ++i) { auto it{hash.find(nums[i])}; diff --git a/leetcode/0001/test.cpp b/leetcode/0001/test.cpp new file mode 100644 index 0000000..3fb2918 --- /dev/null +++ b/leetcode/0001/test.cpp @@ -0,0 +1,47 @@ +#include "test.hpp" +#include "solution.hpp" + +using namespace testing; +namespace { +using SolutionList = std::tuple; +struct TestCase { + TestCase(const YAML::Node &node) { + Decode(node["input"]["nums"], input.nums); + Decode(node["input"]["target"], input.target); + Decode(node["expected"], expected); + } + struct { + std::vector nums; + int target; + } input; + std::vector expected; +}; + +template +void Expect(const std::vector &nums, const int target, const std::vector &expected) { + // 检查约束条件 + ASSERT_THAT(nums.size(), AllOf(Ge(2), Le(10000))); // 2 <= nums.length <= 10^4 + ASSERT_THAT(nums, Each(AllOf(Ge(-1000000000), Le(1000000000)))); // -10^9 <= nums[i] <= 10^9 + ASSERT_THAT(target, AllOf(Ge(-1000000000), Le(1000000000))); // -10^9 <= target <= 10^9 + // Only one valid answer exists + // TODO(resserops): 补充检查 + + // 验证目标函数 + Solution solution; + auto res{solution.twoSum(nums, target)}; + ASSERT_EQ(2, res.size()); + if (res[0] > res[1]) { + std::swap(res[0], res[1]); + } + EXPECT_EQ(res, expected); +} + +template +void Expect(const TestCase &tc) { + Expect(tc.input.nums, tc.input.target, tc.expected); +} + +TEST_Y(LeetCode1, Example1); +TEST_Y(LeetCode1, Example2); +TEST_Y(LeetCode1, Example3); +} // namespace diff --git a/leetcode/0001/test_suite.yaml b/leetcode/0001/test_suite.yaml new file mode 100644 index 0000000..eb7388a --- /dev/null +++ b/leetcode/0001/test_suite.yaml @@ -0,0 +1,17 @@ +example1: + input: + nums: [2,7,11,15] + target: 9 + expected: [0,1] + +example2: + input: + nums: [3,2,4] + target: 6 + expected: [1,2] + +example3: + input: + nums: [3,3] + target: 6 + expected: [0,1] diff --git a/leetcode/0001/title.txt b/leetcode/0001/title.txt new file mode 100644 index 0000000..00626f2 --- /dev/null +++ b/leetcode/0001/title.txt @@ -0,0 +1 @@ +two-sum \ No newline at end of file