DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
testOutputIteratorAdapter.cpp
1 
30 
31 #include <iostream>
32 #include <map>
33 #include <vector>
34 
35 #include "DGtal/base/Common.h"
36 #include "DGtal/base/BasicFunctors.h"
37 #include "DGtal/base/OutputIteratorAdapter.h"
38 #include "DGtal/base/IteratorAdapter.h"
39 
40 
42 
43 using namespace std;
44 using namespace DGtal;
45 
47 // Functions for testing class OutputIteratorAdapter.
49 
53 bool testPairs()
54 {
55  int nb = 0;
56  int nbok = 0;
57 
58  typedef map<string,string> Map;
59  typedef pair<string,string> Pair;
60 
61  //input
62  Map m;
63  m.insert( Pair("Proudhon", "Pierre-Joseph" ) );
64  m.insert( Pair("Reclus", "Élisée" ) );
65  m.insert( Pair("Zamenhof", "Ludwik Lejzer" ) );
66 
67  typedef vector<string> Vec;
68  Vec v;
69  v.push_back( "P-J." );
70  v.push_back( "E." );
71  v.push_back( "L. L." );
72 
73  //result
74  Map m2;
75  m2.insert( Pair("Proudhon", "P-J." ) );
76  m2.insert( Pair("Reclus", "E.") );
77  m2.insert( Pair("Zamenhof", "L. L." ) );
78 
79  {//test output iterator
80  trace.beginBlock ( "OutputIteratorAdapter..." );
81 
83  BOOST_CONCEPT_ASSERT(( boost::OutputIterator<Adapter, string> ));
85  Adapter a( m.begin(), f );
86 
87  copy(v.begin(), v.end(), a);
88 
89  bool flag;
90  flag = std::equal( m.begin(), m.end(), m2.begin() );
91  nbok += (flag)?1:0;
92  nb++;
93 
94  trace.info() << "(" << nbok << "/" << nb << ")" << std::endl;
95  trace.endBlock();
96  }
97 
98  {//test iterator
99  trace.beginBlock ( "IteratorAdapter..." );
100 
102 
104  BOOST_CONCEPT_ASSERT(( boost::ForwardIterator<Adapter> ));
105 
106  //writting
107  Adapter a( m.begin(), f );
108  copy(v.begin(), v.end(), a);
109  bool flag1 = std::equal( m.begin(), m.end(), m2.begin() );
110 
111  //reading
112  Adapter aBegin( m.begin(), f);
113  Adapter aEnd( m.end(), f);
114  bool flag2 = std::equal( aBegin, aEnd, v.begin() );
115 
116  nbok += (flag1 && flag2)?1:0;
117  nb++;
118 
119  trace.info() << "(" << nbok << "/" << nb << ")" << std::endl;
120  trace.endBlock();
121  }
122 
123  return (nb == nbok);
124 }
125 
127 // Standard services - public :
128 
129 int main( int argc, char** argv )
130 {
131  trace.beginBlock ( "Testing class OutputIteratorAdapter" );
132  trace.info() << "Args:";
133  for ( int i = 0; i < argc; ++i )
134  trace.info() << " " << argv[ i ];
135  trace.info() << endl;
136 
137  bool res = testPairs()
138  ; // && ... other tests
139  trace.emphase() << ( res ? "Passed." : "Error." ) << endl;
140  trace.endBlock();
141  return res ? 0 : 1;
142 }
143 // //