22
Gitea CTest Workflow / test (push) Waiting to run

This commit is contained in:
2026-06-25 21:00:50 +08:00
parent f9ac8111cc
commit 576970541c
3 changed files with 165 additions and 0 deletions
+130
View File
@@ -0,0 +1,130 @@
// This file is generated by mkfile.py
// Date: 2026-06-25
#include <gtest/gtest.h>
#include <solution/22.h>
#include <algorithm>
#include <cstdlib>
#include <set>
#include <string>
#include <vector>
namespace
{
struct GeneratedParentheses
{
char **data = nullptr;
int size = 0;
explicit GeneratedParentheses(int n)
{
data = generateParenthesis(n, &size);
}
~GeneratedParentheses()
{
if (data == nullptr)
{
return;
}
for (int i = 0; i < size; ++i)
{
free(data[i]);
}
free(data);
}
};
bool IsValidParentheses(const std::string &s, int pairCount)
{
if ((int)s.size() != pairCount * 2)
{
return false;
}
int balance = 0;
for (char c : s)
{
if (c == '(')
{
++balance;
}
else if (c == ')')
{
--balance;
}
else
{
return false;
}
if (balance < 0)
{
return false;
}
}
return balance == 0;
}
} // namespace
class GenerateParenthesisTest : public ::testing::Test
{
protected:
void AssertGeneratedEquals(int n, std::vector<std::string> expected)
{
GeneratedParentheses result(n);
ASSERT_EQ(result.size, (int)expected.size());
ASSERT_NE(result.data, nullptr);
std::vector<std::string> actual;
actual.reserve(result.size);
for (int i = 0; i < result.size; ++i)
{
ASSERT_NE(result.data[i], nullptr);
actual.emplace_back(result.data[i]);
}
std::sort(actual.begin(), actual.end());
std::sort(expected.begin(), expected.end());
EXPECT_EQ(actual, expected);
}
};
TEST_F(GenerateParenthesisTest, Example1)
{
AssertGeneratedEquals(3, {"((()))", "(()())", "(())()", "()(())", "()()()"});
}
TEST_F(GenerateParenthesisTest, Example2)
{
AssertGeneratedEquals(1, {"()"});
}
TEST_F(GenerateParenthesisTest, TwoPairs)
{
AssertGeneratedEquals(2, {"(())", "()()"});
}
TEST_F(GenerateParenthesisTest, FourPairsAreUniqueAndValid)
{
GeneratedParentheses result(4);
ASSERT_EQ(result.size, 14);
ASSERT_NE(result.data, nullptr);
std::set<std::string> unique;
for (int i = 0; i < result.size; ++i)
{
ASSERT_NE(result.data[i], nullptr);
std::string current(result.data[i]);
EXPECT_TRUE(IsValidParentheses(current, 4)) << current;
unique.insert(current);
}
EXPECT_EQ(unique.size(), 14u);
}