OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/sync/base/enum_set.h" | 5 #include "components/sync/base/enum_set.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 15 matching lines...) Expand all Loading... |
26 | 26 |
27 class EnumSetTest : public ::testing::Test {}; | 27 class EnumSetTest : public ::testing::Test {}; |
28 | 28 |
29 TEST_F(EnumSetTest, ClassConstants) { | 29 TEST_F(EnumSetTest, ClassConstants) { |
30 TestEnumSet enums; | 30 TestEnumSet enums; |
31 EXPECT_EQ(TEST_MIN, TestEnumSet::kMinValue); | 31 EXPECT_EQ(TEST_MIN, TestEnumSet::kMinValue); |
32 EXPECT_EQ(TEST_MAX, TestEnumSet::kMaxValue); | 32 EXPECT_EQ(TEST_MAX, TestEnumSet::kMaxValue); |
33 EXPECT_EQ(static_cast<size_t>(5), TestEnumSet::kValueCount); | 33 EXPECT_EQ(static_cast<size_t>(5), TestEnumSet::kValueCount); |
34 } | 34 } |
35 | 35 |
| 36 // Use static_assert to check that functions we expect to be compile time |
| 37 // evaluatable are really that way. |
| 38 TEST_F(EnumSetTest, ConstexprsAreValid) { |
| 39 static_assert(TestEnumSet::All().Has(TEST_1), |
| 40 "expected All() to be integral constant expression"); |
| 41 static_assert(TestEnumSet::FromRange(TEST_1, TEST_3).Has(TEST_1), |
| 42 "expected FromRange() to be integral constant expression"); |
| 43 static_assert(TestEnumSet({TEST_1}).Has(TEST_1), |
| 44 "expected TestEnumSet({}) to be integral constant expression"); |
| 45 } |
| 46 |
36 TEST_F(EnumSetTest, DefaultConstructor) { | 47 TEST_F(EnumSetTest, DefaultConstructor) { |
37 const TestEnumSet enums; | 48 const TestEnumSet enums; |
38 EXPECT_TRUE(enums.Empty()); | 49 EXPECT_TRUE(enums.Empty()); |
39 EXPECT_EQ(static_cast<size_t>(0), enums.Size()); | 50 EXPECT_EQ(static_cast<size_t>(0), enums.Size()); |
40 EXPECT_FALSE(enums.Has(TEST_0)); | 51 EXPECT_FALSE(enums.Has(TEST_0)); |
41 EXPECT_FALSE(enums.Has(TEST_1)); | 52 EXPECT_FALSE(enums.Has(TEST_1)); |
42 EXPECT_FALSE(enums.Has(TEST_2)); | 53 EXPECT_FALSE(enums.Has(TEST_2)); |
43 EXPECT_FALSE(enums.Has(TEST_3)); | 54 EXPECT_FALSE(enums.Has(TEST_3)); |
44 EXPECT_FALSE(enums.Has(TEST_4)); | 55 EXPECT_FALSE(enums.Has(TEST_4)); |
45 } | 56 } |
(...skipping 24 matching lines...) Expand all Loading... |
70 const TestEnumSet enums(TEST_3, TEST_1, TEST_0); | 81 const TestEnumSet enums(TEST_3, TEST_1, TEST_0); |
71 EXPECT_FALSE(enums.Empty()); | 82 EXPECT_FALSE(enums.Empty()); |
72 EXPECT_EQ(static_cast<size_t>(3), enums.Size()); | 83 EXPECT_EQ(static_cast<size_t>(3), enums.Size()); |
73 EXPECT_TRUE(enums.Has(TEST_0)); | 84 EXPECT_TRUE(enums.Has(TEST_0)); |
74 EXPECT_TRUE(enums.Has(TEST_1)); | 85 EXPECT_TRUE(enums.Has(TEST_1)); |
75 EXPECT_FALSE(enums.Has(TEST_2)); | 86 EXPECT_FALSE(enums.Has(TEST_2)); |
76 EXPECT_TRUE(enums.Has(TEST_3)); | 87 EXPECT_TRUE(enums.Has(TEST_3)); |
77 EXPECT_FALSE(enums.Has(TEST_4)); | 88 EXPECT_FALSE(enums.Has(TEST_4)); |
78 } | 89 } |
79 | 90 |
| 91 TEST_F(EnumSetTest, InitializerListConstructor) { |
| 92 const TestEnumSet enums_empty({}); |
| 93 EXPECT_TRUE(enums_empty.Empty()); |
| 94 |
| 95 const TestEnumSet enums_single({TEST_1}); |
| 96 EXPECT_FALSE(enums_single.Empty()); |
| 97 EXPECT_EQ(static_cast<size_t>(1), enums_single.Size()); |
| 98 EXPECT_TRUE(enums_single.Has(TEST_1)); |
| 99 |
| 100 const TestEnumSet enums_multiple_non_overlapping({TEST_0, TEST_2, TEST_4}); |
| 101 EXPECT_FALSE(enums_multiple_non_overlapping.Empty()); |
| 102 EXPECT_EQ(static_cast<size_t>(3), enums_multiple_non_overlapping.Size()); |
| 103 EXPECT_TRUE(enums_multiple_non_overlapping.Has(TEST_0)); |
| 104 EXPECT_TRUE(enums_multiple_non_overlapping.Has(TEST_2)); |
| 105 EXPECT_TRUE(enums_multiple_non_overlapping.Has(TEST_4)); |
| 106 } |
| 107 |
80 TEST_F(EnumSetTest, DuplicatesInConstructor) { | 108 TEST_F(EnumSetTest, DuplicatesInConstructor) { |
81 EXPECT_EQ(TestEnumSet(TEST_3, TEST_1, TEST_0, TEST_3, TEST_1, TEST_3), | 109 EXPECT_EQ(TestEnumSet(TEST_3, TEST_1, TEST_0, TEST_3, TEST_1, TEST_3), |
82 TestEnumSet(TEST_0, TEST_1, TEST_3)); | 110 TestEnumSet(TEST_0, TEST_1, TEST_3)); |
83 } | 111 } |
84 | 112 |
85 TEST_F(EnumSetTest, All) { | 113 TEST_F(EnumSetTest, All) { |
86 const TestEnumSet enums(TestEnumSet::All()); | 114 const TestEnumSet enums(TestEnumSet::All()); |
87 EXPECT_FALSE(enums.Empty()); | 115 EXPECT_FALSE(enums.Empty()); |
88 EXPECT_EQ(static_cast<size_t>(5), enums.Size()); | 116 EXPECT_EQ(static_cast<size_t>(5), enums.Size()); |
89 EXPECT_TRUE(enums.Has(TEST_0)); | 117 EXPECT_TRUE(enums.Has(TEST_0)); |
90 EXPECT_TRUE(enums.Has(TEST_1)); | 118 EXPECT_TRUE(enums.Has(TEST_1)); |
91 EXPECT_TRUE(enums.Has(TEST_2)); | 119 EXPECT_TRUE(enums.Has(TEST_2)); |
92 EXPECT_TRUE(enums.Has(TEST_3)); | 120 EXPECT_TRUE(enums.Has(TEST_3)); |
93 EXPECT_TRUE(enums.Has(TEST_4)); | 121 EXPECT_TRUE(enums.Has(TEST_4)); |
94 } | 122 } |
95 | 123 |
96 TEST_F(EnumSetTest, FromRange) { | 124 TEST_F(EnumSetTest, FromRange) { |
97 EXPECT_EQ(TestEnumSet(TEST_1, TEST_2, TEST_3), | 125 EXPECT_EQ(TestEnumSet(TEST_1, TEST_2, TEST_3), |
98 TestEnumSet::FromRange(TEST_1, TEST_3)); | 126 TestEnumSet::FromRange(TEST_1, TEST_3)); |
99 EXPECT_EQ(TestEnumSet::All(), TestEnumSet::FromRange(TEST_0, TEST_4)); | 127 EXPECT_EQ(TestEnumSet::All(), TestEnumSet::FromRange(TEST_0, TEST_4)); |
100 EXPECT_EQ(TestEnumSet(TEST_1), TestEnumSet::FromRange(TEST_1, TEST_1)); | 128 EXPECT_EQ(TestEnumSet(TEST_1), TestEnumSet::FromRange(TEST_1, TEST_1)); |
| 129 |
| 130 using RestrictedRangeSet = EnumSet<TestEnum, TEST_1, TEST_MAX>; |
| 131 EXPECT_EQ(RestrictedRangeSet(TEST_1, TEST_2, TEST_3), |
| 132 RestrictedRangeSet::FromRange(TEST_1, TEST_3)); |
| 133 EXPECT_EQ(RestrictedRangeSet::All(), |
| 134 RestrictedRangeSet::FromRange(TEST_1, TEST_4)); |
101 } | 135 } |
102 | 136 |
103 TEST_F(EnumSetTest, Put) { | 137 TEST_F(EnumSetTest, Put) { |
104 TestEnumSet enums(TEST_3); | 138 TestEnumSet enums(TEST_3); |
105 enums.Put(TEST_2); | 139 enums.Put(TEST_2); |
106 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3), enums); | 140 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3), enums); |
107 enums.Put(TEST_4); | 141 enums.Put(TEST_4); |
108 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3, TEST_4), enums); | 142 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3, TEST_4), enums); |
109 } | 143 } |
110 | 144 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 TEST_F(EnumSetTest, Difference) { | 239 TEST_F(EnumSetTest, Difference) { |
206 const TestEnumSet enums1(TEST_3, TEST_4); | 240 const TestEnumSet enums1(TEST_3, TEST_4); |
207 const TestEnumSet enums2(TEST_2, TEST_3); | 241 const TestEnumSet enums2(TEST_2, TEST_3); |
208 const TestEnumSet enums3 = Difference(enums1, enums2); | 242 const TestEnumSet enums3 = Difference(enums1, enums2); |
209 | 243 |
210 EXPECT_EQ(TestEnumSet(TEST_4), enums3); | 244 EXPECT_EQ(TestEnumSet(TEST_4), enums3); |
211 } | 245 } |
212 | 246 |
213 } // namespace | 247 } // namespace |
214 } // namespace syncer | 248 } // namespace syncer |
OLD | NEW |