diff options
Diffstat (limited to 'mfbt/tests/TestEnumSet.cpp')
-rw-r--r-- | mfbt/tests/TestEnumSet.cpp | 232 |
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; +} |