From: <den...@us...> - 2010-09-12 16:40:37
|
Revision: 321 http://stdair.svn.sourceforge.net/stdair/?rev=321&view=rev Author: denis_arnaud Date: 2010-09-12 16:40:31 +0000 (Sun, 12 Sep 2010) Log Message: ----------- [Test] Added a test sub-directory for Boost.Intrusive-based architecture. Modified Paths: -------------- trunk/stdair/test/archi_intru/FlightDate.hpp trunk/stdair/test/archi_intru/TestManager.cpp trunk/stdair/test/archi_intru/TestManager.hpp trunk/stdair/test/archi_intru/archi.cpp Modified: trunk/stdair/test/archi_intru/FlightDate.hpp =================================================================== --- trunk/stdair/test/archi_intru/FlightDate.hpp 2010-09-12 16:23:47 UTC (rev 320) +++ trunk/stdair/test/archi_intru/FlightDate.hpp 2010-09-12 16:40:31 UTC (rev 321) @@ -5,8 +5,8 @@ // Import section // ////////////////////////////////////////////////////////////////////// // STL -#include <cassert> #include <string> +#include <vector> // Boost.Intrusive #include <boost/intrusive/list.hpp> #include <boost/intrusive/set.hpp> @@ -67,5 +67,6 @@ typedef bi::member_hook <FlightDate, bi::set_member_hook<>, &FlightDate::_childSetHook> FlightDateSetMemberOption; typedef bi::set<FlightDate, FlightDateSetMemberOption> FlightDateChildSet; + } #endif // __INTRUSIVE_BOM_FLIGHTDATE_HPP Modified: trunk/stdair/test/archi_intru/TestManager.cpp =================================================================== --- trunk/stdair/test/archi_intru/TestManager.cpp 2010-09-12 16:23:47 UTC (rev 320) +++ trunk/stdair/test/archi_intru/TestManager.cpp 2010-09-12 16:40:31 UTC (rev 321) @@ -0,0 +1,153 @@ +// ////////////////////////////////////////////////////////////////////// +// Import section +// ////////////////////////////////////////////////////////////////////// +// STL +#include <cassert> +#include <iostream> +#include <sstream> +#include <string> +#include <vector> +// Boost +#include <boost/intrusive/list.hpp> +// Local +#include <test/archi_intru/FlightDate.hpp> +#include <test/archi_intru/TestManager.hpp> + +/** Alias for the boost::intrusive namespace. */ +namespace bi = boost::intrusive; + +// ////////////////////////////////////////////////////////////////////// +TestManager::~TestManager() { + clean(); +} + +// ////////////////////////////////////////////////////////////////////// +void TestManager::init() { + initStandard(); + initIntrusive(); +} + +// ////////////////////////////////////////////////////////////////////// +void TestManager::initStandard() { + // Create several FlightDate objects, each one with a different value + for (int idx = 0; idx < 100; ++idx) { + stdair::FlightDate* lFlightDate_ptr = new stdair::FlightDate (idx); + assert (lFlightDate_ptr != NULL); + + _flightDateVector.push_back (lFlightDate_ptr); + } +} + +// ////////////////////////////////////////////////////////////////////// +void TestManager::initIntrusive() { + // Now insert them in the same order as in vector in the member hook list + for (stdair::FlightDateVector_T::iterator itFlight(_flightDateVector.begin()), + itend (_flightDateVector.end()); itFlight != itend; ++itFlight) { + stdair::FlightDate* lFlightDate_ptr = *itFlight; + assert (lFlightDate_ptr != NULL); + + _flightDateChildList.push_back (*lFlightDate_ptr); + _flightDateChildSet.insert (*lFlightDate_ptr); + } + + // DEBUG + /* + std::cout << "Size of the Boost.Intrusive list of FlightDate objects: " + << lFlightDateChildList.size() << std::endl; + std::cout << "Size of the Boost.Intrusive set of FlightDate objects: " + << lFlightDateChildSet.size() << std::endl; + */ +} + +// ////////////////////////////////////////////////////////////////////// +void TestManager::clean() { + _flightDateChildSet.clear(); + _flightDateChildList.clear_and_dispose(delete_disposer<stdair::FlightDate>()); +} + +// ////////////////////////////////////////////////////////////////////// +stdair::FlightDate* TestManager::getFromSet (const std::string& iKey) { + stdair::FlightDate* oFlightDate_ptr = NULL; + stdair::FlightDateChildSet::iterator itFlight = + _flightDateChildSet.find (iKey, StrExpComp<stdair::FlightDate>()); + if (itFlight == _flightDateChildSet.end()) { + return oFlightDate_ptr; + } + oFlightDate_ptr = &*itFlight; + return oFlightDate_ptr; +} + +// ////////////////////////////////////////////////////////////////////// +bool TestManager::testIntrusiveList() { + bool oTestSuccessfull = true; + + stdair::FlightDateChildList::iterator mit (_flightDateChildList.begin()), + mitend (_flightDateChildList.end()); + stdair::FlightDateVector_T::iterator itFlight (_flightDateVector.begin()), + itend (_flightDateVector.end()); + + // Test the objects inserted in the member hook list + for (itFlight = _flightDateVector.begin(); + itFlight != itend; ++itFlight, ++mit) { + stdair::FlightDate* lFlightDate_ptr = *itFlight; + assert (lFlightDate_ptr != NULL); + + if (&*mit != lFlightDate_ptr) { + oTestSuccessfull = false; + break; + } + } + + return oTestSuccessfull; +} + +// ////////////////////////////////////////////////////////////////////// +bool TestManager::testIntrusiveIteratorTo() { + bool oTestSuccessfull = true; + + stdair::FlightDateChildList::iterator itChild(_flightDateChildList.begin()); + for (int idx = 0; idx < 100; ++idx, ++itChild) { + stdair::FlightDate* lFlightDate_ptr = _flightDateVector.at(idx); + assert (lFlightDate_ptr != NULL); + + if (_flightDateChildList.iterator_to (*lFlightDate_ptr) != itChild || + stdair::FlightDateChildList::s_iterator_to(*lFlightDate_ptr)!= itChild){ + oTestSuccessfull = false; + break; + } + } + + return oTestSuccessfull; +} + +// ////////////////////////////////////////////////////////////////////// +bool TestManager::testIntrusiveSets() { + bool oTestSuccessfull = true; + + stdair::FlightDateChildSet::iterator itChild (_flightDateChildSet.begin()), + itChildEnd (_flightDateChildSet.end()); + for (; itChild != itChildEnd; ++itChild) { + const stdair::FlightDate& lFlightDate = *itChild; + + const std::string& lKey = lFlightDate.getKey(); + stdair::FlightDate* retrievedFlightDate_ptr = getFromSet (lKey); + + // DEBUG + /* + std::cout << "Key = '" << lKey << "', itFD = " + << &lFlightDate << ", retrieved: " << retrievedFlightDate_ptr + << std::endl; + */ + + if (retrievedFlightDate_ptr == NULL || + _flightDateChildSet.iterator_to (lFlightDate) != itChild || + _flightDateChildSet.iterator_to (*retrievedFlightDate_ptr) != itChild || + stdair::FlightDateChildSet::s_iterator_to (lFlightDate) != itChild || + stdair::FlightDateChildSet::s_iterator_to(*retrievedFlightDate_ptr) != itChild) { + oTestSuccessfull = false; + break; + } + } + + return oTestSuccessfull; +} Modified: trunk/stdair/test/archi_intru/TestManager.hpp =================================================================== --- trunk/stdair/test/archi_intru/TestManager.hpp 2010-09-12 16:23:47 UTC (rev 320) +++ trunk/stdair/test/archi_intru/TestManager.hpp 2010-09-12 16:40:31 UTC (rev 321) @@ -1,63 +1,31 @@ -#ifndef __LATUS_STDAIR_TST_TESTMANAGER_HPP -#define __LATUS_STDAIR_TST_TESTMANAGER_HPP +#ifndef __INTRUSIVE_TST_TESTMANAGER_HPP +#define __INTRUSIVE_TST_TESTMANAGER_HPP // ////////////////////////////////////////////////////////////////////// // Import section // ////////////////////////////////////////////////////////////////////// // STL -#include <cassert> -#include <iostream> -#include <sstream> #include <string> -#include <vector> -// Boost -#include <boost/intrusive/list.hpp> // Local #include <test/archi_intru/FlightDate.hpp> -//#include <test/archi_intru/FacRelationShipRoot.hpp> -/** Alias for the boost::intrusive namespace. */ -namespace bi = boost::intrusive; - /** Class wrapping test functions. */ class TestManager { public: /** Destructor. */ - ~TestManager() { clean(); } + ~TestManager(); public: + /** Initialise the internal vector, list and set. */ + void init(); + +private: /** Fill the standard (STL) vector. */ - void initStandard() { - // Create several FlightDate objects, each one with a different value - for (int idx = 0; idx < 100; ++idx) { - stdair::FlightDate* lFlightDate_ptr = new stdair::FlightDate (idx); - assert (lFlightDate_ptr != NULL); - - _flightDateVector.push_back (lFlightDate_ptr); - } - } + void initStandard(); /** Fill the (Boost) Intrusive list (and set). */ - void initIntrusive() { - // Now insert them in the same order as in vector in the member hook list - for (stdair::FlightDateVector_T::iterator itFlight (_flightDateVector.begin()), - itend (_flightDateVector.end()); itFlight != itend; ++itFlight) { - stdair::FlightDate* lFlightDate_ptr = *itFlight; - assert (lFlightDate_ptr != NULL); - - _flightDateChildList.push_back (*lFlightDate_ptr); - _flightDateChildSet.insert (*lFlightDate_ptr); - } - - // DEBUG - /* - std::cout << "Size of the Boost.Intrusive list of FlightDate objects: " - << lFlightDateChildList.size() << std::endl; - std::cout << "Size of the Boost.Intrusive set of FlightDate objects: " - << lFlightDateChildSet.size() << std::endl; - */ - } - + void initIntrusive(); + /** Some memory cleaning. <br>Note: the FlightDate objects cannot be simply deleted (with the delete opearator). @@ -68,99 +36,22 @@ clear the last Boost.Intrusive container while deleting the corresponding hooked objects. */ - void clean() { - _flightDateChildSet.clear(); - _flightDateChildList.clear_and_dispose (delete_disposer<stdair::FlightDate>()); - } - + void clean(); + +public: /** Optimized search functions */ - stdair::FlightDate* getFromSet (const std::string& iKey) { - stdair::FlightDate* oFlightDate_ptr = NULL; - stdair::FlightDateChildSet::iterator itFlight = - _flightDateChildSet.find (iKey, StrExpComp<stdair::FlightDate>()); - if (itFlight == _flightDateChildSet.end()) { - return oFlightDate_ptr; - } - oFlightDate_ptr = &*itFlight; - return oFlightDate_ptr; - } + stdair::FlightDate* getFromSet (const std::string& iKey); /** Test (Boost) Intrusive lists. */ - bool testIntrusiveList() { - bool oTestSuccessfull = true; - - stdair::FlightDateChildList::iterator mit (_flightDateChildList.begin()), - mitend (_flightDateChildList.end()); - stdair::FlightDateVector_T::iterator itFlight (_flightDateVector.begin()), - itend (_flightDateVector.end()); + bool testIntrusiveList(); - // Test the objects inserted in the member hook list - for (itFlight = _flightDateVector.begin(); - itFlight != itend; ++itFlight, ++mit) { - stdair::FlightDate* lFlightDate_ptr = *itFlight; - assert (lFlightDate_ptr != NULL); - - if (&*mit != lFlightDate_ptr) { - oTestSuccessfull = false; - break; - } - } - - return oTestSuccessfull; - } - /** Test (Boost) Intrusive iterator_to(). */ - bool testIntrusiveIteratorTo() { - bool oTestSuccessfull = true; - - stdair::FlightDateChildList::iterator itChild(_flightDateChildList.begin()); - for (int idx = 0; idx < 100; ++idx, ++itChild) { - stdair::FlightDate* lFlightDate_ptr = _flightDateVector.at(idx); - assert (lFlightDate_ptr != NULL); - - if (_flightDateChildList.iterator_to (*lFlightDate_ptr) != itChild || - stdair::FlightDateChildList::s_iterator_to(*lFlightDate_ptr) != itChild) { - oTestSuccessfull = false; - break; - } - } - - return oTestSuccessfull; - } + bool testIntrusiveIteratorTo(); /** Test (Boost) Intrusive sets. */ - bool testIntrusiveSets() { - bool oTestSuccessfull = true; + bool testIntrusiveSets(); - stdair::FlightDateChildSet::iterator itChild (_flightDateChildSet.begin()), - itChildEnd (_flightDateChildSet.end()); - for (; itChild != itChildEnd; ++itChild) { - const stdair::FlightDate& lFlightDate = *itChild; - - const std::string& lKey = lFlightDate.getKey(); - stdair::FlightDate* retrievedFlightDate_ptr = getFromSet (lKey); - - // DEBUG - /* - std::cout << "Key = '" << lKey << "', itFD = " - << &lFlightDate << ", retrieved: " << retrievedFlightDate_ptr - << std::endl; - */ - - if (retrievedFlightDate_ptr == NULL || - _flightDateChildSet.iterator_to (lFlightDate) != itChild || - _flightDateChildSet.iterator_to (*retrievedFlightDate_ptr) != itChild || - stdair::FlightDateChildSet::s_iterator_to (lFlightDate) != itChild || - stdair::FlightDateChildSet::s_iterator_to(*retrievedFlightDate_ptr) != itChild) { - oTestSuccessfull = false; - break; - } - } - - return oTestSuccessfull; - } - -public: +private: // Standard STL container stdair::FlightDateVector_T _flightDateVector; @@ -169,4 +60,4 @@ stdair::FlightDateChildSet _flightDateChildSet; }; -#endif // __LATUS_STDAIR_TST_TESTMANAGER_HPP +#endif // __INTRUSIVE_TST_TESTMANAGER_HPP Modified: trunk/stdair/test/archi_intru/archi.cpp =================================================================== --- trunk/stdair/test/archi_intru/archi.cpp 2010-09-12 16:23:47 UTC (rev 320) +++ trunk/stdair/test/archi_intru/archi.cpp 2010-09-12 16:40:31 UTC (rev 321) @@ -1,17 +1,12 @@ // STL #include <cassert> -#include <iostream> -#include <sstream> -#include <string> -#include <vector> -// Boost -#include <boost/intrusive/list.hpp> +//#include <iostream> +//#include <sstream> +//#include <string> +//#include <vector> // Local #include <test/archi_intru/TestManager.hpp> -/** Alias for the boost::intrusive namespace. */ -namespace bi = boost::intrusive; - // /////////////////////////// M A I N ///////////////////////// /** Main. <br>Run with the following command: @@ -24,10 +19,8 @@ // TestManager lTestManager; - // Fill the standard (STL) vector - lTestManager.initStandard(); - - lTestManager.initIntrusive(); + // Initialise the internal (STL) vector, (Boost.Intrusive) list and set + lTestManager.init(); // Now test lists lTestManager.testIntrusiveList(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |