Bug 894150 - Test.
[gecko.git] / mfbt / tests / TestEnumSet.cpp
blobdc43fe358888b0f3838672bc4e9226c94546e87b
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;
10 enum SeaBird {
11 PENGUIN,
12 ALBATROSS,
13 FULMAR,
14 PRION,
15 SHEARWATER,
16 GADFLY_PETREL,
17 TRUE_PETREL,
18 DIVING_PETREL,
19 STORM_PETREL,
20 PELICAN,
21 GANNET,
22 BOOBY,
23 CORMORANT,
24 FRIGATEBIRD,
25 TROPICBIRD,
26 SKUA,
27 GULL,
28 TERN,
29 SKIMMER,
30 AUK
33 class EnumSetSuite {
34 public:
35 EnumSetSuite()
36 : mAlcidae(),
37 mDiomedeidae(ALBATROSS),
38 mPetrelProcellariidae(GADFLY_PETREL, TRUE_PETREL),
39 mNonPetrelProcellariidae(FULMAR, PRION, SHEARWATER),
40 mPetrels(GADFLY_PETREL, TRUE_PETREL, DIVING_PETREL, STORM_PETREL)
41 { }
43 void runTests() {
44 testSize();
45 testContains();
46 testAddTo();
47 testAdd();
48 testAddAll();
49 testUnion();
50 testRemoveFrom();
51 testRemove();
52 testRemoveAllFrom();
53 testRemoveAll();
54 testIntersect();
55 testInsersection();
56 testEquality();
57 testDuplicates();
60 private:
61 void testSize() {
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);
69 void testContains() {
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));
92 void testCopy() {
93 EnumSet<SeaBird> likes = mPetrels;
94 likes -= TRUE_PETREL;
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));
104 void testAddTo() {
105 EnumSet<SeaBird> seen = mPetrels;
106 seen += CORMORANT;
107 seen += TRUE_PETREL;
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));
118 void testAdd() {
119 EnumSet<SeaBird> seen = mPetrels + CORMORANT +
120 STORM_PETREL;
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));
131 void testAddAll() {
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);
145 void testUnion() {
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 +
152 mPetrels;
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));
165 void testRemove() {
166 EnumSet<SeaBird> likes = mPetrels - TRUE_PETREL -
167 DIVING_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,
206 TRUE_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;
227 int main()
229 EnumSetSuite suite;
230 suite.runTests();
231 return 0;