COSC-4P82-Final-Project/lib/beagle-3.0.3/tests/Common/BeagleTest.cpp

260 lines
5.7 KiB
C++
Raw Permalink Normal View History

2024-04-01 00:01:49 -04:00
#include "Test.hpp"
using namespace Beagle;
using namespace Test;
using namespace std;
// ********** STAGE ONE *****************
// Set objects to specific values
void
BeagleTest::setSystem(System::Handle inSystem)
{
if (mSystem!=NULL) {
Beagle_LogBasicM(
mSystem->getLogger(),
"setSystem","Beagle::Test::BeagleTest",
"Warning: Called setSystem() when a system already exists"
);
}
mSystem = inSystem;
}
void
BeagleTest::setVivarium( Vivarium::Handle inVivarium )
{
if (mSystem==NULL) createSystem();
if (mVivarium!=NULL) {
Beagle_LogBasicM(
mSystem->getLogger(),
"setVivarium","Beagle::Test::BeagleTest",
"Warning: Called setVivarium() when a vivarium already exists"
);
}
mVivarium = inVivarium;
}
void
BeagleTest::setInitializationOp( InitializationOp::Handle inInitOp )
{
if (mSystem==NULL) createSystem();
if (mInitOp!=NULL) {
Beagle_LogBasicM(
mSystem->getLogger(),
"setInitializationOp","Beagle::Test::BeagleTest",
"Warning: Called setInitializationOp() when an initialization operators already exists"
);
}
mInitOp = inInitOp;
}
// ********** STAGE TWO *****************
// Get the object that will be required
System::Handle
BeagleTest::requestSystem()
{
if (mSystem==NULL) {
createSystem();
}
return mSystem;
}
Context::Handle
BeagleTest::requestContext()
{
if (mContext==NULL) {
createContext();
}
return mContext;
}
Vivarium::Handle
BeagleTest::requestVivarium()
{
if (mVivarium==NULL) {
createVivarium();
}
return mVivarium;
}
void
BeagleTest::createSystem()
{
// Check that the system doesn't already exist
if (mSystem!=NULL) {
Beagle_LogBasicM(
mSystem->getLogger(),
"createSystem","Beagle::Test::BeagleTest",
"Warning: Called createSystem() when the system already exists"
);
return;
}
// Create a new system
mSystem = new Beagle::System;
}
void
BeagleTest::createContext()
{
// Ensure that a system exists
if (mSystem==NULL) createSystem();
// Check that context doesn't already exist
if (mContext!=NULL) {
Beagle_LogBasicM(
mSystem->getLogger(),
"createContext","Beagle::Test::BeagleTest",
"Warning: Called createContext() when a context already exists"
);
return;
}
// Create context
Beagle_LogDebugM(
mSystem->getLogger(),
"createContext","Beagle::Test::BeagleTest",
"Creating a context"
);
mContext = castHandleT<Context>(mSystem->getContextAllocator().allocate());
mContext->setSystemHandle( mSystem );
}
void
BeagleTest::createVivarium()
{
// Ensure that a system exists
if (mSystem==NULL) createSystem();
// Ensure that a context exists
if (mContext==NULL) createContext();
// Check that a vivarium doesn't already exist
if (mVivarium!=NULL) {
Beagle_LogBasicM(
mSystem->getLogger(),
"createVivarium","Beagle::Test::BeagleTest",
"Warning: Called createVivarium() when a vivarium already exists"
);
return;
}
// Create a vivarium
Beagle_LogDebugM(
mSystem->getLogger(),
"createVivarium","Beagle::Test::BeagleTest",
"Creating a vivarium"
);
mVivarium = new Vivarium(new GenotypeString::Alloc, new FitnessSimple::Alloc);
// Seeing we're defaulting to "GenotypeString", use the default
// initialization operator
mInitOp = new InitializationStringOp;
}
// ********** STAGE THREE *****************
// Initialize everything
// No objects are valid for use until after the class has been initialized.
// The idea is to "get" each object and then call initialize().
void
BeagleTest::initialize(int &ioArgc, char **ioArgv, bool doPostInit)
{
if (mSystem==NULL) createSystem();
// Add population size parameter
if(mSystem->getRegister().isRegistered("ec.pop.size")) {
mPopSize = castHandleT<UIntArray>(mSystem->getRegister().getEntry("ec.pop.size"));
} else {
mPopSize = new UIntArray(1,10);
string lLongDescrip("Number of demes and size of each deme of the population. ");
lLongDescrip += "The format of an UIntArray is S1,S2,...,Sn, where Si is the ith value. ";
lLongDescrip += "The size of the UIntArray is the number of demes present in the ";
lLongDescrip += "vivarium, while each value of the vector is the size of the corresponding ";
lLongDescrip += "deme.";
Register::Description lDescription(
"Vivarium and demes sizes",
"UIntArray",
"10",
lLongDescrip
);
mSystem->getRegister().addEntry("ec.pop.size", mPopSize, lDescription);
}
// Initialize system
mSystem->initialize(ioArgc, ioArgv);
// Initialize the operators
if (mVivarium!=NULL) {
Beagle_NonNullPointerAssertM( mInitOp );
mInitOp->initialize( *mSystem );
}
// Consider an automatic call to postInit()
if (doPostInit) postInit();
}
void
BeagleTest::postInit()
{
// postInit the operators
if (mVivarium!=NULL) {
Beagle_NonNullPointerAssertM( mInitOp );
mInitOp->postInit( *mSystem );
}
// postInit the System
Beagle_NonNullPointerAssertM( mSystem );
mSystem->postInit();
// Check if the vivarium exists
if (mVivarium!=NULL) {
// Fill the vivarium
Beagle_NonNullPointerAssertM( mPopSize );
mVivarium->resize( mPopSize->size() );
Beagle_NonNullPointerAssertM( mInitOp );
Beagle_NonNullPointerAssertM( mContext );
for (unsigned int i=0; i<mVivarium->size(); i++) {
mContext->setDemeIndex( i );
mContext->setDemeHandle( mVivarium->at(i) );
mInitOp->operate( *(mVivarium->at(i)), *mContext );
}
}
}
// ********** STAGE FOUR *****************
// Get objects after initialization
Deme::Handle
BeagleTest::getDeme(unsigned int inIndex)
{
if (mVivarium==NULL) {
createVivarium();
}
Beagle_AssertM( inIndex < mVivarium->size() );
return mVivarium->at(inIndex);
}