PSEvt/test/psevt-unit-test.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: psevt-unit-test.cpp 7525 2014-01-13 19:52:29Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Test suite case for the psevt-unit-test.
00007 //
00008 //------------------------------------------------------------------------
00009 
00010 //---------------
00011 // C++ Headers --
00012 //---------------
00013 
00014 //-------------------------------
00015 // Collaborating Class Headers --
00016 //-------------------------------
00017 #include "PSEvt/Event.h"
00018 #include "PSEvt/Exceptions.h"
00019 #include "PSEvt/ProxyDict.h"
00020 #include "pdsdata/xtc/DetInfo.hh"
00021 
00022 using namespace PSEvt ;
00023 
00024 #define BOOST_TEST_MODULE psevt-unit-test
00025 #include <boost/test/included/unit_test.hpp>
00026 
00027 /**
00028  * Simple test suite for module psevt-unit-test.
00029  * See http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/index.html
00030  */
00031 
00032 class TestFixture {
00033 public:
00034   TestFixture()
00035     : amap(boost::make_shared<AliasMap>())
00036     , dict(boost::make_shared<ProxyDict>(amap))
00037     , evt(dict)
00038     , di1(0, Pds::DetInfo::Detector(1), 1, Pds::DetInfo::Device(1), 1)
00039     , di2(0, Pds::DetInfo::Detector(2), 2, Pds::DetInfo::Device(2), 2)
00040   {
00041   }
00042 
00043   boost::shared_ptr<AliasMap> amap;
00044   boost::shared_ptr<ProxyDict> dict;
00045   Event evt;
00046   Pds::DetInfo di1;
00047   Pds::DetInfo di2;
00048 };
00049 
00050 BOOST_FIXTURE_TEST_SUITE( proxyDictTest, TestFixture );
00051 
00052 // ==============================================================
00053 
00054 BOOST_AUTO_TEST_CASE( test )
00055 {
00056   boost::shared_ptr<int> p1(new int(1));
00057   BOOST_CHECK_NO_THROW( evt.put(p1) );
00058 
00059   boost::shared_ptr<int> p2(new int(2));
00060   BOOST_CHECK_NO_THROW( evt.put(p2, "p2") );
00061 
00062   // Adding the same key again must throw
00063   BOOST_CHECK_THROW( evt.put(p2, "p2"), ExceptionDuplicateKey );
00064   
00065   boost::shared_ptr<int> p3(new int(3));
00066   BOOST_CHECK_NO_THROW( evt.put(p3, di1) );
00067   // second time around throws
00068   BOOST_CHECK_THROW( evt.put(p3, di1), ExceptionDuplicateKey );
00069   
00070   boost::shared_ptr<int> p4(new int(4));
00071   BOOST_CHECK_NO_THROW( evt.put(p4, di2) );
00072 
00073   BOOST_CHECK_NO_THROW( evt.put(p3, di1, "p3") );
00074   BOOST_CHECK_NO_THROW( evt.put(p4, di2, "p4") );
00075 
00076   boost::shared_ptr<Proxy<int> > pp1( new DataProxy<int>(p1) );
00077   BOOST_CHECK_NO_THROW( evt.putProxy(pp1, "pp1") );
00078   
00079   boost::shared_ptr<Proxy<int> > pp2( new DataProxy<int>(p2) );
00080   BOOST_CHECK_NO_THROW( evt.putProxy(pp2, "pp2") );
00081   
00082   /// check that all proxies are still there
00083   
00084   BOOST_CHECK( evt.exists<int>() );
00085   BOOST_CHECK( evt.exists<int>("p2") );
00086   BOOST_CHECK( evt.exists<int>(di1) );
00087   BOOST_CHECK( evt.exists<int>(di2) );
00088   BOOST_CHECK( evt.exists<int>(di1, "p3") );
00089   BOOST_CHECK( evt.exists<int>(di2, "p4") );
00090 
00091   BOOST_CHECK( not evt.exists<int>("not") );
00092   BOOST_CHECK( not evt.exists<int>(di1, "not") );
00093 
00094   BOOST_CHECK( evt.exists<int>("pp1") );
00095   BOOST_CHECK( evt.exists<int>("pp2") );
00096 
00097   /// get data back
00098   
00099   p1 = evt.get();
00100   BOOST_CHECK( p1.get() );
00101   BOOST_CHECK_EQUAL( *p1, 1 );
00102   
00103   p2 = evt.get("p2");
00104   BOOST_CHECK( p2.get() );
00105   BOOST_CHECK_EQUAL( *p2, 2 );
00106   
00107   p3 = evt.get(di1);
00108   BOOST_CHECK( p3.get() );
00109   BOOST_CHECK_EQUAL( *p3, 3 );
00110   
00111   p4 = evt.get(di2);
00112   BOOST_CHECK( p4.get() );
00113   BOOST_CHECK_EQUAL( *p4, 4 );
00114   
00115   p3 = evt.get(di1, "p3");
00116   BOOST_CHECK( p3.get() );
00117   BOOST_CHECK_EQUAL( *p3, 3 );
00118   
00119   p4 = evt.get(di2, "p4");
00120   BOOST_CHECK( p4.get() );
00121   BOOST_CHECK_EQUAL( *p4, 4 );
00122   
00123   p1 = evt.get("pp1");
00124   BOOST_CHECK( p1.get() );
00125   BOOST_CHECK_EQUAL( *p1, 1 );
00126   
00127   p2 = evt.get("pp2");
00128   BOOST_CHECK( p2.get() );
00129   BOOST_CHECK_EQUAL( *p2, 2 );  
00130   
00131   /// remove some proxies
00132   
00133   BOOST_CHECK( evt.remove<int>() );
00134   BOOST_CHECK( not evt.exists<int>() );
00135 
00136   BOOST_CHECK( evt.remove<int>("p2") );
00137   BOOST_CHECK( not evt.exists<int>("p2") );
00138 
00139   BOOST_CHECK( evt.remove<int>(di1) );
00140   BOOST_CHECK( not evt.exists<int>(di1) );
00141 
00142   BOOST_CHECK( evt.remove<int>(di1, "p3") );
00143   BOOST_CHECK( not evt.exists<int>(di1, "p3") );
00144 
00145   BOOST_CHECK( not evt.remove<int>(di1, "p333") );
00146   BOOST_CHECK( not evt.exists<int>(di1, "p333") );
00147 }
00148 
00149 // ==============================================================
00150 
00151 BOOST_AUTO_TEST_CASE( test_keys )
00152 {
00153   boost::shared_ptr<int> p0(new int(0));
00154   BOOST_CHECK_NO_THROW( evt.put(p0) );
00155 
00156   boost::shared_ptr<int> p1(new int(1));
00157   BOOST_CHECK_NO_THROW( evt.put(p1, di1) );
00158 
00159   boost::shared_ptr<int> p2(new int(2));
00160   BOOST_CHECK_NO_THROW( evt.put(p2, di2) );
00161 
00162   boost::shared_ptr<int> p3(new int(3));
00163   BOOST_CHECK_NO_THROW( evt.put(p3, di2, "p3") );
00164 
00165   std::list<EventKey> keys = evt.keys();
00166   BOOST_CHECK_EQUAL( keys.size(), 4U );
00167 
00168   keys = evt.keys(Source("*.0:*.0"));
00169   BOOST_CHECK_EQUAL( keys.size(), 0U );
00170 
00171   keys = evt.keys(Source("*.1:*.1"));
00172   BOOST_CHECK_EQUAL( keys.size(), 1U );
00173 
00174   keys = evt.keys(Source("*.2:*.2"));
00175   BOOST_CHECK_EQUAL( keys.size(), 2U );
00176 
00177 }
00178 
00179 // ==============================================================
00180 
00181 BOOST_AUTO_TEST_SUITE_END()

Generated on 19 Dec 2016 for PSDMSoftware by  doxygen 1.4.7