Index: components/sync/base/enum_set_unittest.cc |
diff --git a/components/sync/base/enum_set_unittest.cc b/components/sync/base/enum_set_unittest.cc |
index 8f32c7f783f2fcc9a7d6f1e7c61441c07034c9fb..8f1d1d36943ad365dcb7415e8c9ca48b2bf0d84f 100644 |
--- a/components/sync/base/enum_set_unittest.cc |
+++ b/components/sync/base/enum_set_unittest.cc |
@@ -33,6 +33,17 @@ TEST_F(EnumSetTest, ClassConstants) { |
EXPECT_EQ(static_cast<size_t>(5), TestEnumSet::kValueCount); |
} |
+// Use static_assert to check that functions we expect to be compile time |
+// evaluatable are really that way. |
+TEST_F(EnumSetTest, ConstexprsAreValid) { |
+ static_assert(TestEnumSet::All().Has(TEST_1), |
+ "expected All() to be integral constant expression"); |
+ static_assert(TestEnumSet::FromRange(TEST_1, TEST_3).Has(TEST_1), |
+ "expected FromRange() to be integral constant expression"); |
+ static_assert(TestEnumSet({TEST_1}).Has(TEST_1), |
+ "expected TestEnumSet({}) to be integral constant expression"); |
+} |
+ |
TEST_F(EnumSetTest, DefaultConstructor) { |
const TestEnumSet enums; |
EXPECT_TRUE(enums.Empty()); |
@@ -77,6 +88,23 @@ TEST_F(EnumSetTest, ThreeArgConstructor) { |
EXPECT_FALSE(enums.Has(TEST_4)); |
} |
+TEST_F(EnumSetTest, InitializerListConstructor) { |
+ const TestEnumSet enums_empty({}); |
+ EXPECT_TRUE(enums_empty.Empty()); |
+ |
+ const TestEnumSet enums_single({TEST_1}); |
+ EXPECT_FALSE(enums_single.Empty()); |
+ EXPECT_EQ(static_cast<size_t>(1), enums_single.Size()); |
+ EXPECT_TRUE(enums_single.Has(TEST_1)); |
+ |
+ const TestEnumSet enums_multiple_non_overlapping({TEST_0, TEST_2, TEST_4}); |
+ EXPECT_FALSE(enums_multiple_non_overlapping.Empty()); |
+ EXPECT_EQ(static_cast<size_t>(3), enums_multiple_non_overlapping.Size()); |
+ EXPECT_TRUE(enums_multiple_non_overlapping.Has(TEST_0)); |
+ EXPECT_TRUE(enums_multiple_non_overlapping.Has(TEST_2)); |
+ EXPECT_TRUE(enums_multiple_non_overlapping.Has(TEST_4)); |
+} |
+ |
TEST_F(EnumSetTest, DuplicatesInConstructor) { |
EXPECT_EQ(TestEnumSet(TEST_3, TEST_1, TEST_0, TEST_3, TEST_1, TEST_3), |
TestEnumSet(TEST_0, TEST_1, TEST_3)); |
@@ -98,6 +126,12 @@ TEST_F(EnumSetTest, FromRange) { |
TestEnumSet::FromRange(TEST_1, TEST_3)); |
EXPECT_EQ(TestEnumSet::All(), TestEnumSet::FromRange(TEST_0, TEST_4)); |
EXPECT_EQ(TestEnumSet(TEST_1), TestEnumSet::FromRange(TEST_1, TEST_1)); |
+ |
+ using RestrictedRangeSet = EnumSet<TestEnum, TEST_1, TEST_MAX>; |
+ EXPECT_EQ(RestrictedRangeSet(TEST_1, TEST_2, TEST_3), |
+ RestrictedRangeSet::FromRange(TEST_1, TEST_3)); |
+ EXPECT_EQ(RestrictedRangeSet::All(), |
+ RestrictedRangeSet::FromRange(TEST_1, TEST_4)); |
} |
TEST_F(EnumSetTest, Put) { |