Advertisement
Guest User

test.cpp

a guest
May 21st, 2010
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.27 KB | None | 0 0
  1. #include "lista.h"
  2. #include <iostream>
  3. #include <sstream>
  4. #include <string>
  5. #include <cassert>
  6. #include <cstdlib>
  7. using namespace std;
  8.  
  9. template<class T>
  10. void asegurar(const Lista<T>& l, string s) {
  11.     ostringstream out;
  12.     l.mostrarLista(out);
  13.     string t = out.str();
  14.     if (s != t) {
  15.         cerr << s << " != " << t << endl;
  16.         assert(false);
  17.     }
  18. }
  19.  
  20. template<class T>
  21. void asegurar(const Lista<T>& l, const Lista<T>& lp) {
  22.     ostringstream out;
  23.     lp.mostrarLista(out);
  24.     asegurar(l, out.str());
  25. }
  26.  
  27. void randList(Lista<int>& l, int n) {
  28.     while(!l.esVacia()) {
  29.         l.eliminarCursor();
  30.     }
  31.     while(n--) {
  32.         l.insertarAtrasDelCursor(rand()%1000);
  33.     }
  34. }
  35.  
  36. #define RUNTEST(t) { cout << "Corriendo test " << #t << endl; t(); cout << "Terminado test " << #t << endl; }
  37.  
  38. void testVacia() {
  39.     Lista<int> l;
  40.     Lista< Lista<int> > ll;
  41.     Lista<int> lc(l);
  42.     assert(l.esVacia());
  43.     assert(ll.esVacia());
  44.     assert(lc.esVacia());
  45.     asegurar(l, "[]");
  46.     asegurar(ll, "[]");
  47.     asegurar(lc, "[]");
  48. }
  49.  
  50. void testCopia() {
  51.     Lista<int> l;
  52.     randList(l, 10);
  53.     Lista< Lista<int> > ll;
  54.     ll.insertarAtrasDelCursor(l);
  55.     l.eliminarCursor();
  56.     ll.insertarAtrasDelCursor(l);
  57.     Lista<int> lc(l);
  58.     Lista< Lista<int> > llc(ll);
  59.     asegurar(lc, l);
  60.     asegurar(llc, ll);
  61. }
  62.  
  63. void testIns() {
  64.     Lista<int> l;
  65.     l.insertarAdelanteDelCursor(4);
  66.     l.insertarAtrasDelCursor(6);
  67.     asegurar(l, "[4,6]");
  68.     l.insertarAdelanteDelCursor(2);
  69.     asegurar(l, "[2,4,6]");
  70.     l.insertarAdelanteDelCursor(3);
  71.     asegurar(l, "[2,3,4,6]");
  72.     l.insertarAtrasDelCursor(5);
  73.     asegurar(l, "[2,3,4,5,6]");
  74.     l.retrocederCursorAlInicio();
  75.     l.insertarAdelanteDelCursor(0);
  76.     asegurar(l, "[0,2,3,4,5,6]");
  77.     l.retrocederCursorAlInicio();
  78.     l.insertarAtrasDelCursor(1);
  79.     asegurar(l, "[0,1,2,3,4,5,6]");
  80.     l.avanzarCursorAlFinal();
  81.     l.insertarAtrasDelCursor(8);
  82.     asegurar(l, "[0,1,2,3,4,5,6,8]");
  83.     l.avanzarCursorAlFinal();
  84.     l.insertarAdelanteDelCursor(7);
  85.     asegurar(l, "[0,1,2,3,4,5,6,7,8]");
  86.     Lista< Lista<int> > ll;
  87.     ll.insertarAdelanteDelCursor(l);
  88.     l.eliminarCursor();
  89.     ll.insertarAdelanteDelCursor(l);
  90.     asegurar(ll, "[[0,1,2,3,4,5,6,7],[0,1,2,3,4,5,6,7,8]]");
  91. }
  92.  
  93. void testTamanio() {
  94.     Lista<int> l;
  95.     assert(l.tamanio() == 0);
  96.     l.insertarAdelanteDelCursor(1);
  97.     assert(l.tamanio() == 1);
  98.     randList(l, 50);
  99.     assert(l.tamanio() == 50);
  100. }
  101.  
  102. void testActual() {
  103.     Lista<int> l;
  104.     l.insertarAdelanteDelCursor(5);
  105.     for(int i = 1; i < 5; ++i)
  106.         l.insertarAdelanteDelCursor(i);
  107.     l.retrocederCursorAlInicio();
  108.     assert(l.actual() == 1);
  109.     l.retrocederCursor();
  110.     assert(l.actual() == 1);
  111.     l.avanzarCursor();
  112.     assert(l.actual() == 2);
  113.     l.avanzarCursorAlFinal();
  114.     assert(l.actual() == 5);
  115.     l.avanzarCursor();
  116.     assert(l.actual() == 5);
  117.     l.retrocederCursor();
  118.     assert(l.actual() == 4);
  119.  
  120.        
  121.     Lista<int> l2(l);
  122.     assert(l2.actual() == 1);
  123.     l2.retrocederCursor();
  124.     assert(l2.actual() == 1);
  125.     l2.avanzarCursor();
  126.     assert(l2.actual() == 2);
  127.     l2.avanzarCursorAlFinal();
  128.     assert(l2.actual() == 5);
  129.     l2.avanzarCursor();
  130.     assert(l2.actual() == 5);
  131.     l2.retrocederCursor();
  132.     assert(l2.actual() == 4);
  133.    
  134. }
  135.  
  136. void testEliminar() {
  137.     Lista<int> l;
  138.     for(int i=1;i<=10;++i) {
  139.         l.insertarAtrasDelCursor(i);
  140.         l.avanzarCursorAlFinal();
  141.     }
  142.     asegurar(l, "[1,2,3,4,5,6,7,8,9,10]");
  143.     l.eliminarCursor();
  144.     asegurar(l, "[1,2,3,4,5,6,7,8,9]");
  145.     l.eliminarCursor();
  146.     asegurar(l, "[1,2,3,4,5,6,7,8]");
  147.     l.retrocederCursorAlInicio();
  148.     l.eliminarCursor();
  149.     asegurar(l, "[2,3,4,5,6,7,8]");
  150.     l.eliminarCursor();
  151.     asegurar(l, "[3,4,5,6,7,8]");  
  152.     l.avanzarCursor();
  153.     l.eliminarCursor();
  154.     asegurar(l, "[3,5,6,7,8]");
  155.     l.eliminarCursor();
  156.     asegurar(l, "[3,6,7,8]");  
  157.     while(!l.esVacia())
  158.         l.eliminarCursor();
  159. }
  160.  
  161.  
  162. void testSanidad() {
  163.     Lista<int> l;
  164.     assert(l.tamanio() == 0);
  165.     l.insertarAtrasDelCursor(99);
  166.     assert(l.tamanio() == 1);
  167.     l.retrocederCursorAlInicio();
  168.     l.eliminarCursor();
  169.     assert(l.tamanio() == 0);
  170.     asegurar(l, "[]");
  171.    
  172.     int i = 0;
  173.     while(i < 10) l.insertarAtrasDelCursor(i++);
  174.     assert(l.tamanio() == 10);
  175.     while(i) {
  176.         l.insertarAdelanteDelCursor(i--);
  177.         assert(l.actual() == 0);
  178.     }
  179.     asegurar(l, "[10,9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1]");
  180.     assert(l.tamanio() == 20);
  181.     while(i++ < 10) {
  182.         l.eliminarCursor();
  183.         assert(l.actual() == 10-i || i == 10);
  184.     }
  185.     asegurar(l, "[10,9,8,7,6,5,4,3,2,1]");
  186.     assert(l.tamanio() == 10);
  187.    
  188.     Lista<Lista<Lista<int > > > llli;
  189.     llli.insertarAtrasDelCursor(Lista<Lista<int> >(3,Lista<int>(2,42)));
  190.     llli.insertarAdelanteDelCursor(Lista<Lista<int> >(1, Lista<int>(5, 71)));
  191.     asegurar(llli, "[[[71,71,71,71,71]],[[42,42],[42,42],[42,42]]]");
  192.     assert(llli.tamanio() == 2);
  193.     llli.avanzarCursorAlFinal();
  194.     assert(llli.tamanio() == 2);
  195.     llli.eliminarCursor();
  196.     assert(llli.tamanio() == 1);
  197.     asegurar(llli, "[[[71,71,71,71,71]]]");
  198.     asegurar(llli.actual(), Lista<Lista<int> >(1, Lista<int>(5,71)));
  199.    
  200.    
  201.    
  202. }
  203.  
  204. void testManejoDeErrores() {
  205.     Lista<char> foo;
  206.     foo.avanzarCursorAlFinal();
  207.     foo.avanzarCursor();
  208.     foo.retrocederCursorAlInicio();
  209.     foo.retrocederCursor();
  210.     foo.insertarAdelanteDelCursor('X');
  211.     asegurar(foo, "[X]");
  212.     foo.insertarAtrasDelCursor('Y');
  213.     asegurar(foo, "[X,Y]");
  214. }
  215.  
  216. int main() {
  217.     RUNTEST(testVacia);
  218.     RUNTEST(testCopia);
  219.     RUNTEST(testIns);
  220.     RUNTEST(testTamanio);
  221.     RUNTEST(testActual);
  222.     RUNTEST(testEliminar);
  223.     RUNTEST(testSanidad);
  224.     RUNTEST(testManejoDeErrores);
  225.     return 0;
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement