#include "Counter.h"
#include <new>
#include <cstdlib>
#include <cassert>
using namespace std;
int Counter::sExceptionPointCount = 0;
int Counter::sThrowCount = -1;
bool Counter::sDontThrow = false;
int Counter::sNewCount = 0;
int Counter::sPassCount = 0;
int Counter::sFailCount = 0;
ostream* Counter::mOs = &cout;
void Counter::CouldThrow() throw ( TestException )
{
if( !sDontThrow &&
++sExceptionPointCount == sThrowCount )
{
throw TestException();
}
}
void Counter::SetThrowCount( int inCount ) throw()
{
sExceptionPointCount = 0;
sThrowCount = inCount;
sDontThrow = false;
}
void Counter::DontThrow() throw()
{
sDontThrow = false;
}
bool Counter::HasThrown() throw()
{
return sExceptionPointCount >= sThrowCount;
}
int Counter::GetAllocationCount() throw()
{
return sNewCount;
}
void Counter::Pass( const char* testName ) throw()
{
++sPassCount;
//(*mOs) << " Passed test " << testName << endl;
}
void Counter::Fail( const char* testName ) throw()
{
++sFailCount;
(*mOs) << "**** Failed test " << testName
<< " at exception count " << sThrowCount
<< "." << endl;
}
void Counter::Test( bool result, const char* testName ) throw()
{
if( result ) {
Pass( testName );
} else {
Fail( testName );
}
}
void Counter::PrintTestSummary()
{
(*mOs) << "Test Results:" << std::endl;
(*mOs) << "Total Tests: " << sPassCount + sFailCount
<< std::endl;
(*mOs) << "Passed : " << sPassCount << std::endl;
(*mOs) << "Failed : " << sFailCount << std::endl;
}
// not shown: debugging
// memory manager -- available in
// online version of this listing
// ...
End of Listing