• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "base/basictypes.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 namespace syncer {
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 
TEST_F(EnumSetTest,ClassConstants)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 
TEST_F(EnumSetTest,DefaultConstructor)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 
TEST_F(EnumSetTest,OneArgConstructor)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 
TEST_F(EnumSetTest,TwoArgConstructor)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 
TEST_F(EnumSetTest,ThreeArgConstructor)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 
TEST_F(EnumSetTest,All)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 
TEST_F(EnumSetTest,Put)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 
TEST_F(EnumSetTest,PutAll)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 
TEST_F(EnumSetTest,RetainAll)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 
TEST_F(EnumSetTest,Remove)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 
TEST_F(EnumSetTest,RemoveAll)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 
TEST_F(EnumSetTest,Clear)128 TEST_F(EnumSetTest, Clear) {
129   TestEnumSet enums(TEST_3, TEST_4);
130   enums.Clear();
131   EXPECT_TRUE(enums.Empty());
132 }
133 
TEST_F(EnumSetTest,Has)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 
TEST_F(EnumSetTest,HasAll)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 
TEST_F(EnumSetTest,Iterators)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 
TEST_F(EnumSetTest,Union)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 
TEST_F(EnumSetTest,Intersection)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 
TEST_F(EnumSetTest,Difference)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 syncer
196