OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/sync/util/enum_set.h" | |
6 | |
7 #include "base/basictypes.h" | |
8 #include "testing/gtest/include/gtest/gtest.h" | |
9 | |
10 namespace browser_sync { | |
11 namespace { | |
12 | |
13 enum TestEnum { | |
14 TEST_0, | |
15 TEST_MIN = TEST_0, | |
16 TEST_1, | |
17 TEST_2, | |
18 TEST_3, | |
19 TEST_4, | |
20 TEST_MAX = TEST_4, | |
21 TEST_5 | |
22 }; | |
23 | |
24 typedef EnumSet<TestEnum, TEST_MIN, TEST_MAX> TestEnumSet; | |
25 | |
26 class EnumSetTest : public ::testing::Test {}; | |
27 | |
28 TEST_F(EnumSetTest, ClassConstants) { | |
29 TestEnumSet enums; | |
30 EXPECT_EQ(TEST_MIN, TestEnumSet::kMinValue); | |
31 EXPECT_EQ(TEST_MAX, TestEnumSet::kMaxValue); | |
32 EXPECT_EQ(static_cast<size_t>(5), TestEnumSet::kValueCount); | |
33 } | |
34 | |
35 TEST_F(EnumSetTest, DefaultConstructor) { | |
36 const TestEnumSet enums; | |
37 EXPECT_TRUE(enums.Empty()); | |
38 EXPECT_EQ(static_cast<size_t>(0), enums.Size()); | |
39 EXPECT_FALSE(enums.Has(TEST_0)); | |
40 EXPECT_FALSE(enums.Has(TEST_1)); | |
41 EXPECT_FALSE(enums.Has(TEST_2)); | |
42 EXPECT_FALSE(enums.Has(TEST_3)); | |
43 EXPECT_FALSE(enums.Has(TEST_4)); | |
44 } | |
45 | |
46 TEST_F(EnumSetTest, OneArgConstructor) { | |
47 const TestEnumSet enums(TEST_3); | |
48 EXPECT_FALSE(enums.Empty()); | |
49 EXPECT_EQ(static_cast<size_t>(1), enums.Size()); | |
50 EXPECT_FALSE(enums.Has(TEST_0)); | |
51 EXPECT_FALSE(enums.Has(TEST_1)); | |
52 EXPECT_FALSE(enums.Has(TEST_2)); | |
53 EXPECT_TRUE(enums.Has(TEST_3)); | |
54 EXPECT_FALSE(enums.Has(TEST_4)); | |
55 } | |
56 | |
57 TEST_F(EnumSetTest, TwoArgConstructor) { | |
58 const TestEnumSet enums(TEST_3, TEST_1); | |
59 EXPECT_FALSE(enums.Empty()); | |
60 EXPECT_EQ(static_cast<size_t>(2), enums.Size()); | |
61 EXPECT_FALSE(enums.Has(TEST_0)); | |
62 EXPECT_TRUE(enums.Has(TEST_1)); | |
63 EXPECT_FALSE(enums.Has(TEST_2)); | |
64 EXPECT_TRUE(enums.Has(TEST_3)); | |
65 EXPECT_FALSE(enums.Has(TEST_4)); | |
66 } | |
67 | |
68 TEST_F(EnumSetTest, ThreeArgConstructor) { | |
69 const TestEnumSet enums(TEST_3, TEST_1, TEST_0); | |
70 EXPECT_FALSE(enums.Empty()); | |
71 EXPECT_EQ(static_cast<size_t>(3), enums.Size()); | |
72 EXPECT_TRUE(enums.Has(TEST_0)); | |
73 EXPECT_TRUE(enums.Has(TEST_1)); | |
74 EXPECT_FALSE(enums.Has(TEST_2)); | |
75 EXPECT_TRUE(enums.Has(TEST_3)); | |
76 EXPECT_FALSE(enums.Has(TEST_4)); | |
77 } | |
78 | |
79 TEST_F(EnumSetTest, All) { | |
80 const TestEnumSet enums(TestEnumSet::All()); | |
81 EXPECT_FALSE(enums.Empty()); | |
82 EXPECT_EQ(static_cast<size_t>(5), enums.Size()); | |
83 EXPECT_TRUE(enums.Has(TEST_0)); | |
84 EXPECT_TRUE(enums.Has(TEST_1)); | |
85 EXPECT_TRUE(enums.Has(TEST_2)); | |
86 EXPECT_TRUE(enums.Has(TEST_3)); | |
87 EXPECT_TRUE(enums.Has(TEST_4)); | |
88 } | |
89 | |
90 TEST_F(EnumSetTest, Put) { | |
91 TestEnumSet enums(TEST_3); | |
92 enums.Put(TEST_2); | |
93 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_2, TEST_3))); | |
94 enums.Put(TEST_4); | |
95 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_2, TEST_3, TEST_4))); | |
96 } | |
97 | |
98 TEST_F(EnumSetTest, PutAll) { | |
99 TestEnumSet enums(TEST_3, TEST_4); | |
100 enums.PutAll(TestEnumSet(TEST_2, TEST_3)); | |
101 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_2, TEST_3, TEST_4))); | |
102 } | |
103 | |
104 TEST_F(EnumSetTest, RetainAll) { | |
105 TestEnumSet enums(TEST_3, TEST_4); | |
106 enums.RetainAll(TestEnumSet(TEST_2, TEST_3)); | |
107 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_3))); | |
108 } | |
109 | |
110 TEST_F(EnumSetTest, Remove) { | |
111 TestEnumSet enums(TEST_3, TEST_4); | |
112 enums.Remove(TEST_0); | |
113 enums.Remove(TEST_2); | |
114 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_3, TEST_4))); | |
115 enums.Remove(TEST_3); | |
116 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_4))); | |
117 enums.Remove(TEST_4); | |
118 enums.Remove(TEST_5); | |
119 EXPECT_TRUE(enums.Empty()); | |
120 } | |
121 | |
122 TEST_F(EnumSetTest, RemoveAll) { | |
123 TestEnumSet enums(TEST_3, TEST_4); | |
124 enums.RemoveAll(TestEnumSet(TEST_2, TEST_3)); | |
125 EXPECT_TRUE(enums.Equals(TestEnumSet(TEST_4))); | |
126 } | |
127 | |
128 TEST_F(EnumSetTest, Clear) { | |
129 TestEnumSet enums(TEST_3, TEST_4); | |
130 enums.Clear(); | |
131 EXPECT_TRUE(enums.Empty()); | |
132 } | |
133 | |
134 TEST_F(EnumSetTest, Has) { | |
135 const TestEnumSet enums(TEST_3, TEST_4); | |
136 EXPECT_FALSE(enums.Has(TEST_0)); | |
137 EXPECT_FALSE(enums.Has(TEST_1)); | |
138 EXPECT_FALSE(enums.Has(TEST_2)); | |
139 EXPECT_TRUE(enums.Has(TEST_3)); | |
140 EXPECT_TRUE(enums.Has(TEST_4)); | |
141 EXPECT_FALSE(enums.Has(TEST_5)); | |
142 } | |
143 | |
144 TEST_F(EnumSetTest, HasAll) { | |
145 const TestEnumSet enums1(TEST_3, TEST_4); | |
146 const TestEnumSet enums2(TEST_2, TEST_3); | |
147 const TestEnumSet enums3 = Union(enums1, enums2); | |
148 EXPECT_TRUE(enums1.HasAll(enums1)); | |
149 EXPECT_FALSE(enums1.HasAll(enums2)); | |
150 EXPECT_FALSE(enums1.HasAll(enums3)); | |
151 | |
152 EXPECT_FALSE(enums2.HasAll(enums1)); | |
153 EXPECT_TRUE(enums2.HasAll(enums2)); | |
154 EXPECT_FALSE(enums2.HasAll(enums3)); | |
155 | |
156 EXPECT_TRUE(enums3.HasAll(enums1)); | |
157 EXPECT_TRUE(enums3.HasAll(enums2)); | |
158 EXPECT_TRUE(enums3.HasAll(enums3)); | |
159 } | |
160 | |
161 TEST_F(EnumSetTest, Iterators) { | |
162 const TestEnumSet enums1(TEST_3, TEST_4); | |
163 TestEnumSet enums2; | |
164 for (TestEnumSet::Iterator it = enums1.First(); it.Good(); it.Inc()) { | |
165 enums2.Put(it.Get()); | |
166 } | |
167 EXPECT_TRUE(enums1.Equals(enums2)); | |
168 } | |
169 | |
170 TEST_F(EnumSetTest, Union) { | |
171 const TestEnumSet enums1(TEST_3, TEST_4); | |
172 const TestEnumSet enums2(TEST_2, TEST_3); | |
173 const TestEnumSet enums3 = Union(enums1, enums2); | |
174 | |
175 EXPECT_TRUE(enums3.Equals(TestEnumSet(TEST_2, TEST_3, TEST_4))); | |
176 } | |
177 | |
178 TEST_F(EnumSetTest, Intersection) { | |
179 const TestEnumSet enums1(TEST_3, TEST_4); | |
180 const TestEnumSet enums2(TEST_2, TEST_3); | |
181 const TestEnumSet enums3 = Intersection(enums1, enums2); | |
182 | |
183 EXPECT_TRUE(enums3.Equals(TestEnumSet(TEST_3))); | |
184 } | |
185 | |
186 TEST_F(EnumSetTest, Difference) { | |
187 const TestEnumSet enums1(TEST_3, TEST_4); | |
188 const TestEnumSet enums2(TEST_2, TEST_3); | |
189 const TestEnumSet enums3 = Difference(enums1, enums2); | |
190 | |
191 EXPECT_TRUE(enums3.Equals(TestEnumSet(TEST_4))); | |
192 } | |
193 | |
194 } // namespace | |
195 } // namespace browser_sync | |
OLD | NEW |