56 return wasSuccessful();
64 std::list<long> Lfwd, Lbck, L;
65 assertTrue( Lfwd.empty() && L.empty() );
70 while ( itFwd.hasNext() && itBck.hasNext() ) {
71 Lfwd.push_back( itFwd.next() );
72 Lbck.push_back( itBck.next() );
77 { std::list<long> Lcp, L;
81 assertTrue( ! iter.hasNext() );
86 assertTrue( iter.hasNext() );
87 assertTrue( iter.next() == 1 );
88 assertTrue( ! iter.hasNext() );
93 assertTrue( iter.hasNext() );
94 assertTrue( iter.next() == 1 );
95 assertTrue( iter.hasNext() );
96 assertTrue( iter.next() == 2 );
97 assertTrue( ! iter.hasNext() );
99 assertTrue( iter.next() == 1 );
101 assertTrue( iter.next() == 2 );
102 assertTrue( ! iter.hasNext() );
109 while ( iter.hasNext() ) {
110 Lcp.push_back( iter.next() );
120 #define dim(V) ( sizeof(V)/sizeof(*V) )
122 int VEC[] = { 1, 2, 3, 4, 5 };
125 L.push_back( iter.
next() );
135 #warning Macro [const_error] already defined
140 std::list<long> Lcp, L;
141 assertTrue( Lcp.empty() );
144 while ( iter.hasNext() ) {
145 Lcp.push_back( iter.next() );
150 assertTrue( L == Lcp );
152 assertTrue( IT == iter && !( IT.
hasNext() ) && !( IT != iter ) );
156 std::list<long> Lcp, L;
157 assertTrue( Lcp.empty() );
158 L = longlist(
"( 1 2 3 4 5 )" );
159 const std::list<long> & L_const = L;
161 while ( iter.hasNext() ) {
162 Lcp.push_back( iter.next() );
164 assertTrue( L == Lcp );
166 assertTrue( IT == iter && !( IT.
hasNext() ) && !( IT != iter ) );
180 Iter iter( L.begin(),L.end() );
181 while ( iter.hasNext() ) {
187 template <
typename C>
205 typedef std::list<long>::const_iterator IterFwd;
206 typedef std::reverse_iterator<IterFwd> IterBck;
211 while ( itFwd.hasNext() && itBck.hasNext() ) {
212 if ( itFwd.next() != itBck.next() ) {
213 assertTrue(
"palindrome error" &&
false );
216 assertTrue( !itFwd.hasNext() && !itBck.hasNext() );
220 typedef std::list<long>::const_iterator Iter;
225 if ( itFwd.
next() != itBck.
next() ) {
226 assertTrue(
"palindrome error" &&
false );
237 typedef std::list<long>::const_iterator Iter;
240 assertTrue( itFwd.
next() == 1 );
247 assertTrue( itBck.
next() == 5 );
258 typedef typename C::const_iterator Iter;
263 if ( itFwd.
next() != itBck.
next() ) {
270 template <
typename C>
272 typedef typename C::const_iterator IterFwd;
273 typedef typename std::reverse_iterator<IterFwd> IterBck;
278 while ( itFwd.hasNext() && itBck.hasNext() ) {
279 if ( itFwd.next() != itBck.next() ) {
283 return ( !itFwd.hasNext() && !itBck.hasNext() );
334 bool palindromo(
const std::list< std::string >& L);
336 assertTrue(
palindromo( str2list(
"[ 1 2 3 2 1 ]") ) );
337 assertFalse(
palindromo( str2list(
"[ 1 2 3 2 0 ]") ) );
338 assertTrue(
palindromo( str2list(
"[ r a d a r ]") ) );
339 assertFalse(
palindromo( str2list(
"[ M A J E M ]") ) );
361 while ( iter.hasNext() ) {
362 switch (trngl++ % 3) {
364 long & l = iter.
next(); l++;
368 long * p = & iter.next(); (*p)++;
384 while ( itFwd.hasNext() && itBck.hasNext() ) {
386 L.push_back( itFwd.next() );
387 L.push_back( itBck.next() );
388 if ( itFwd.current() == itBck.current() ) {
394 assertTrue( L.size() != 7 );
395 assertTrue( n == 3 );
396 assertTrue( itFwd.next() == 3 );
397 assertTrue( itBck.next() == 3 );
408 while ( iter.hasNext() ) {
409 i++; assertTrue( i == iter.
next() );
413 while ( iter.hasNext() ) {
414 i++; assertTrue( i == iter.
next() );
416 assertTrue( L1.empty() );
425 i--; assertTrue( i == iter.
next() );
429 i--; assertTrue( i == iter.
next() );
437 std::list<long> L, Lcp;
441 iter123.
set( L.begin(), L.end() );
444 assertTrue( i == iter123.
next() );
450 assertTrue( i == iter45.
next() );
457 std::list<long> L, Lcp;
461 iter123.
set( L.begin(), L.end() );
464 assertTrue( i == iter123.
next() );
471 assertTrue( i == iter45.
next() );
477 assertTrue( L.empty() );
487 while ( iter.hasNext() ) {
488 assertTrue( ! L.empty() );
489 long *pL = & iter.
next(); i++;
490 assertTrue( i == *pL );
493 assertTrue( L.empty() );
520 assertTrue( L ==
"abcdefghijklmno" &&
"Tree_BF" );
526 assertTrue( ! iter.
hasNext() &&
"Tree_BF" );
529 assertTrue( iter.
hasNext() &&
"Tree_BF" );
530 assertTrue(
'A' == iter.
next().Data() &&
"Tree_BF" );
531 assertTrue( ! iter.
hasNext() &&
"Tree_BF" );
538 T.
Child(1).Change_Child(2,
'2');
539 T.
Child(1).Child(2).Change_Child(3,
'3');
540 iter.
set(T); L.clear();
545 assertTrue( L ==
"A123" &&
"Tree_BF" );
561 assertTrue( L ==
"0123456" &&
"Tree_BF" );
579 assertTrue( L ==
"FBGADICEH" &&
"Tree_BF" );
599 assertTrue( L ==
"ABCDEFGHIJKLMNO" &&
"Tree_BF" );
614 assertTrue( L ==
"abfghcdeijlmnok" &&
"Tree_PLR" );
620 assertTrue( ! iter.
hasNext() &&
"Tree_PLR" );
623 assertTrue( iter.
hasNext() &&
"Tree_PLR" );
624 assertTrue(
'A' == iter.
next().Data() &&
"Tree_PLR" );
625 assertTrue( ! iter.
hasNext() &&
"Tree_PLR" );
641 assertTrue( L ==
"0134256" &&
"Tree_PLR" );
659 assertTrue( L ==
"FBACEDGIH" &&
"Tree_PLR" );
679 assertTrue( L ==
"ABDHIEJKCFLMGNO" &&
"Tree_PLR" );
694 assertTrue( L ==
"fbghacdieljnmok" &&
"Tree_LPR" );
700 assertTrue( ! iter.
hasNext() &&
"Tree_LPR" );
703 assertTrue( iter.
hasNext() &&
"Tree_LPR" );
704 assertTrue(
'A' == iter.
next().Data() &&
"Tree_LPR" );
705 assertTrue( ! iter.
hasNext() &&
"Tree_LPR" );
721 assertTrue( L ==
"3140526" &&
"Tree_LPR" );
722 assertTrue( L !=
"314526" &&
"Tree_LPR [T.Root() missing]" );
741 assertTrue( L ==
"CAEBDFGHI" &&
"Tree_LPR" );
742 assertTrue( L !=
"CAEDHI" &&
"Tree_LPR [ BFG missing ]" );
743 assertTrue( L !=
"CAEBDFGHIH" &&
"Tree_LPR [Extra H]" );
744 assertTrue( L !=
"CAEBDFG" &&
"Tree_LPR [ HI missing ]" );
764 assertTrue( L ==
"HDIBJEKALFMCNGO" &&
"Tree_LPR" );
765 assertTrue( L !=
"HDIJEKLFMNGO" &&
"Tree_LPR [ BAC missing ]" );
780 assertTrue( L ==
"fghbcdilnomjkea" &&
"Tree_LRP" );
786 assertTrue( ! iter.
hasNext() &&
"Tree_LRP" );
789 assertTrue( iter.
hasNext() &&
"Tree_LRP" );
790 assertTrue(
'A' == iter.
next().Data() &&
"Tree_LRP" );
791 assertTrue( ! iter.
hasNext() &&
"Tree_LRP" );
807 assertTrue( L ==
"3415620" &&
"Tree_LRP" );
825 assertTrue( L ==
"CEADBHIGF" &&
"Tree_LRP [Wabe]" );
826 assertTrue( L !=
"CEADBHIF" &&
"Tree_LRP [ G missing ]" );
846 assertTrue( L ==
"HIDJKEBLMFNOGCA" &&
"Tree_LRP [Wabe]" );
847 assertTrue( L !=
"HIDJKEBLMFNOGA" &&
"Tree_LRP [ C missing ]" );
1076 Random iter( 15, 271828 );
1078 std::cout << iter.
next() << std::endl;
1088 template <
class Collection>
1092 ITER iter( C.begin(), C.end() );
1093 while ( iter.hasNext() ) {
1094 std::cout << iter.
next();
1102 #include "Tree_Ex.h"
1110 std::cout << tester.report();
1114 std::cout <<
"useIterator( L ); ==> ";
1116 assert( L.empty() );
Iterador sobre una colección.
int main()
Test ==> main() ==> iterJava().
std::list< long > makeList_long(const char *V)
Iterador Izquierda-Derecha-Proceso.
const TL::Tree< E > next()
Iterator::next().
void set(Iter first, Iter end)
Establece que la iteración se hará desde first hasta antes de end.
Iterador Izquierda-Proceso-Derecha.
void test_examplePtr()
Test ==> iterJava<> ==> examplePtr().
void generateRandom()
Ejemplo de uso de iteraciones Java como generadores.
const TL::Tree< E > next()
Iterator::next().
Test ==> iterJava<>.
void set(const TL::Tree< E > &T)
Iterator::set().
const TL::Tree< E > next()
Iterator::next().
void test_palindrome()
Test ==> iterJava<> ==> palindrome().
void test_const_example()
Test ==> iterJava<> ==> const_example().
bool isBackward() const
Retorna true si la iteración va hacia atrás, en reversa.
bool palindromo(const std::list< std::string > &L)
Regresa true si al recorrer el contenedor "L" hacia adelante se obtiene el mismo resultado que al rec...
void make_A_H(TL::Tree< char > &T)
T = ( F ( B ( A ( C E ) D ) ) G ( I ( H ) ) ).
void useIterator(Collection &C)
Ejemplo de uso de la clase de iteración iterJava<>.
Tree Graft(unsigned n, Tree &o)
Injerta "o" para que sea el "n"-ésimo hijo de "*this".
void make_0_6(TL::Tree< char > &T)
T = ( 0 ( 1 ( 3 4 ) 2 ( 5 6 ) ) ).
void test_erase()
Test ==> iterJava<> ==> erase().
void test_palindromo()
Test ==> iterJava<> ==> palindrome().
void test_set_CCC()
Test ==> iterJava<> ==> set(CCC).
void make_A_O(TL::Tree< char > &T)
T = ( A ( B ( D ( H I) E ( J K ) ) C ( F ( L M ) G ( N O ) ) ) ).
bool hasNext() const
Iterator::hasNext().
std::iterator_traits< Iter >::reference next()
Retorna el siguiente element de la iteración.
bool run()
Test ==> iterJava<> ==> run().
Random(unsigned n=1, long seed=3145159)
Iterator::init()
void const_compile_error(std::list< long > &L)
Implementación en la que se muestra que un const_iterator no se puede usar para eliminar valores...
bool isReverse() const
Retorna true si la iteración va hacia atrás, en reversa.
void test_Tree_PLR()
Test ==> iterJava<> ==> Tree_PLR().
void test_example()
Test ==> iterJava<> ==> example().
bool hasNext() const
Iterator::hasNext().
void set(const TL::Tree< E > &T)
Iterator::set().
Encapsulamiento C++ de un generador como una iteración Java.
void make_a_o(TL::Tree< char > &T)
T = ( a ( b ( f g h ) c d e ( i j ( l m ( n o ) ) k ) ).
Iterador Izquierda-Derecha-Proceso.
void test_setReverse()
Test ==> iterJava<> ==> setReverse().
void Erase()
Elimina el árbol y sus descendientes.
bool isPalindrome(const C &CCC)
Retorna true si CCC es un palíndromo.
void test_Tree_LPR()
Test ==> iterJava<> ==> Tree_LPR().
Iterador por niveles para el árbol.
bool hasNext() const
Iterator::hasNext().
void setReverse()
Establece que el iterador irá hacia atrás, en reversa.
bool hasNext() const
Iterator::hastNext()
bool isForward() const
Retorna true si la iteración es natural, desde el primero al útlimo.
Iterador por niveles para el árbol.
Los métodos para trabajar con árboles regresan "referencias" que son sub-árboles. ...
void set(const TL::Tree< E > &T)
Iterator::set().
const long & next()
Iterator::next()
bool hasNext() const
Iterator::hasNext().
bool hasNext() const
Retorna true si la iteración tiene más elementos.
void test_next()
Test ==> iterJava<> ==> next().
Iteradores Java para C++.
void set(const TL::Tree< E > &T)
Iterator::set().
Iterador Proceso-Izquierda-Derecha.
Tree Child(unsigned n) const
Acceso al "n"-ésimo hijo.
void test_isPalindrome()
Test ==> iterJava<> ==> isPalindrome().
Iterador Izquierda-Proceso-Derecha.
const TL::Tree< E > next()
Iterator::next().
void test_assign()
Test ==> iterJava<> ==> assign(CCC).
void test_Tree_LRP()
Test ==> iterJava<> ==> Tree_LRP().
void test_Tree_BF()
Test ==> iterJava<> ==> Tree_BF().
Tree Change_Child(unsigned n, const value_type &d)
Sustituye por "d" el valor almacenado en el hijo número "n" del árbol.
Iterador Proceso-Izquierda-Derecha.