void
LazyOutputManagerTest::testLazyCancel(){
  LazyOutputManager *toCheck = dynamic_cast<LazyOutputManager *>( toTest );
  CPPUNIT_ASSERT( toTest != 0 );
  LOMSimMgr *simMgr = dynamic_cast<LOMSimMgr *>(getSimManager());
  CPPUNIT_ASSERT( simMgr != 0 );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 0 );
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 0);

  //Insert events into the output manager.
  toTest->insert(new UnitTestEvent( *new IntVTime( 1 ), getSimObj1ID(), *new IntVTime( 0 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 1 ), getSimObj1ID(), *new IntVTime( 0 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 1 ), getSimObj1ID(), *new IntVTime( 0 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 2 ), getSimObj1ID(), *new IntVTime( 1 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 3 ), getSimObj1ID(), *new IntVTime( 2 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 3 ), getSimObj1ID(), *new IntVTime( 2 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 5 ), getSimObj1ID(), *new IntVTime( 4 ) ));
  toTest->insert(new UnitTestEvent( *new IntVTime( 6 ), getSimObj1ID(), *new IntVTime( 5 ) ));

  //Rollback the output manager and check the lazy queue.
  toTest->rollback( getSimObj1(), IntVTime(2) );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 0 );
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 4 );
  CPPUNIT_ASSERT( getNumLazyCancelEvents( toTest, *(getSimObj1()->getObjectID()) ) == 7 );

  //Test the case where all events are regenerated.
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 3 ), getSimObj1ID(), *new IntVTime( 2 ) )));
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 3 ), getSimObj1ID(), *new IntVTime( 2 ) )));
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) )));
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) )));
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) )));
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 5 ), getSimObj1ID(), *new IntVTime( 4 ) )));
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 6 ), getSimObj1ID(), *new IntVTime( 5 ) )));
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 11 );
  CPPUNIT_ASSERT( getNumLazyCancelEvents( toTest, *(getSimObj1()->getObjectID()) ) == 0 );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 0 );
  toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 7 ), getSimObj1ID(), *new IntVTime( 6 ) ));

  //Test the case where some events are not regenerated.
  toTest->rollback( getSimObj1(), IntVTime(2) );
  CPPUNIT_ASSERT( toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 4 ), getSimObj1ID(), *new IntVTime( 3 ) )));
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 5 );
  CPPUNIT_ASSERT( getNumLazyCancelEvents( toTest, *(getSimObj1()->getObjectID()) ) == 5 );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 2 );

  CPPUNIT_ASSERT( !toCheck->lazyCancel(new UnitTestEvent( *new IntVTime( 8 ), getSimObj1ID(), *new IntVTime( 7 ) )));
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 6 );
  CPPUNIT_ASSERT( getNumLazyCancelEvents( toTest, *(getSimObj1()->getObjectID()) ) == 0 );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 7 );
}
void
SchedulingManagerTest::testGetNextEvent( SchedulingManager *toTest ) {
    CPPUNIT_ASSERT( toTest != 0 );
    doDefaultInsert( getSimManager()->getEventSetManager() );
    const Event *event1 = toTest->peekNextEvent();
    CPPUNIT_ASSERT( event1 != 0 );
    CPPUNIT_ASSERT( toTest->getLastEventScheduledTime() == IntVTime(0) );
    CPPUNIT_ASSERT( event1 == getSimManager()->getEventSetManager()->getEvent( getSimObj1() ) );
    const Event *event2 = toTest->peekNextEvent();
    CPPUNIT_ASSERT( event2 != 0 );
    CPPUNIT_ASSERT( toTest->getLastEventScheduledTime() == IntVTime(0) );
    CPPUNIT_ASSERT( event2 == getSimManager()->getEventSetManager()->getEvent( getSimObj1() ) );
    const Event *event3 = toTest->peekNextEvent();
    CPPUNIT_ASSERT( event3 != 0 );
    CPPUNIT_ASSERT( toTest->getLastEventScheduledTime() == IntVTime(0) );
    CPPUNIT_ASSERT( event3 == getSimManager()->getEventSetManager()->getEvent( getSimObj1() ) );
    const Event *event4 = toTest->peekNextEvent();
    CPPUNIT_ASSERT( event4 != 0 );
    CPPUNIT_ASSERT( toTest->getLastEventScheduledTime() == IntVTime(1) );
    CPPUNIT_ASSERT( event4 == getSimManager()->getEventSetManager()->getEvent( getSimObj1() ) );

    checkDefaultEvents( event1, event2, event3, event4 );
}
void
LazyOutputManagerTest::testRollback(){
  CPPUNIT_ASSERT( toTest != 0 );
  LOMSimMgr *simMgr = dynamic_cast<LOMSimMgr *>(getSimManager());
  CPPUNIT_ASSERT( simMgr != 0 );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 0 );

  doDefaultInsert( toTest );
  toTest->rollback( getSimObj1(), IntVTime(1) );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 0 );
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 4 );
  CPPUNIT_ASSERT( getNumLazyCancelEvents( toTest, *(getSimObj1()->getObjectID()) ) == 0 );
  
  toTest->rollback( getSimObj1(), IntVTime(0) );
  CPPUNIT_ASSERT( simMgr->negativeCount() == 0 );
  CPPUNIT_ASSERT( getNumElements( toTest, *(getSimObj1()->getObjectID()) ) == 0 );
  CPPUNIT_ASSERT( getNumLazyCancelEvents( toTest, *(getSimObj1()->getObjectID()) ) == 4 );
}
void
CostAdaptiveStateManagerTest::setUp() {
    WarpedUnitTest::setUp();
    toTest = new CASMTestClass(getSimManager());
}
void 
LazyOutputManagerTest::setUp(){
  OutputManagerTest::setUp();
  toTest = new LazyOutputManagerTestClass( getSimManager() );
}
void
AdaptiveStateManagerBaseTest::setUp() {
    WarpedUnitTest::setUp();
    toTest = new ASMBTestClass(getSimManager());
}