summaryrefslogtreecommitdiff
path: root/mfbt/tests/TestEnumSet.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mfbt/tests/TestEnumSet.cpp')
-rw-r--r--mfbt/tests/TestEnumSet.cpp232
1 files changed, 232 insertions, 0 deletions
diff --git a/mfbt/tests/TestEnumSet.cpp b/mfbt/tests/TestEnumSet.cpp
new file mode 100644
index 0000000..dc43fe3
--- /dev/null
+++ b/mfbt/tests/TestEnumSet.cpp
@@ -0,0 +1,232 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/EnumSet.h"
+
+using namespace mozilla;
+
+enum SeaBird {
+ PENGUIN,
+ ALBATROSS,
+ FULMAR,
+ PRION,
+ SHEARWATER,
+ GADFLY_PETREL,
+ TRUE_PETREL,
+ DIVING_PETREL,
+ STORM_PETREL,
+ PELICAN,
+ GANNET,
+ BOOBY,
+ CORMORANT,
+ FRIGATEBIRD,
+ TROPICBIRD,
+ SKUA,
+ GULL,
+ TERN,
+ SKIMMER,
+ AUK
+};
+
+class EnumSetSuite {
+ public:
+ EnumSetSuite()
+ : mAlcidae(),
+ mDiomedeidae(ALBATROSS),
+ mPetrelProcellariidae(GADFLY_PETREL, TRUE_PETREL),
+ mNonPetrelProcellariidae(FULMAR, PRION, SHEARWATER),
+ mPetrels(GADFLY_PETREL, TRUE_PETREL, DIVING_PETREL, STORM_PETREL)
+ { }
+
+ void runTests() {
+ testSize();
+ testContains();
+ testAddTo();
+ testAdd();
+ testAddAll();
+ testUnion();
+ testRemoveFrom();
+ testRemove();
+ testRemoveAllFrom();
+ testRemoveAll();
+ testIntersect();
+ testInsersection();
+ testEquality();
+ testDuplicates();
+ }
+
+ private:
+ void testSize() {
+ MOZ_ASSERT(mAlcidae.size() == 0);
+ MOZ_ASSERT(mDiomedeidae.size() == 1);
+ MOZ_ASSERT(mPetrelProcellariidae.size() == 2);
+ MOZ_ASSERT(mNonPetrelProcellariidae.size() == 3);
+ MOZ_ASSERT(mPetrels.size() == 4);
+ }
+
+ void testContains() {
+ MOZ_ASSERT(!mPetrels.contains(PENGUIN));
+ MOZ_ASSERT(!mPetrels.contains(ALBATROSS));
+ MOZ_ASSERT(!mPetrels.contains(FULMAR));
+ MOZ_ASSERT(!mPetrels.contains(PRION));
+ MOZ_ASSERT(!mPetrels.contains(SHEARWATER));
+ MOZ_ASSERT(mPetrels.contains(GADFLY_PETREL));
+ MOZ_ASSERT(mPetrels.contains(TRUE_PETREL));
+ MOZ_ASSERT(mPetrels.contains(DIVING_PETREL));
+ MOZ_ASSERT(mPetrels.contains(STORM_PETREL));
+ MOZ_ASSERT(!mPetrels.contains(PELICAN));
+ MOZ_ASSERT(!mPetrels.contains(GANNET));
+ MOZ_ASSERT(!mPetrels.contains(BOOBY));
+ MOZ_ASSERT(!mPetrels.contains(CORMORANT));
+ MOZ_ASSERT(!mPetrels.contains(FRIGATEBIRD));
+ MOZ_ASSERT(!mPetrels.contains(TROPICBIRD));
+ MOZ_ASSERT(!mPetrels.contains(SKUA));
+ MOZ_ASSERT(!mPetrels.contains(GULL));
+ MOZ_ASSERT(!mPetrels.contains(TERN));
+ MOZ_ASSERT(!mPetrels.contains(SKIMMER));
+ MOZ_ASSERT(!mPetrels.contains(AUK));
+ }
+
+ void testCopy() {
+ EnumSet<SeaBird> likes = mPetrels;
+ likes -= TRUE_PETREL;
+ MOZ_ASSERT(mPetrels.size() == 4);
+ MOZ_ASSERT(mPetrels.contains(TRUE_PETREL));
+
+ MOZ_ASSERT(likes.size() == 3);
+ MOZ_ASSERT(likes.contains(GADFLY_PETREL));
+ MOZ_ASSERT(likes.contains(DIVING_PETREL));
+ MOZ_ASSERT(likes.contains(STORM_PETREL));
+ }
+
+ void testAddTo() {
+ EnumSet<SeaBird> seen = mPetrels;
+ seen += CORMORANT;
+ seen += TRUE_PETREL;
+ MOZ_ASSERT(mPetrels.size() == 4);
+ MOZ_ASSERT(!mPetrels.contains(CORMORANT));
+ MOZ_ASSERT(seen.size() == 5);
+ MOZ_ASSERT(seen.contains(GADFLY_PETREL));
+ MOZ_ASSERT(seen.contains(TRUE_PETREL));
+ MOZ_ASSERT(seen.contains(DIVING_PETREL));
+ MOZ_ASSERT(seen.contains(STORM_PETREL));
+ MOZ_ASSERT(seen.contains(CORMORANT));
+ }
+
+ void testAdd() {
+ EnumSet<SeaBird> seen = mPetrels + CORMORANT +
+ STORM_PETREL;
+ MOZ_ASSERT(mPetrels.size() == 4);
+ MOZ_ASSERT(!mPetrels.contains(CORMORANT));
+ MOZ_ASSERT(seen.size() == 5);
+ MOZ_ASSERT(seen.contains(GADFLY_PETREL));
+ MOZ_ASSERT(seen.contains(TRUE_PETREL));
+ MOZ_ASSERT(seen.contains(DIVING_PETREL));
+ MOZ_ASSERT(seen.contains(STORM_PETREL));
+ MOZ_ASSERT(seen.contains(CORMORANT));
+ }
+
+ void testAddAll() {
+ EnumSet<SeaBird> procellariidae;
+ procellariidae += mPetrelProcellariidae;
+ procellariidae += mNonPetrelProcellariidae;
+ MOZ_ASSERT(procellariidae.size() == 5);
+
+ // Both procellariidae and mPetrels include GADFLY_PERTEL and TRUE_PETREL
+ EnumSet<SeaBird> procellariiformes;
+ procellariiformes += mDiomedeidae;
+ procellariiformes += procellariidae;
+ procellariiformes += mPetrels;
+ MOZ_ASSERT(procellariiformes.size() == 8);
+ }
+
+ void testUnion() {
+ EnumSet<SeaBird> procellariidae = mPetrelProcellariidae +
+ mNonPetrelProcellariidae;
+ MOZ_ASSERT(procellariidae.size() == 5);
+
+ // Both procellariidae and mPetrels include GADFLY_PETREL and TRUE_PETREL
+ EnumSet<SeaBird> procellariiformes = mDiomedeidae + procellariidae +
+ mPetrels;
+ MOZ_ASSERT(procellariiformes.size() == 8);
+ }
+
+ void testRemoveFrom() {
+ EnumSet<SeaBird> likes = mPetrels;
+ likes -= TRUE_PETREL;
+ likes -= DIVING_PETREL;
+ MOZ_ASSERT(likes.size() == 2);
+ MOZ_ASSERT(likes.contains(GADFLY_PETREL));
+ MOZ_ASSERT(likes.contains(STORM_PETREL));
+ }
+
+ void testRemove() {
+ EnumSet<SeaBird> likes = mPetrels - TRUE_PETREL -
+ DIVING_PETREL;
+ MOZ_ASSERT(likes.size() == 2);
+ MOZ_ASSERT(likes.contains(GADFLY_PETREL));
+ MOZ_ASSERT(likes.contains(STORM_PETREL));
+ }
+
+ void testRemoveAllFrom() {
+ EnumSet<SeaBird> likes = mPetrels;
+ likes -= mPetrelProcellariidae;
+ MOZ_ASSERT(likes.size() == 2);
+ MOZ_ASSERT(likes.contains(DIVING_PETREL));
+ MOZ_ASSERT(likes.contains(STORM_PETREL));
+ }
+
+ void testRemoveAll() {
+ EnumSet<SeaBird> likes = mPetrels - mPetrelProcellariidae;
+ MOZ_ASSERT(likes.size() == 2);
+ MOZ_ASSERT(likes.contains(DIVING_PETREL));
+ MOZ_ASSERT(likes.contains(STORM_PETREL));
+ }
+
+ void testIntersect() {
+ EnumSet<SeaBird> likes = mPetrels;
+ likes &= mPetrelProcellariidae;
+ MOZ_ASSERT(likes.size() == 2);
+ MOZ_ASSERT(likes.contains(GADFLY_PETREL));
+ MOZ_ASSERT(likes.contains(TRUE_PETREL));
+ }
+
+ void testInsersection() {
+ EnumSet<SeaBird> likes = mPetrels & mPetrelProcellariidae;
+ MOZ_ASSERT(likes.size() == 2);
+ MOZ_ASSERT(likes.contains(GADFLY_PETREL));
+ MOZ_ASSERT(likes.contains(TRUE_PETREL));
+ }
+
+ void testEquality() {
+ EnumSet<SeaBird> likes = mPetrels & mPetrelProcellariidae;
+ MOZ_ASSERT(likes == EnumSet<SeaBird>(GADFLY_PETREL,
+ TRUE_PETREL));
+ }
+
+ void testDuplicates() {
+ EnumSet<SeaBird> likes = mPetrels;
+ likes += GADFLY_PETREL;
+ likes += TRUE_PETREL;
+ likes += DIVING_PETREL;
+ likes += STORM_PETREL;
+ MOZ_ASSERT(likes.size() == 4);
+ MOZ_ASSERT(likes == mPetrels);
+ }
+
+
+ EnumSet<SeaBird> mAlcidae;
+ EnumSet<SeaBird> mDiomedeidae;
+ EnumSet<SeaBird> mPetrelProcellariidae;
+ EnumSet<SeaBird> mNonPetrelProcellariidae;
+ EnumSet<SeaBird> mPetrels;
+};
+
+int main()
+{
+ EnumSetSuite suite;
+ suite.runTests();
+ return 0;
+}