Este es el .cpp
#include "lista.h" #include <iostream> #include <sstream> #include <string> #include <cassert> #include <cstdlib> using namespace std;
template<class T> void asegurar(const Lista<T>& l, string s) { ostringstream out; l.mostrarLista(out); string t = out.str(); if (s != t) { cerr << s << " != " << t << endl; assert(false); } }
template<class T> void asegurar(const Lista<T>& l, const Lista<T>& lp) { ostringstream out; lp.mostrarLista(out); asegurar(l, out.str()); }
void randList(Lista<int>& l, int n) { while(!l.esVacia()) { l.eliminarDesdeLaDerecha(); } while(n--) { l.insertarALaDerecha(rand()%1000); } }
#define RUNTEST(t) { cerr << "Corriendo test " << #t << endl; t (); cerr << "Terminado test " << #t << endl; }
void testVacia() { Lista<int> l; Lista< Lista<int> > ll; Lista<int> lc(l); assert(l.esVacia()); assert(ll.esVacia()); assert(lc.esVacia()); asegurar(l, "[]"); asegurar(ll, "[]"); asegurar(lc, "[]"); }
void testCopia() { Lista<int> l; randList(l, 10); Lista< Lista<int> > ll; ll.insertarALaIzquierda(l); l.eliminarDesdeLaDerecha(); ll.insertarALaIzquierda(l); l.eliminarDesdeLaIzquierda(); ll.insertarALaDerecha(l); Lista<int> lc(l); Lista< Lista<int> > llc(ll); asegurar(lc, l); asegurar(llc, ll); }
void testIns() { Lista<int> l; l.insertarALaDerecha(4); asegurar(l, "[4]"); l.insertarALaDerecha(5); asegurar(l, "[4,5]"); l.insertarALaIzquierda(3); asegurar(l, "[3,4,5]"); l.insertarALaIzquierda(2); asegurar(l, "[2,3,4,5]"); l.insertarALaDerecha(6); asegurar(l, "[2,3,4,5,6]"); l.insertarALaIzquierda(1); asegurar(l, "[1,2,3,4,5,6]"); Lista< Lista<int> > ll; ll.insertarALaDerecha(l); l.insertarALaDerecha(7); ll.insertarALaIzquierda(l); l.eliminarDesdeLaIzquierda(); ll.insertarALaDerecha(l); ll.insertarALaIzquierda(l); asegurar(ll, "[[2,3,4,5,6,7],[1,2,3,4,5,6,7],[1,2,3,4,5,6],[2,3,4,5,6,7]]"); }
void testTamanio() { Lista<int> l; assert(l.tamanio() == 0); l.insertarALaDerecha(1); assert(l.tamanio() == 1); randList(l, 50); assert(l.tamanio() == 50); l.eliminarDesdeLaIzquierda(); for(int n=49;n>=0;--n) { assert(l.tamanio() == n); if (n > 0) { l.eliminarDesdeLaDerecha(); } else { assert(l.esVacia()); } } }
void testIzqDerElim() { Lista<int> l(1, -15); int iz = -15, de = -15; int ci = 0, cd = 0; assert(l.izquierda() == iz); assert(l.derecha() == de); for(int i=0;i<50;++i) { bool id = rand()%2 == 0; int e = rand()%1000; if (id) { l.insertarALaIzquierda(e); iz = e; ++ci; } else { l.insertarALaDerecha(e); de = e; ++cd; } assert(l.izquierda() == iz); assert(l.derecha() == de); } while(ci + cd > 0) { if (ci > cd) { --ci; l.eliminarDesdeLaIzquierda(); } else { --cd; l.eliminarDesdeLaDerecha(); } } asegurar(l, "[-15]"); assert(l.izquierda() == -15); assert(l.derecha() == -15); }
void testElimI() { Lista<int> l; randList(l, 50); for(int tam=l.tamanio();tam>0;tam=l.tamanio()) { l.eliminarIesimo(rand()%tam); assert(l.tamanio() == tam-1); } for(int i=1;i<=10;++i) { l.insertarALaDerecha(i); } asegurar(l, "[1,2,3,4,5,6,7,8,9,10]"); l.eliminarIesimo(5); asegurar(l, "[1,2,3,4,5,7,8,9,10]"); l.eliminarIesimo(0); asegurar(l, "[2,3,4,5,7,8,9,10]"); l.eliminarIesimo(7); asegurar(l, "[2,3,4,5,7,8,9]"); l.eliminarIesimo(2); asegurar(l, "[2,3,5,7,8,9]"); l.eliminarIesimo(2); asegurar(l, "[2,3,7,8,9]"); l.eliminarIesimo(3); asegurar(l, "[2,3,7,9]"); l.eliminarIesimo(2); asegurar(l, "[2,3,9]"); } void testGrupoTP() { Lista<int> l; l.insertarALaIzquierda(20); asegurar(l, "[20]"); l.eliminarDesdeLaDerecha(); asegurar(l, "[]"); l.insertarALaDerecha(7); asegurar(l, "[7]"); l.insertarALaIzquierda(12); asegurar(l, "[12,7]"); l.insertarALaDerecha(8); asegurar(l, "[12,7,8]"); l.eliminarDesdeLaDerecha(); asegurar(l, "[12,7]"); l.insertarALaIzquierda(9); asegurar(l, "[9,12,7]"); l.insertarALaDerecha(6); asegurar(l, "[9,12,7,6]"); l.eliminarIesimo(2); asegurar(l, "[9,12,6]"); l.eliminarIesimo(0); asegurar(l, "[12,6]"); cout << " la lista es: [12,6] (si esta bien hecha).... " << l << endl; Lista<int> h(4,5); cout<< "la lista [5,5,5,5] es : " << h << endl; }
int main() { RUNTEST(testVacia); RUNTEST(testCopia); RUNTEST(testIns); RUNTEST(testTamanio); RUNTEST(testIzqDerElim); RUNTEST(testElimI); RUNTEST(testGrupoTP); return 0; }
_________________ Pape Trataremos de buscarle una solución más útil que el famoso "reinicie el equipo y vea si mejora"
|