36 #include "DGtal/base/Common.h"
37 #include "DGtal/base/IndexedListWithBlocks.h"
38 #include "DGtal/base/Labels.h"
40 using namespace DGtal;
43 template <
typename Container1,
typename Container2>
45 isEqual( Container1 & c1, Container2 & c2 )
47 return ( c1.size() == c2.size() )
48 && std::equal( c1.begin(), c1.end(), c2.begin() );
51 template <
typename VContainer1,
typename LContainer2>
52 void insert( VContainer1 & c1, LContainer2 & c2,
unsigned int idx,
double v )
54 c1.insert( c1.begin() + idx, v );
58 template <
typename VContainer1,
typename LContainer2>
60 checkInsert( VContainer1 & v, LContainer2 & l,
63 for (
unsigned int i = 0; i < nb; ++i )
65 unsigned int idx = random() % ( l.size() + 1 );
66 double val = ( (double)random() ) / RAND_MAX;
67 insert( v, l, idx, val );
69 return isEqual( v, l );
72 template <
typename VContainer1,
typename LContainer2>
73 void erase( VContainer1 & c1, LContainer2 & c2,
unsigned int idx )
75 c1.erase( c1.begin() + idx );
79 template <
typename VContainer1,
typename LContainer2>
81 checkErase( VContainer1 & v, LContainer2 & l,
84 for (
unsigned int i = 0; i < nb; ++i )
86 unsigned int idx = random() % ( l.size() );
89 return isEqual( v, l );
96 BOOST_CONCEPT_ASSERT(( boost::Container< MyIndexedList > ));
97 BOOST_CONCEPT_ASSERT(( boost::ForwardIterator< MyIndexedList::Iterator > ));
98 BOOST_CONCEPT_ASSERT(( boost::ForwardIterator< MyIndexedList::ConstIterator > ));
100 unsigned int nbok = 0;
104 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
105 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
106 insert( v, l, 0, 4.5 );
107 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
108 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
109 insert( v, l, 0, 10.1 );
110 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
111 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
112 insert( v, l, 1, 3.7 );
113 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
114 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
115 insert( v, l, 2, 8.4 );
116 insert( v, l, 1, 2.1 );
117 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
118 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
119 insert( v, l, 2, -3.0 );
120 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
121 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
122 insert( v, l, v.size(), -13.1 );
123 ++nb, nbok += isEqual( v, l ) ? 1 : 0;
124 std::cout <<
"(" << nbok <<
"/" << nb <<
") l=" << l << std::endl;
125 ++nb, nbok += checkInsert( v, l, 10000 ) ? 1 : 0;
126 std::cout <<
"(" << nbok <<
"/" << nb <<
") 10000 insertions" << std::endl;
127 ++nb, nbok += checkErase( v, l, 10000 ) ? 1 : 0;
128 std::cout <<
"(" << nbok <<
"/" << nb <<
") 10000 deletions l=" << l << std::endl;
130 return ( nb == nbok ) ? 0 : 1;