From: <den...@us...> - 2010-09-12 17:03:40
|
Revision: 322 http://stdair.svn.sourceforge.net/stdair/?rev=322&view=rev Author: denis_arnaud Date: 2010-09-12 17:03:33 +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/archi.cpp trunk/stdair/test/archi_intru/sources.mk Added Paths: ----------- trunk/stdair/test/archi_intru/TestIntrusive.cpp trunk/stdair/test/archi_intru/TestIntrusive.hpp Removed Paths: ------------- trunk/stdair/test/archi_intru/TestManager.cpp trunk/stdair/test/archi_intru/TestManager.hpp Copied: trunk/stdair/test/archi_intru/TestIntrusive.cpp (from rev 321, trunk/stdair/test/archi_intru/TestManager.cpp) =================================================================== --- trunk/stdair/test/archi_intru/TestIntrusive.cpp (rev 0) +++ trunk/stdair/test/archi_intru/TestIntrusive.cpp 2010-09-12 17:03:33 UTC (rev 322) @@ -0,0 +1,175 @@ +// ////////////////////////////////////////////////////////////////////// +// 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/TestIntrusive.hpp> + +/** Alias for the boost::intrusive namespace. */ +namespace bi = boost::intrusive; + +// ////////////////////////////////////////////////////////////////////// +TestIntrusive::~TestIntrusive() { + clean(); +} + +// ////////////////////////////////////////////////////////////////////// +void TestIntrusive::init() { + initStandard(); + initIntrusive(); +} + +// ////////////////////////////////////////////////////////////////////// +void TestIntrusive::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 TestIntrusive::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 TestIntrusive::clean() { + _flightDateChildSet.clear(); + _flightDateChildList.clear_and_dispose(delete_disposer<stdair::FlightDate>()); +} + +// ////////////////////////////////////////////////////////////////////// +stdair::FlightDate* TestIntrusive::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 TestIntrusive::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 TestIntrusive::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 TestIntrusive::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; +} + +// ////////////////////////////////////////////////////////////////////// +bool TestIntrusive::test() { + bool oTestSuccessfull = true; + + // + TestIntrusive lTestIntrusive; + + // Initialise the internal (STL) vector, (Boost.Intrusive) list and set + lTestIntrusive.init(); + + // Now test lists + lTestIntrusive.testIntrusiveList(); + + // Now, test iterator_to() + lTestIntrusive.testIntrusiveIteratorTo(); + + // Now, test sets + lTestIntrusive.testIntrusiveSets(); + + return oTestSuccessfull; +} Copied: trunk/stdair/test/archi_intru/TestIntrusive.hpp (from rev 321, trunk/stdair/test/archi_intru/TestManager.hpp) =================================================================== --- trunk/stdair/test/archi_intru/TestIntrusive.hpp (rev 0) +++ trunk/stdair/test/archi_intru/TestIntrusive.hpp 2010-09-12 17:03:33 UTC (rev 322) @@ -0,0 +1,66 @@ +#ifndef __INTRUSIVE_TST_TESTINTRUSIVE_HPP +#define __INTRUSIVE_TST_TESTINTRUSIVE_HPP + +// ////////////////////////////////////////////////////////////////////// +// Import section +// ////////////////////////////////////////////////////////////////////// +// STL +#include <string> +// Local +#include <test/archi_intru/FlightDate.hpp> + +/** Class wrapping test functions. */ +class TestIntrusive { +public: + /** Destructor. */ + ~TestIntrusive(); + +public: + /** Perform the full test set. */ + static bool test(); + +private: + /** Initialise the internal vector, list and set. */ + void init(); + + /** Fill the standard (STL) vector. */ + void initStandard(); + + /** Fill the (Boost) Intrusive list (and set). */ + void initIntrusive(); + + /** Some memory cleaning. + <br>Note: the FlightDate objects cannot be simply deleted (with the + delete opearator). + <br>See also, for more details: + - http://www.boost.org/doc/libs/1_44_0/doc/html/intrusive/usage.html#intrusive.usage.usage_lifetime + - http://www.boost.org/doc/libs/1_44_0/doc/html/intrusive/erasing_and_disposing.html + <br>First, clear simply all the Boost.Intrusive containers but one. Then, + clear the last Boost.Intrusive container while deleting the corresponding + hooked objects. + */ + void clean(); + +private: + /** Optimized search functions */ + stdair::FlightDate* getFromSet (const std::string& iKey); + + /** Test (Boost) Intrusive lists. */ + bool testIntrusiveList(); + + /** Test (Boost) Intrusive iterator_to(). */ + bool testIntrusiveIteratorTo(); + + /** Test (Boost) Intrusive sets. */ + bool testIntrusiveSets(); + +private: + // Standard STL container + stdair::FlightDateVector_T _flightDateVector; + + // (Boost) Intrusive container + stdair::FlightDateChildList _flightDateChildList; + stdair::FlightDateChildSet _flightDateChildSet; +}; + +#endif // __INTRUSIVE_TST_TESTINTRUSIVE_HPP Deleted: trunk/stdair/test/archi_intru/TestManager.cpp =================================================================== --- trunk/stdair/test/archi_intru/TestManager.cpp 2010-09-12 16:40:31 UTC (rev 321) +++ trunk/stdair/test/archi_intru/TestManager.cpp 2010-09-12 17:03:33 UTC (rev 322) @@ -1,153 +0,0 @@ -// ////////////////////////////////////////////////////////////////////// -// 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; -} Deleted: trunk/stdair/test/archi_intru/TestManager.hpp =================================================================== --- trunk/stdair/test/archi_intru/TestManager.hpp 2010-09-12 16:40:31 UTC (rev 321) +++ trunk/stdair/test/archi_intru/TestManager.hpp 2010-09-12 17:03:33 UTC (rev 322) @@ -1,63 +0,0 @@ -#ifndef __INTRUSIVE_TST_TESTMANAGER_HPP -#define __INTRUSIVE_TST_TESTMANAGER_HPP - -// ////////////////////////////////////////////////////////////////////// -// Import section -// ////////////////////////////////////////////////////////////////////// -// STL -#include <string> -// Local -#include <test/archi_intru/FlightDate.hpp> - -/** Class wrapping test functions. */ -class TestManager { -public: - /** Destructor. */ - ~TestManager(); - -public: - /** Initialise the internal vector, list and set. */ - void init(); - -private: - /** Fill the standard (STL) vector. */ - void initStandard(); - - /** Fill the (Boost) Intrusive list (and set). */ - void initIntrusive(); - - /** Some memory cleaning. - <br>Note: the FlightDate objects cannot be simply deleted (with the - delete opearator). - <br>See also, for more details: - - http://www.boost.org/doc/libs/1_44_0/doc/html/intrusive/usage.html#intrusive.usage.usage_lifetime - - http://www.boost.org/doc/libs/1_44_0/doc/html/intrusive/erasing_and_disposing.html - <br>First, clear simply all the Boost.Intrusive containers but one. Then, - clear the last Boost.Intrusive container while deleting the corresponding - hooked objects. - */ - void clean(); - -public: - /** Optimized search functions */ - stdair::FlightDate* getFromSet (const std::string& iKey); - - /** Test (Boost) Intrusive lists. */ - bool testIntrusiveList(); - - /** Test (Boost) Intrusive iterator_to(). */ - bool testIntrusiveIteratorTo(); - - /** Test (Boost) Intrusive sets. */ - bool testIntrusiveSets(); - -private: - // Standard STL container - stdair::FlightDateVector_T _flightDateVector; - - // (Boost) Intrusive container - stdair::FlightDateChildList _flightDateChildList; - stdair::FlightDateChildSet _flightDateChildSet; -}; - -#endif // __INTRUSIVE_TST_TESTMANAGER_HPP Modified: trunk/stdair/test/archi_intru/archi.cpp =================================================================== --- trunk/stdair/test/archi_intru/archi.cpp 2010-09-12 16:40:31 UTC (rev 321) +++ trunk/stdair/test/archi_intru/archi.cpp 2010-09-12 17:03:33 UTC (rev 322) @@ -5,7 +5,9 @@ //#include <string> //#include <vector> // Local -#include <test/archi_intru/TestManager.hpp> +#include <test/archi_intru/TestIntrusive.hpp> +#include <test/archi_intru/BomRoot.hpp> +#include <test/archi_intru/FlightDate.hpp> // /////////////////////////// M A I N ///////////////////////// /** Main. @@ -17,19 +19,7 @@ int main (int argc, char* argv[]) { // - TestManager lTestManager; + TestIntrusive::test(); - // Initialise the internal (STL) vector, (Boost.Intrusive) list and set - lTestManager.init(); - - // Now test lists - lTestManager.testIntrusiveList(); - - // Now, test iterator_to() - lTestManager.testIntrusiveIteratorTo(); - - // Now, test sets - lTestManager.testIntrusiveSets(); - return 0; } Modified: trunk/stdair/test/archi_intru/sources.mk =================================================================== --- trunk/stdair/test/archi_intru/sources.mk 2010-09-12 16:40:31 UTC (rev 321) +++ trunk/stdair/test/archi_intru/sources.mk 2010-09-12 17:03:33 UTC (rev 322) @@ -8,7 +8,7 @@ $(top_srcdir)/test/archi_intru/FlightDate.hpp \ $(top_srcdir)/test/archi_intru/LegDate.hpp \ $(top_srcdir)/test/archi_intru/SegmentDate.hpp \ - $(top_srcdir)/test/archi_intru/TestManager.hpp + $(top_srcdir)/test/archi_intru/TestIntrusive.hpp archi_intru_cc_sources = \ $(top_srcdir)/test/archi_intru/FacSupervisor.cpp \ - $(top_srcdir)/test/archi_intru/TestManager.cpp + $(top_srcdir)/test/archi_intru/TestIntrusive.cpp This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |