michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this file, michael@0: * You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "mozilla/EnumSet.h" michael@0: michael@0: using namespace mozilla; michael@0: michael@0: enum SeaBird { michael@0: PENGUIN, michael@0: ALBATROSS, michael@0: FULMAR, michael@0: PRION, michael@0: SHEARWATER, michael@0: GADFLY_PETREL, michael@0: TRUE_PETREL, michael@0: DIVING_PETREL, michael@0: STORM_PETREL, michael@0: PELICAN, michael@0: GANNET, michael@0: BOOBY, michael@0: CORMORANT, michael@0: FRIGATEBIRD, michael@0: TROPICBIRD, michael@0: SKUA, michael@0: GULL, michael@0: TERN, michael@0: SKIMMER, michael@0: AUK michael@0: }; michael@0: michael@0: class EnumSetSuite { michael@0: public: michael@0: EnumSetSuite() michael@0: : mAlcidae(), michael@0: mDiomedeidae(ALBATROSS), michael@0: mPetrelProcellariidae(GADFLY_PETREL, TRUE_PETREL), michael@0: mNonPetrelProcellariidae(FULMAR, PRION, SHEARWATER), michael@0: mPetrels(GADFLY_PETREL, TRUE_PETREL, DIVING_PETREL, STORM_PETREL) michael@0: { } michael@0: michael@0: void runTests() { michael@0: testSize(); michael@0: testContains(); michael@0: testAddTo(); michael@0: testAdd(); michael@0: testAddAll(); michael@0: testUnion(); michael@0: testRemoveFrom(); michael@0: testRemove(); michael@0: testRemoveAllFrom(); michael@0: testRemoveAll(); michael@0: testIntersect(); michael@0: testInsersection(); michael@0: testEquality(); michael@0: testDuplicates(); michael@0: } michael@0: michael@0: private: michael@0: void testSize() { michael@0: MOZ_RELEASE_ASSERT(mAlcidae.size() == 0); michael@0: MOZ_RELEASE_ASSERT(mDiomedeidae.size() == 1); michael@0: MOZ_RELEASE_ASSERT(mPetrelProcellariidae.size() == 2); michael@0: MOZ_RELEASE_ASSERT(mNonPetrelProcellariidae.size() == 3); michael@0: MOZ_RELEASE_ASSERT(mPetrels.size() == 4); michael@0: } michael@0: michael@0: void testContains() { michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(PENGUIN)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(ALBATROSS)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(FULMAR)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(PRION)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(SHEARWATER)); michael@0: MOZ_RELEASE_ASSERT(mPetrels.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(mPetrels.contains(TRUE_PETREL)); michael@0: MOZ_RELEASE_ASSERT(mPetrels.contains(DIVING_PETREL)); michael@0: MOZ_RELEASE_ASSERT(mPetrels.contains(STORM_PETREL)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(PELICAN)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(GANNET)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(BOOBY)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(CORMORANT)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(FRIGATEBIRD)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(TROPICBIRD)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(SKUA)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(GULL)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(TERN)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(SKIMMER)); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(AUK)); michael@0: } michael@0: michael@0: void testCopy() { michael@0: EnumSet likes = mPetrels; michael@0: likes -= TRUE_PETREL; michael@0: MOZ_RELEASE_ASSERT(mPetrels.size() == 4); michael@0: MOZ_RELEASE_ASSERT(mPetrels.contains(TRUE_PETREL)); michael@0: michael@0: MOZ_RELEASE_ASSERT(likes.size() == 3); michael@0: MOZ_RELEASE_ASSERT(likes.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(DIVING_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(STORM_PETREL)); michael@0: } michael@0: michael@0: void testAddTo() { michael@0: EnumSet seen = mPetrels; michael@0: seen += CORMORANT; michael@0: seen += TRUE_PETREL; michael@0: MOZ_RELEASE_ASSERT(mPetrels.size() == 4); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(CORMORANT)); michael@0: MOZ_RELEASE_ASSERT(seen.size() == 5); michael@0: MOZ_RELEASE_ASSERT(seen.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(TRUE_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(DIVING_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(STORM_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(CORMORANT)); michael@0: } michael@0: michael@0: void testAdd() { michael@0: EnumSet seen = mPetrels + CORMORANT + michael@0: STORM_PETREL; michael@0: MOZ_RELEASE_ASSERT(mPetrels.size() == 4); michael@0: MOZ_RELEASE_ASSERT(!mPetrels.contains(CORMORANT)); michael@0: MOZ_RELEASE_ASSERT(seen.size() == 5); michael@0: MOZ_RELEASE_ASSERT(seen.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(TRUE_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(DIVING_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(STORM_PETREL)); michael@0: MOZ_RELEASE_ASSERT(seen.contains(CORMORANT)); michael@0: } michael@0: michael@0: void testAddAll() { michael@0: EnumSet procellariidae; michael@0: procellariidae += mPetrelProcellariidae; michael@0: procellariidae += mNonPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(procellariidae.size() == 5); michael@0: michael@0: // Both procellariidae and mPetrels include GADFLY_PERTEL and TRUE_PETREL michael@0: EnumSet procellariiformes; michael@0: procellariiformes += mDiomedeidae; michael@0: procellariiformes += procellariidae; michael@0: procellariiformes += mPetrels; michael@0: MOZ_RELEASE_ASSERT(procellariiformes.size() == 8); michael@0: } michael@0: michael@0: void testUnion() { michael@0: EnumSet procellariidae = mPetrelProcellariidae + michael@0: mNonPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(procellariidae.size() == 5); michael@0: michael@0: // Both procellariidae and mPetrels include GADFLY_PETREL and TRUE_PETREL michael@0: EnumSet procellariiformes = mDiomedeidae + procellariidae + michael@0: mPetrels; michael@0: MOZ_RELEASE_ASSERT(procellariiformes.size() == 8); michael@0: } michael@0: michael@0: void testRemoveFrom() { michael@0: EnumSet likes = mPetrels; michael@0: likes -= TRUE_PETREL; michael@0: likes -= DIVING_PETREL; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 2); michael@0: MOZ_RELEASE_ASSERT(likes.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(STORM_PETREL)); michael@0: } michael@0: michael@0: void testRemove() { michael@0: EnumSet likes = mPetrels - TRUE_PETREL - michael@0: DIVING_PETREL; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 2); michael@0: MOZ_RELEASE_ASSERT(likes.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(STORM_PETREL)); michael@0: } michael@0: michael@0: void testRemoveAllFrom() { michael@0: EnumSet likes = mPetrels; michael@0: likes -= mPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 2); michael@0: MOZ_RELEASE_ASSERT(likes.contains(DIVING_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(STORM_PETREL)); michael@0: } michael@0: michael@0: void testRemoveAll() { michael@0: EnumSet likes = mPetrels - mPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 2); michael@0: MOZ_RELEASE_ASSERT(likes.contains(DIVING_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(STORM_PETREL)); michael@0: } michael@0: michael@0: void testIntersect() { michael@0: EnumSet likes = mPetrels; michael@0: likes &= mPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 2); michael@0: MOZ_RELEASE_ASSERT(likes.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(TRUE_PETREL)); michael@0: } michael@0: michael@0: void testInsersection() { michael@0: EnumSet likes = mPetrels & mPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 2); michael@0: MOZ_RELEASE_ASSERT(likes.contains(GADFLY_PETREL)); michael@0: MOZ_RELEASE_ASSERT(likes.contains(TRUE_PETREL)); michael@0: } michael@0: michael@0: void testEquality() { michael@0: EnumSet likes = mPetrels & mPetrelProcellariidae; michael@0: MOZ_RELEASE_ASSERT(likes == EnumSet(GADFLY_PETREL, michael@0: TRUE_PETREL)); michael@0: } michael@0: michael@0: void testDuplicates() { michael@0: EnumSet likes = mPetrels; michael@0: likes += GADFLY_PETREL; michael@0: likes += TRUE_PETREL; michael@0: likes += DIVING_PETREL; michael@0: likes += STORM_PETREL; michael@0: MOZ_RELEASE_ASSERT(likes.size() == 4); michael@0: MOZ_RELEASE_ASSERT(likes == mPetrels); michael@0: } michael@0: michael@0: michael@0: EnumSet mAlcidae; michael@0: EnumSet mDiomedeidae; michael@0: EnumSet mPetrelProcellariidae; michael@0: EnumSet mNonPetrelProcellariidae; michael@0: EnumSet mPetrels; michael@0: }; michael@0: michael@0: int main() michael@0: { michael@0: EnumSetSuite suite; michael@0: suite.runTests(); michael@0: return 0; michael@0: }