psana/test/EventLoopTest.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: EventLoopTest.cpp 7715 2014-02-28 03:30:21Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Test suite case for the EventLoopTest.
00007 //
00008 //------------------------------------------------------------------------
00009 
00010 //---------------
00011 // C++ Headers --
00012 //---------------
00013 #include <boost/make_shared.hpp>
00014 #include <algorithm>
00015 #include <iterator>
00016 #include <iostream>
00017 
00018 //-------------------------------
00019 // Collaborating Class Headers --
00020 //-------------------------------
00021 #include "psana/EventLoop.h"
00022 #include "psana/InputModule.h"
00023 #include "PSEnv/Env.h"
00024 
00025 using namespace psana ;
00026 
00027 #define BOOST_TEST_MODULE EventLoopTest
00028 #include <boost/test/included/unit_test.hpp>
00029 
00030 /**
00031  * Simple test suite for module EventLoopTest.
00032  * See http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/index.html
00033  */
00034 
00035 namespace {
00036 
00037 // Implementation of the InputModulle which generates predefined sequences of events
00038 class TestInputModule: public InputModule {
00039 public:
00040   
00041   TestInputModule(const InputModule::Status states[], int nstates) : InputModule("TestInputModule")
00042   {
00043     std::copy(states, states+nstates, std::back_inserter(m_states));
00044   }
00045   
00046   virtual void beginJob(Event& evt, Env& env) {}
00047 
00048   virtual Status event(Event& evt, Env& env) {
00049     InputModule::Status state = InputModule::Stop;
00050     if (not m_states.empty()) {
00051       state = m_states.front();
00052       m_states.pop_front();
00053     }
00054     return state;
00055   }
00056   
00057   virtual void endJob(Event& evt, Env& env) {}
00058 
00059 private:
00060   
00061   std::deque<psana::InputModule::Status> m_states;  
00062 };
00063 
00064 struct Fixture {
00065   
00066   Fixture(const InputModule::Status states[], int nstates) 
00067   {
00068     boost::shared_ptr<AliasMap> amap = boost::make_shared<AliasMap>();
00069     boost::shared_ptr<PSEnv::IExpNameProvider> expNameProvider;
00070     boost::shared_ptr<PSEnv::Env> env = boost::make_shared<PSEnv::Env>("", expNameProvider, "", amap, 0);
00071     boost::shared_ptr<InputModule> input = boost::make_shared<TestInputModule>(states, nstates);
00072     const std::vector<boost::shared_ptr<Module> > modules;
00073     evtLoop = boost::make_shared<EventLoop>(input, modules, env);
00074   }
00075   
00076   boost::shared_ptr<EventLoop> evtLoop;
00077 };
00078 
00079 
00080 }
00081 
00082 // ==============================================================
00083 
00084 BOOST_AUTO_TEST_CASE( test_1 )
00085 {
00086   InputModule::Status states[] = {
00087       InputModule::BeginRun,
00088       InputModule::BeginCalibCycle,
00089       InputModule::DoEvent,
00090       InputModule::DoEvent,
00091       InputModule::EndCalibCycle,
00092       InputModule::EndRun,
00093   };
00094 
00095   Fixture f(states, sizeof states/sizeof states[0]);
00096 
00097   EventLoop::value_type evt;
00098   
00099   evt = f.evtLoop->next();
00100   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginJob);
00101   evt = f.evtLoop->next();
00102   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginRun);
00103   evt = f.evtLoop->next();
00104   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginCalibCycle);
00105   evt = f.evtLoop->next();
00106   BOOST_CHECK_EQUAL(evt.first, EventLoop::Event);
00107   evt = f.evtLoop->next();
00108   BOOST_CHECK_EQUAL(evt.first, EventLoop::Event);
00109   evt = f.evtLoop->next();
00110   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndCalibCycle);
00111   evt = f.evtLoop->next();
00112   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndRun);
00113   evt = f.evtLoop->next();
00114   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndJob);
00115   evt = f.evtLoop->next();
00116   BOOST_CHECK_EQUAL(evt.first, EventLoop::None);
00117 }
00118 
00119 // ==============================================================
00120 
00121 BOOST_AUTO_TEST_CASE( test_2 )
00122 {
00123   InputModule::Status states[] = {
00124       InputModule::BeginRun,
00125       InputModule::BeginCalibCycle,
00126       InputModule::DoEvent,
00127       InputModule::DoEvent,
00128       InputModule::EndCalibCycle,
00129       InputModule::EndRun,
00130   };
00131 
00132   Fixture f(states, sizeof states/sizeof states[0]);
00133 
00134   EventLoop::value_type evt;
00135   
00136   evt = f.evtLoop->next();
00137   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginJob);
00138   f.evtLoop->putback(evt);
00139   evt = f.evtLoop->next();
00140   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginJob);
00141 
00142   evt = f.evtLoop->next();
00143   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginRun);
00144   f.evtLoop->putback(evt);
00145   evt = f.evtLoop->next();
00146   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginRun);
00147 
00148   evt = f.evtLoop->next();
00149   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginCalibCycle);
00150   f.evtLoop->putback(evt);
00151   evt = f.evtLoop->next();
00152   BOOST_CHECK_EQUAL(evt.first, EventLoop::BeginCalibCycle);
00153 
00154   evt = f.evtLoop->next();
00155   BOOST_CHECK_EQUAL(evt.first, EventLoop::Event);
00156   f.evtLoop->putback(evt);
00157   evt = f.evtLoop->next();
00158   BOOST_CHECK_EQUAL(evt.first, EventLoop::Event);
00159 
00160   evt = f.evtLoop->next();
00161   BOOST_CHECK_EQUAL(evt.first, EventLoop::Event);
00162   f.evtLoop->putback(evt);
00163   evt = f.evtLoop->next();
00164   BOOST_CHECK_EQUAL(evt.first, EventLoop::Event);
00165 
00166   evt = f.evtLoop->next();
00167   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndCalibCycle);
00168   f.evtLoop->putback(evt);
00169   evt = f.evtLoop->next();
00170   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndCalibCycle);
00171 
00172   evt = f.evtLoop->next();
00173   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndRun);
00174   f.evtLoop->putback(evt);
00175   evt = f.evtLoop->next();
00176   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndRun);
00177 
00178   evt = f.evtLoop->next();
00179   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndJob);
00180   f.evtLoop->putback(evt);
00181   evt = f.evtLoop->next();
00182   BOOST_CHECK_EQUAL(evt.first, EventLoop::EndJob);
00183 
00184   evt = f.evtLoop->next();
00185   BOOST_CHECK_EQUAL(evt.first, EventLoop::None);
00186   f.evtLoop->putback(evt);
00187   evt = f.evtLoop->next();
00188   BOOST_CHECK_EQUAL(evt.first, EventLoop::None);
00189 
00190 }
00191 
00192 // ==============================================================
00193 

Generated on 19 Dec 2016 for PSANAclasses by  doxygen 1.4.7