1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
4 * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #include "mozilla/EnumSet.h"
8 using namespace mozilla
;
37 mDiomedeidae(ALBATROSS
),
38 mPetrelProcellariidae(GADFLY_PETREL
, TRUE_PETREL
),
39 mNonPetrelProcellariidae(FULMAR
, PRION
, SHEARWATER
),
40 mPetrels(GADFLY_PETREL
, TRUE_PETREL
, DIVING_PETREL
, STORM_PETREL
)
62 MOZ_ASSERT(mAlcidae
.size() == 0);
63 MOZ_ASSERT(mDiomedeidae
.size() == 1);
64 MOZ_ASSERT(mPetrelProcellariidae
.size() == 2);
65 MOZ_ASSERT(mNonPetrelProcellariidae
.size() == 3);
66 MOZ_ASSERT(mPetrels
.size() == 4);
70 MOZ_ASSERT(!mPetrels
.contains(PENGUIN
));
71 MOZ_ASSERT(!mPetrels
.contains(ALBATROSS
));
72 MOZ_ASSERT(!mPetrels
.contains(FULMAR
));
73 MOZ_ASSERT(!mPetrels
.contains(PRION
));
74 MOZ_ASSERT(!mPetrels
.contains(SHEARWATER
));
75 MOZ_ASSERT(mPetrels
.contains(GADFLY_PETREL
));
76 MOZ_ASSERT(mPetrels
.contains(TRUE_PETREL
));
77 MOZ_ASSERT(mPetrels
.contains(DIVING_PETREL
));
78 MOZ_ASSERT(mPetrels
.contains(STORM_PETREL
));
79 MOZ_ASSERT(!mPetrels
.contains(PELICAN
));
80 MOZ_ASSERT(!mPetrels
.contains(GANNET
));
81 MOZ_ASSERT(!mPetrels
.contains(BOOBY
));
82 MOZ_ASSERT(!mPetrels
.contains(CORMORANT
));
83 MOZ_ASSERT(!mPetrels
.contains(FRIGATEBIRD
));
84 MOZ_ASSERT(!mPetrels
.contains(TROPICBIRD
));
85 MOZ_ASSERT(!mPetrels
.contains(SKUA
));
86 MOZ_ASSERT(!mPetrels
.contains(GULL
));
87 MOZ_ASSERT(!mPetrels
.contains(TERN
));
88 MOZ_ASSERT(!mPetrels
.contains(SKIMMER
));
89 MOZ_ASSERT(!mPetrels
.contains(AUK
));
93 EnumSet
<SeaBird
> likes
= mPetrels
;
95 MOZ_ASSERT(mPetrels
.size() == 4);
96 MOZ_ASSERT(mPetrels
.contains(TRUE_PETREL
));
98 MOZ_ASSERT(likes
.size() == 3);
99 MOZ_ASSERT(likes
.contains(GADFLY_PETREL
));
100 MOZ_ASSERT(likes
.contains(DIVING_PETREL
));
101 MOZ_ASSERT(likes
.contains(STORM_PETREL
));
105 EnumSet
<SeaBird
> seen
= mPetrels
;
108 MOZ_ASSERT(mPetrels
.size() == 4);
109 MOZ_ASSERT(!mPetrels
.contains(CORMORANT
));
110 MOZ_ASSERT(seen
.size() == 5);
111 MOZ_ASSERT(seen
.contains(GADFLY_PETREL
));
112 MOZ_ASSERT(seen
.contains(TRUE_PETREL
));
113 MOZ_ASSERT(seen
.contains(DIVING_PETREL
));
114 MOZ_ASSERT(seen
.contains(STORM_PETREL
));
115 MOZ_ASSERT(seen
.contains(CORMORANT
));
119 EnumSet
<SeaBird
> seen
= mPetrels
+ CORMORANT
+
121 MOZ_ASSERT(mPetrels
.size() == 4);
122 MOZ_ASSERT(!mPetrels
.contains(CORMORANT
));
123 MOZ_ASSERT(seen
.size() == 5);
124 MOZ_ASSERT(seen
.contains(GADFLY_PETREL
));
125 MOZ_ASSERT(seen
.contains(TRUE_PETREL
));
126 MOZ_ASSERT(seen
.contains(DIVING_PETREL
));
127 MOZ_ASSERT(seen
.contains(STORM_PETREL
));
128 MOZ_ASSERT(seen
.contains(CORMORANT
));
132 EnumSet
<SeaBird
> procellariidae
;
133 procellariidae
+= mPetrelProcellariidae
;
134 procellariidae
+= mNonPetrelProcellariidae
;
135 MOZ_ASSERT(procellariidae
.size() == 5);
137 // Both procellariidae and mPetrels include GADFLY_PERTEL and TRUE_PETREL
138 EnumSet
<SeaBird
> procellariiformes
;
139 procellariiformes
+= mDiomedeidae
;
140 procellariiformes
+= procellariidae
;
141 procellariiformes
+= mPetrels
;
142 MOZ_ASSERT(procellariiformes
.size() == 8);
146 EnumSet
<SeaBird
> procellariidae
= mPetrelProcellariidae
+
147 mNonPetrelProcellariidae
;
148 MOZ_ASSERT(procellariidae
.size() == 5);
150 // Both procellariidae and mPetrels include GADFLY_PETREL and TRUE_PETREL
151 EnumSet
<SeaBird
> procellariiformes
= mDiomedeidae
+ procellariidae
+
153 MOZ_ASSERT(procellariiformes
.size() == 8);
156 void testRemoveFrom() {
157 EnumSet
<SeaBird
> likes
= mPetrels
;
158 likes
-= TRUE_PETREL
;
159 likes
-= DIVING_PETREL
;
160 MOZ_ASSERT(likes
.size() == 2);
161 MOZ_ASSERT(likes
.contains(GADFLY_PETREL
));
162 MOZ_ASSERT(likes
.contains(STORM_PETREL
));
166 EnumSet
<SeaBird
> likes
= mPetrels
- TRUE_PETREL
-
168 MOZ_ASSERT(likes
.size() == 2);
169 MOZ_ASSERT(likes
.contains(GADFLY_PETREL
));
170 MOZ_ASSERT(likes
.contains(STORM_PETREL
));
173 void testRemoveAllFrom() {
174 EnumSet
<SeaBird
> likes
= mPetrels
;
175 likes
-= mPetrelProcellariidae
;
176 MOZ_ASSERT(likes
.size() == 2);
177 MOZ_ASSERT(likes
.contains(DIVING_PETREL
));
178 MOZ_ASSERT(likes
.contains(STORM_PETREL
));
181 void testRemoveAll() {
182 EnumSet
<SeaBird
> likes
= mPetrels
- mPetrelProcellariidae
;
183 MOZ_ASSERT(likes
.size() == 2);
184 MOZ_ASSERT(likes
.contains(DIVING_PETREL
));
185 MOZ_ASSERT(likes
.contains(STORM_PETREL
));
188 void testIntersect() {
189 EnumSet
<SeaBird
> likes
= mPetrels
;
190 likes
&= mPetrelProcellariidae
;
191 MOZ_ASSERT(likes
.size() == 2);
192 MOZ_ASSERT(likes
.contains(GADFLY_PETREL
));
193 MOZ_ASSERT(likes
.contains(TRUE_PETREL
));
196 void testInsersection() {
197 EnumSet
<SeaBird
> likes
= mPetrels
& mPetrelProcellariidae
;
198 MOZ_ASSERT(likes
.size() == 2);
199 MOZ_ASSERT(likes
.contains(GADFLY_PETREL
));
200 MOZ_ASSERT(likes
.contains(TRUE_PETREL
));
203 void testEquality() {
204 EnumSet
<SeaBird
> likes
= mPetrels
& mPetrelProcellariidae
;
205 MOZ_ASSERT(likes
== EnumSet
<SeaBird
>(GADFLY_PETREL
,
209 void testDuplicates() {
210 EnumSet
<SeaBird
> likes
= mPetrels
;
211 likes
+= GADFLY_PETREL
;
212 likes
+= TRUE_PETREL
;
213 likes
+= DIVING_PETREL
;
214 likes
+= STORM_PETREL
;
215 MOZ_ASSERT(likes
.size() == 4);
216 MOZ_ASSERT(likes
== mPetrels
);
220 EnumSet
<SeaBird
> mAlcidae
;
221 EnumSet
<SeaBird
> mDiomedeidae
;
222 EnumSet
<SeaBird
> mPetrelProcellariidae
;
223 EnumSet
<SeaBird
> mNonPetrelProcellariidae
;
224 EnumSet
<SeaBird
> mPetrels
;