|
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"
|