blob: 0cd9bc53e079e7e18976262a0c372cd33859c078 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
* $Log$
* Revision 1.7 2004/09/08 13:57:05 peiyongz
* Apache License Version 2.0
*
* Revision 1.6 2003/05/30 13:08:26 gareth
* move over to macros for std:: and iostream/iostream.h issues.
*
* Revision 1.5 2002/02/01 22:46:28 peiyongz
* sane_include
*
* Revision 1.4 2000/03/02 19:55:48 roddey
* This checkin includes many changes done while waiting for the
* 1.1.0 code to be finished. I can't list them all here, but a list is
* available elsewhere.
*
* Revision 1.3 2000/02/06 07:48:39 rahulj
* Year 2K copyright swat.
*
* Revision 1.2 2000/01/19 00:59:06 roddey
* Get rid of dependence on old utils output streams.
*
* Revision 1.1.1.1 1999/11/09 01:01:47 twl
* Initial checkin
*
* Revision 1.2 1999/11/08 20:42:26 rahul
* Swat for adding in Product name and CVS comment log variable.
*
*/
// ---------------------------------------------------------------------------
// XML4C2 Includes
// ---------------------------------------------------------------------------
#include "CoreTests.hpp"
#include <xercesc/util/BitSet.hpp>
// ---------------------------------------------------------------------------
// Local testing methods
// ---------------------------------------------------------------------------
static bool basicTests()
{
//
// Create a bitset with 32 bits. We just happen to know that this is
// the unit of expansion, so it should come back with exactly that
// number of bits of size.
//
BitSet setTest(32);
if (setTest.size() != 32)
{
XERCES_STD_QUALIFIER wcout << L" Ctor did not create set of correct size"
<< XERCES_STD_QUALIFIER endl;
return false;
}
//
// Check the value of all of the bits and make sure that they all come
// back zero.
//
const unsigned int count = setTest.size();
unsigned int index;
for (index = 0; index < count; index++)
{
if (setTest.get(index))
{
XERCES_STD_QUALIFIER wcout << L" A bit's initial value was not zero"
<< XERCES_STD_QUALIFIER endl;
return false;
}
}
// Make sure that allAreCleared() agrees
if (!setTest.allAreCleared())
{
XERCES_STD_QUALIFIER wcout << L" allAreCleared() disagrees with individual bit gets"
<< XERCES_STD_QUALIFIER endl;
return false;
}
// Set and clear each bit and make sure that they come back right
for (index = 0; index < count; index++)
{
setTest.set(index);
if (!setTest.get(index))
{
XERCES_STD_QUALIFIER wcout << L" Bit was set but get returned false"
<< XERCES_STD_QUALIFIER endl;
return false;
}
setTest.clear(index);
if (setTest.get(index))
{
XERCES_STD_QUALIFIER wcout << L" Bit was cleared but get returned true"
<< XERCES_STD_QUALIFIER endl;
return false;
}
}
// And once more make sure they are all zero
for (index = 0; index < count; index++)
{
if (setTest.get(index))
{
XERCES_STD_QUALIFIER wcout << L" A bit remained set after clearing"
<< XERCES_STD_QUALIFIER endl;
return false;
}
}
//
// Set some bits, then copy construct another bitset from this one. Then
// see if they come out equal.
//
setTest.set(1);
setTest.set(16);
setTest.set(20);
setTest.set(24);
BitSet setTest2(setTest);
if (!setTest.equals(setTest2))
{
XERCES_STD_QUALIFIER wcout << L" Copy ctor did not create equal sets"
<< XERCES_STD_QUALIFIER endl;
return false;
}
// Clear all bits of the copy and make sure they are all cleared
setTest2.clearAll();
for (index = 0; index < count; index++)
{
if (setTest2.get(index))
{
XERCES_STD_QUALIFIER wcout << L" clearAll() did not clear all bits"
<< XERCES_STD_QUALIFIER endl;
return false;
}
}
// Set a bit beyond the current size
setTest2.set(32);
// Make sure it expanded
if (setTest2.size() != 64)
{
XERCES_STD_QUALIFIER wcout << L" Set of bit beyond size did not expand"
<< XERCES_STD_QUALIFIER endl;
return false;
}
// Set all the bits
for (index = 0; index < count; index++)
setTest.set(index);
// Make sure that allAreSet() sees them all set
if (!setTest.allAreSet())
{
XERCES_STD_QUALIFIER wcout << L" After setting all bits, allAreSet() returned false"
<< XERCES_STD_QUALIFIER endl;
return false;
}
return true;
}
static bool bitopsTests()
{
// Create a bit set to test
BitSet setTest(48);
// Set some bits
setTest.set(1);
setTest.set(10);
setTest.set(16);
setTest.set(21);
setTest.set(33);
setTest.set(41);
// Create another set to do ops on
BitSet setTest2(48);
// Or with the new set
setTest2.orWith(setTest);
// They should be equal now
if (!setTest.equals(setTest2))
{
XERCES_STD_QUALIFIER wcout << L" OR of set with empty set did not create equal sets"
<< XERCES_STD_QUALIFIER endl;
return false;
}
// Xor with original which should get back an empty set
setTest2.xorWith(setTest);
if (!setTest2.allAreCleared())
{
XERCES_STD_QUALIFIER wcout << L" XOR against original set did not get back original"
<< XERCES_STD_QUALIFIER endl;
return false;
}
// And them, which should have no effect
setTest2.andWith(setTest);
if (!setTest2.allAreCleared())
{
XERCES_STD_QUALIFIER wcout << L" AND against empty set changed bits" << XERCES_STD_QUALIFIER endl;
return false;
}
return true;
}
// ---------------------------------------------------------------------------
// Test entry point
// ---------------------------------------------------------------------------
bool testBitSet()
{
XERCES_STD_QUALIFIER wcout << L"----------------------------------\n"
<< L"Testing BitSet class\n"
<< L"----------------------------------" << XERCES_STD_QUALIFIER endl;
bool retVal = true;
try
{
XERCES_STD_QUALIFIER wcout << L"Testing basic BitSet methods" << XERCES_STD_QUALIFIER endl;
if (!basicTests())
{
XERCES_STD_QUALIFIER wcout << L"Bitset basic test methods failed" << XERCES_STD_QUALIFIER endl;
retVal = false;
}
else
{
XERCES_STD_QUALIFIER wcout << L"Bitset basic tests passed" << XERCES_STD_QUALIFIER endl;
}
XERCES_STD_QUALIFIER wcout << XERCES_STD_QUALIFIER endl;
XERCES_STD_QUALIFIER wcout << L"Testing BitSet logical bit ops methods" << XERCES_STD_QUALIFIER endl;
if (!bitopsTests())
{
XERCES_STD_QUALIFIER wcout << L"Bitset logical bit ops failed" << XERCES_STD_QUALIFIER endl;
retVal = false;
}
else
{
XERCES_STD_QUALIFIER wcout << L"Bitset logical bit ops passed" << XERCES_STD_QUALIFIER endl;
}
XERCES_STD_QUALIFIER wcout << XERCES_STD_QUALIFIER endl;
}
catch(const XMLException& toCatch)
{
XERCES_STD_QUALIFIER wcout << L" ERROR: Unexpected exception!\n Msg: "
<< toCatch.getMessage() << XERCES_STD_QUALIFIER endl;
return false;
}
return retVal;
}