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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
91 EXPECT_TRUE(enums.Has(TEST_2)); | 102 EXPECT_TRUE(enums.Has(TEST_2)); |
92 EXPECT_TRUE(enums.Has(TEST_3)); | 103 EXPECT_TRUE(enums.Has(TEST_3)); |
93 EXPECT_TRUE(enums.Has(TEST_4)); | 104 EXPECT_TRUE(enums.Has(TEST_4)); |
94 } | 105 } |
95 | 106 |
96 TEST_F(EnumSetTest, FromRange) { | 107 TEST_F(EnumSetTest, FromRange) { |
97 EXPECT_EQ(TestEnumSet(TEST_1, TEST_2, TEST_3), | 108 EXPECT_EQ(TestEnumSet(TEST_1, TEST_2, TEST_3), |
98 TestEnumSet::FromRange(TEST_1, TEST_3)); | 109 TestEnumSet::FromRange(TEST_1, TEST_3)); |
99 EXPECT_EQ(TestEnumSet::All(), TestEnumSet::FromRange(TEST_0, TEST_4)); | 110 EXPECT_EQ(TestEnumSet::All(), TestEnumSet::FromRange(TEST_0, TEST_4)); |
100 EXPECT_EQ(TestEnumSet(TEST_1), TestEnumSet::FromRange(TEST_1, TEST_1)); | 111 EXPECT_EQ(TestEnumSet(TEST_1), TestEnumSet::FromRange(TEST_1, TEST_1)); |
| 112 |
| 113 using RestrictedRangeSet = EnumSet<TestEnum, TEST_1, TEST_MAX>; |
| 114 EXPECT_EQ(RestrictedRangeSet(TEST_1, TEST_2, TEST_3), |
| 115 RestrictedRangeSet::FromRange(TEST_1, TEST_3)); |
| 116 EXPECT_EQ(RestrictedRangeSet::All(), |
| 117 RestrictedRangeSet::FromRange(TEST_1, TEST_4)); |
101 } | 118 } |
102 | 119 |
103 TEST_F(EnumSetTest, Put) { | 120 TEST_F(EnumSetTest, Put) { |
104 TestEnumSet enums(TEST_3); | 121 TestEnumSet enums(TEST_3); |
105 enums.Put(TEST_2); | 122 enums.Put(TEST_2); |
106 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3), enums); | 123 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3), enums); |
107 enums.Put(TEST_4); | 124 enums.Put(TEST_4); |
108 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3, TEST_4), enums); | 125 EXPECT_EQ(TestEnumSet(TEST_2, TEST_3, TEST_4), enums); |
109 } | 126 } |
110 | 127 |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 TEST_F(EnumSetTest, Difference) { | 222 TEST_F(EnumSetTest, Difference) { |
206 const TestEnumSet enums1(TEST_3, TEST_4); | 223 const TestEnumSet enums1(TEST_3, TEST_4); |
207 const TestEnumSet enums2(TEST_2, TEST_3); | 224 const TestEnumSet enums2(TEST_2, TEST_3); |
208 const TestEnumSet enums3 = Difference(enums1, enums2); | 225 const TestEnumSet enums3 = Difference(enums1, enums2); |
209 | 226 |
210 EXPECT_EQ(TestEnumSet(TEST_4), enums3); | 227 EXPECT_EQ(TestEnumSet(TEST_4), enums3); |
211 } | 228 } |
212 | 229 |
213 } // namespace | 230 } // namespace |
214 } // namespace syncer | 231 } // namespace syncer |
OLD | NEW |