diff --git a/llvm/unittests/ADT/EquivalenceClassesTest.cpp b/llvm/unittests/ADT/EquivalenceClassesTest.cpp --- a/llvm/unittests/ADT/EquivalenceClassesTest.cpp +++ b/llvm/unittests/ADT/EquivalenceClassesTest.cpp @@ -66,8 +66,14 @@ EXPECT_FALSE(EqClasses.isEquivalent(i, j)); } -TEST(EquivalenceClassesTest, MultipleSets) { - EquivalenceClasses EqClasses; +// Type-parameterized tests: Run the same test cases with different element +// types. +template class ParameterizedTest : public testing::Test {}; + +TYPED_TEST_SUITE_P(ParameterizedTest); + +TYPED_TEST_P(ParameterizedTest, MultipleSets) { + TypeParam EqClasses; // Split numbers from [0, 100) into sets so that values in the same set have // equal remainders (mod 17). for (int i = 0; i < 100; i++) @@ -81,4 +87,30 @@ EXPECT_FALSE(EqClasses.isEquivalent(i, j)); } +namespace { +// A dummy struct for testing EquivalenceClasses with a comparator. +struct TestStruct { + TestStruct(int value) : value(value) {} + + bool operator==(const TestStruct &other) const { + return value == other.value; + } + + int value; +}; +// Comparator to be used in test case. +struct TestStructComparator { + bool operator()(const TestStruct &lhs, const TestStruct &rhs) const { + return lhs.value < rhs.value; + } +}; +} // namespace + +REGISTER_TYPED_TEST_SUITE_P(ParameterizedTest, MultipleSets); +using ParamTypes = + testing::Types, + EquivalenceClasses>; +INSTANTIATE_TYPED_TEST_SUITE_P(EquivalenceClassesTest, ParameterizedTest, + ParamTypes); + } // llvm