? / professional-program-19-ObjectPoolTest-ObjectPoolTest.c
// export LD_LIBRARY_PATH=/usr/local/lib // g++ -I/usr/local/include/cppunit -L/usr/local/lib -lcppunit -ldl *.cpp //#include <ObjectPool.h> include <ObjectPool.cpp> include <Serial.h> include <ObjectPoolTest.h> include <cppunit/TestAssert.h> include <cppunit/TestCaller.h> include <cppunit/TestResult.h> include <cppunit/ui/text/TestRunner.h> include <iostream> include <set> void ObjectPoolTest::setUp() { } void ObjectPoolTest::tearDown() { } void ObjectPoolTest::testCreation() { ObjectPool<Serial> myPool; } void ObjectPoolTest::testInvalidChunkSize() { bool caughtException = false; try { ObjectPool<Serial> myPool(0); } catch (const invalid_argument& ex) { // ok. we were expecting an exception caughtException = true; } CPPUNIT_ASSERT(caughtException); } void ObjectPoolTest::testAcquire() { ObjectPool<Serial> myPool; Serial& serial = myPool.acquireObject(); CPPUNIT_ASSERT(serial.getSerialNumber() >= 0); } void ObjectPoolTest::testExclusivity() { const int poolSize = 5; ObjectPool<Serial> myPool(poolSize); set<int> seenSerials; for (int i = 0; i < poolSize; i++) { Serial& nextSerial = myPool.acquireObject(); // assert that this number hasn't been seen before CPPUNIT_ASSERT(seenSerials.find(nextSerial.getSerialNumber()) == seenSerials.end()); // add this number to the set seenSerials.insert(nextSerial.getSerialNumber()); } } void ObjectPoolTest::testRelease() { const int poolSize = 5; ObjectPool<Serial> myPool(poolSize); Serial& originalSerial = myPool.acquireObject(); int originalSerialNumber = originalSerial.getSerialNumber(); // return the original object to the pool myPool.releaseObject(originalSerial); // now make sure that the original object is recycled before // a new chunk is created bool wasRecycled = false; for (int i = 0; i < poolSize; i++) { Serial& nextSerial = myPool.acquireObject(); if (nextSerial.getSerialNumber() == originalSerialNumber) { wasRecycled = true; break; } } CPPUNIT_ASSERT(wasRecycled); } void ObjectPoolTest::testSimple() { CPPUNIT_ASSERT(1 != 0); } CppUnit::Test* ObjectPoolTest::suite() { CppUnit::TestSuite *suiteOfTests = new CppUnit::TestSuite( "ObjectPoolTest" ); suiteOfTests->addTest( new CppUnit::TestCaller<ObjectPoolTest>( "testSimple", &ObjectPoolTest::testSimple ) ); suiteOfTests->addTest( new CppUnit::TestCaller<ObjectPoolTest>( "testCreation", &ObjectPoolTest::testCreation ) ); suiteOfTests->addTest( new CppUnit::TestCaller<ObjectPoolTest>( "testInvalidChunkSize", &ObjectPoolTest::testInvalidChunkSize ) ); suiteOfTests->addTest( new CppUnit::TestCaller<ObjectPoolTest>( "testAcquire", &ObjectPoolTest::testAcquire ) ); suiteOfTests->addTest( new CppUnit::TestCaller<ObjectPoolTest>( "testExclusivity", &ObjectPoolTest::testExclusivity ) ); suiteOfTests->addTest( new CppUnit::TestCaller<ObjectPoolTest>( "testRelease", &ObjectPoolTest::testRelease ) ); return suiteOfTests; } int main() { CppUnit::TextUi::TestRunner runner; runner.addTest( ObjectPoolTest::suite() ); runner.run(); return 0; }
(C) Æliens 20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.