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