From: <bl...@us...> - 2003-04-27 21:59:52
|
Update of /cvsroot/cpptool/rfta/src/rftaparser In directory sc8-pr-cvs1:/tmp/cvs-serv29686/src/rftaparser Modified Files: rftaparser.dsp Added Files: EnumeratorTest.cpp EnumeratorTest.h Log Message: * added Enumerator concept. Allow enumeration of STL container while hiding implementation. --- NEW FILE: EnumeratorTest.cpp --- // ////////////////////////////////////////////////////////////////////////// // (c)Copyright 2002, Baptiste Lepilleur. // Created: 2003/04/27 // ////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "EnumeratorTest.h" #include <algorithm> #include <iterator> namespace Refactoring { RFTAPARSER_TEST_SUITE_REGISTRATION( EnumeratorTest ); EnumeratorTest::EnumeratorTest() { } EnumeratorTest::~EnumeratorTest() { } void EnumeratorTest::setUp() { deque1_.clear(); deque1_.push_back( 12 ); // must be ordered deque1_.push_back( 23 ); deque1_.push_back( 34 ); vector1_.clear(); std::copy( deque1_.begin(), deque1_.end(), std::back_inserter( vector1_ ) ); set1_.clear(); std::copy( deque1_.begin(), deque1_.end(), std::inserter( set1_, set1_.begin() ) ); } void EnumeratorTest::tearDown() { set1_.clear(); vector1_.clear(); deque1_.clear(); } void EnumeratorTest::testNullEnumerator() { IntEnum e; checkHasNoMoreElements( e ); IntEnum e2( e ); checkHasNoMoreElements( e2 ); IntEnum e3( e.clone() ); checkHasNoMoreElements( e3 ); } void EnumeratorTest::testStlEnumerator() { IntEnum e1 = Xtl::enumStl( deque1_ ); checkContent( e1 ); IntEnum e2 = Xtl::enumStl( vector1_ ); checkContent( e2 ); IntEnum e3 = Xtl::enumStl( set1_ ); checkContent( e3 ); CharEnum e4 = Xtl::enumStl( deque1_, Xtl::Type<char>() ); checkContent( e4 ); CharEnum e5 = Xtl::enumStl( vector1_, Xtl::Type<char>() ); checkContent( e5 ); CharEnum e6 = Xtl::enumStl( set1_, Xtl::Type<char>() ); checkContent( e6 ); } void EnumeratorTest::testStlRangeEnumerator() { IntEnum e1a = Xtl::enumStl( deque1_.begin(), deque1_.begin()+2 ); IntEnum e1b = Xtl::enumStl( deque1_.begin()+1, deque1_.begin()+3 ); checkRangesContent( e1a, e1b ); IntEnum e2a = Xtl::enumStl( vector1_.begin(), vector1_.begin()+2 ); IntEnum e2b = Xtl::enumStl( vector1_.begin()+1, vector1_.begin()+3 ); checkRangesContent( e2a, e2b ); IntSet::iterator itEnd = set1_.end(); --itEnd; IntSet::iterator itStart = set1_.begin(); itStart++; IntEnum e3a = Xtl::enumStl( set1_.begin(), itEnd ); IntEnum e3b = Xtl::enumStl( itStart, set1_.end() ); checkRangesContent( e3a, e3b ); CharEnum e4a = Xtl::enumStl( deque1_.begin(), deque1_.begin()+2, Xtl::Type<char>() ); CharEnum e4b = Xtl::enumStl( deque1_.begin()+1, deque1_.begin()+3, Xtl::Type<char>() ); checkRangesContent( e4a, e4b ); CharEnum e5a = Xtl::enumStl( vector1_.begin(), vector1_.begin()+2, Xtl::Type<char>() ); CharEnum e5b = Xtl::enumStl( vector1_.begin()+1, vector1_.begin()+3, Xtl::Type<char>() ); checkRangesContent( e5a, e5b ); CharEnum e6a = Xtl::enumStl( set1_.begin(), itEnd, Xtl::Type<char>() ); CharEnum e6b = Xtl::enumStl( itStart, set1_.end(), Xtl::Type<char>() ); checkRangesContent( e6a, e6b ); } void EnumeratorTest::testStlEnumConstructAdapator() { IntDequeEnum e = Xtl::enumStl( deque1_, Xtl::Type<IntDeque>() ); // force usage of IntDeque constructor IntDeque a = e.getNext(); RFTA_ASSERT_EQUAL( 12, a.size() ); IntDeque b = e.getNext(); RFTA_ASSERT_EQUAL( 23, b.size() ); IntDeque c = e.getNext(); RFTA_ASSERT_EQUAL( 34, c.size() ); checkHasNoMoreElements( e ); } } // namespace Refactoring --- NEW FILE: EnumeratorTest.h --- // ////////////////////////////////////////////////////////////////////////// // (c)Copyright 2002, Baptiste Lepilleur. // Created: 2003/04/27 // ////////////////////////////////////////////////////////////////////////// #ifndef RFTA_ENUMERATORTEST_H #define RFTA_ENUMERATORTEST_H #include "UnitTesting.h" #include <xtl/Enumerator.h> #include <xtl/StlEnumerator.h> #include <deque> #include <set> #include <vector> namespace Refactoring { /// Unit tests for EnumeratorTest class EnumeratorTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE( EnumeratorTest ); CPPUNIT_TEST( testNullEnumerator ); CPPUNIT_TEST( testStlEnumerator ); CPPUNIT_TEST( testStlRangeEnumerator ); CPPUNIT_TEST( testStlEnumConstructAdapator ); CPPUNIT_TEST_SUITE_END(); public: /*! Constructs a EnumeratorTest object. */ EnumeratorTest(); /// Destructor. virtual ~EnumeratorTest(); void setUp(); void tearDown(); void testNullEnumerator(); void testStlEnumerator(); void testStlRangeEnumerator(); void testStlEnumConstructAdapator(); private: typedef Xtl::Enumerator<int> IntEnum; typedef Xtl::Enumerator<char> CharEnum; template<typename EnumeratorType> void checkHasNoMoreElements( EnumeratorType &e ) { CPPUNIT_ASSERT( !e.hasNext() ); RFTA_ASSERT_THROW( e.getNext(), Xtl::EnumeratorError ); } template<typename EnumeratorType> void checkContent( EnumeratorType &e ) { RFTA_ASSERT_EQUAL( 12, e.getNext() ); RFTA_ASSERT_EQUAL( 23, e.getNext() ); RFTA_ASSERT_EQUAL( 34, e.getNext() ); checkHasNoMoreElements( e ); } template<typename EnumeratorType> void checkRangesContent( EnumeratorType &e1, EnumeratorType &e2 ) { RFTA_ASSERT_EQUAL( 12, e1.getNext() ); RFTA_ASSERT_EQUAL( 23, e1.getNext() ); checkHasNoMoreElements( e1 ); RFTA_ASSERT_EQUAL( 23, e2.getNext() ); RFTA_ASSERT_EQUAL( 34, e2.getNext() ); checkHasNoMoreElements( e2 ); } typedef std::deque<int> IntDeque; IntDeque deque1_; typedef std::vector<int> IntVector; IntVector vector1_; typedef std::set<int> IntSet; IntSet set1_; typedef Xtl::Enumerator<IntDeque> IntDequeEnum; }; // Inlines methods for EnumeratorTest: // ----------------------------------- } // namespace Refactoring #endif // RFTA_ENUMERATORTEST_H Index: rftaparser.dsp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rftaparser/rftaparser.dsp,v retrieving revision 1.40 retrieving revision 1.41 diff -C2 -d -r1.40 -r1.41 *** rftaparser.dsp 26 Apr 2003 21:13:35 -0000 1.40 --- rftaparser.dsp 27 Apr 2003 21:59:49 -0000 1.41 *************** *** 130,141 **** --- 130,173 ---- # Begin Source File + SOURCE=..\..\include\xtl\EnumAdaptor.h + # End Source File + # Begin Source File + + SOURCE=..\..\include\xtl\Enumerator.h + # End Source File + # Begin Source File + + SOURCE=..\..\include\xtl\EnumeratorImpl.h + # End Source File + # Begin Source File + SOURCE=..\..\include\xtl\Forwards.h # End Source File # Begin Source File + SOURCE=..\..\include\xtl\Int2Type.h + # End Source File + # Begin Source File + SOURCE=..\..\include\xtl\IntrusiveCount.h # End Source File # Begin Source File + SOURCE=..\..\include\xtl\NullEnumerator.h + # End Source File + # Begin Source File + + SOURCE=..\..\include\xtl\StlEnumerator.h + # End Source File + # Begin Source File + + SOURCE=..\..\include\xtl\StlMapEnumerator.h + # End Source File + # Begin Source File + + SOURCE=..\..\include\xtl\Type.h + # End Source File + # Begin Source File + SOURCE=..\..\include\xtl\VirtualFunctor.h # End Source File *************** *** 581,584 **** --- 613,642 ---- SOURCE=.\CStringViewTest.h + + !IF "$(CFG)" == "rftaparser - Win32 Release" + + # PROP Exclude_From_Build 1 + + !ELSEIF "$(CFG)" == "rftaparser - Win32 Debug" + + !ENDIF + + # End Source File + # Begin Source File + + SOURCE=.\EnumeratorTest.cpp + + !IF "$(CFG)" == "rftaparser - Win32 Release" + + # PROP Exclude_From_Build 1 + + !ELSEIF "$(CFG)" == "rftaparser - Win32 Debug" + + !ENDIF + + # End Source File + # Begin Source File + + SOURCE=.\EnumeratorTest.h !IF "$(CFG)" == "rftaparser - Win32 Release" |