#include #include #include #include #include bool ArrayEquals(char **actual, int actualSize, const std::vector &expected) { if (actualSize != expected.size()) return false; std::vector actualVec(actual, actual + actualSize); return std::is_permutation(actualVec.begin(), actualVec.end(), expected.begin()); } // 测试类 class RemoveSubfoldersTest : public ::testing::Test { protected: void AssertFolders(std::vector input, std::vector expected) { int returnSize = 0; std::vector c_input; for (auto &s : input) c_input.push_back(const_cast(s.c_str())); char **result = removeSubfolders(c_input.data(), (int)c_input.size(), &returnSize); ASSERT_TRUE(ArrayEquals(result, returnSize, expected)); // 可选释放 result 内存,如果实现中是动态分配的(free) // 例如:for (int i = 0; i < returnSize; ++i) free(result[i]); // free(result); } }; // 示例 1 TEST_F(RemoveSubfoldersTest, Example1) { AssertFolders({"/a", "/a/b", "/c/d", "/c/d/e", "/c/f"}, {"/a", "/c/d", "/c/f"}); } // 示例 2 TEST_F(RemoveSubfoldersTest, Example2) { AssertFolders({"/a", "/a/b/c", "/a/b/d"}, {"/a"}); } // 示例 3 TEST_F(RemoveSubfoldersTest, Example3) { AssertFolders({"/a/b/c", "/a/b/ca", "/a/b/d"}, {"/a/b/c", "/a/b/ca", "/a/b/d"}); }