+/* vim: set et sts=4 sw=4 fdm=indent fdn=1 fo+=t tw=80:
+ *
+ * Taller de Programación (75.42).
+ *
+ * Ejercicio Número 3:
+ * Lista de figuras.
+ *
+ * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
+ * Puede copiar, modificar y distribuir este programa bajo los términos de
+ * la licencia GPL (http://www.gnu.org/).
+ *
+ * Creado: sáb sep 20 19:42:44 ART 2003
+ *
+ * $Id$
+ */
+
+/**
+ * \file
+ * Hace varios chequeos para probar si anda bien la
+ * \ref DLList "lista doblemente enlazada".
+ */
+
+#include "dllist.h"
+
+#include <cstdlib>
+#include <cstdio>
+#include <cassert>
+
+/**
+ * Programa para probar la DLList.
+ *
+ * \return EXIT_SUCCESS o código de error devuelto por abort() si hubo un
+ * error.
+ */
+int main(void) {
+ DLList lista;
+ int a=1, b=2, c=3, d=4, e=5, f=6, g=7, h=8;
+
+ printf("Chequeo si está vacía: ");
+ assert(lista.empty());
+ printf("OK!\n");
+
+ printf("Chequeo si no tiene más elementos: ");
+ assert(!lista.have_more());
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al inicio: ", a);
+ assert(lista.unshift(&a));
+ printf("OK!\n");
+
+ printf("Chequeo que no esté vacía: ");
+ assert(!lista.empty());
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al final: ", b);
+ assert(lista.push(&b));
+ printf("OK!\n");
+
+ printf("Chequeo que no esté vacía: ");
+ assert(!lista.empty());
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al inicio: ", c);
+ assert(lista.unshift(&c));
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al inicio: ", d);
+ assert(lista.unshift(&d));
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al final: ", e);
+ assert(lista.push(&e));
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al final: ", f);
+ assert(lista.push(&f));
+ printf("OK!\n");
+
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &f);
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al final: ", g);
+ assert(lista.push(&g));
+ printf("OK!\n");
+
+ printf("Agrego elemento '%i' al inicio: ", h);
+ assert(lista.unshift(&h));
+ printf("OK!\n");
+
+ printf("Obtengo el primer elemento: ");
+ assert(lista.begin() == &h);
+ printf("OK!\n");
+
+ printf("Chequeo si hay más elementos: ");
+ assert(lista.have_more());
+ printf("OK!\n");
+
+ printf("Obtengo el elemento anterior elemento: ");
+ assert(lista.prev() == NULL);
+ printf("OK!\n");
+
+ printf("Chequeo que no haya más elementos: ");
+ assert(!lista.have_more());
+ printf("OK!\n");
+
+ printf("Obtengo el último elemento: ");
+ assert(lista.end() == &g);
+ printf("OK!\n");
+
+ printf("Chequeo si hay más elementos: ");
+ assert(lista.have_more());
+ printf("OK!\n");
+
+ printf("Obtengo el próximo elemento elemento: ");
+ assert(lista.next() == NULL);
+ printf("OK!\n");
+
+ printf("Chequeo que no haya más elementos: ");
+ assert(!lista.have_more());
+ printf("OK!\n");
+
+ printf("Recorro la lista...\n");
+ printf("Elemento 1: ");
+ assert(lista.begin() == &h);
+ printf("OK!\n");
+ printf("Elemento 2: ");
+ assert(lista.next() == &d);
+ printf("OK!\n");
+ printf("Elemento 3: ");
+ assert(lista.next() == &c);
+ printf("OK!\n");
+ printf("Elemento 4: ");
+ assert(lista.next() == &a);
+ printf("OK!\n");
+ printf("Elemento 5: ");
+ assert(lista.next() == &b);
+ printf("OK!\n");
+ printf("Elemento 6: ");
+ assert(lista.next() == &e);
+ printf("OK!\n");
+ printf("Elemento actual (6): ");
+ assert(lista.current() == &e);
+ printf("OK!\n");
+ printf("Elemento anterior (5): ");
+ assert(lista.prev() == &b);
+ printf("OK!\n");
+ printf("Elemento siguiente (6 de nuevo): ");
+ assert(lista.next() == &e);
+ printf("OK!\n");
+ printf("Elemento 7: ");
+ assert(lista.next() == &f);
+ printf("OK!\n");
+ printf("Elimino elemento 7: ");
+ assert(lista.remove_current() == &f);
+ printf("OK!\n");
+ printf("Me dejó en el elmento 8 (ahora 7): ");
+ assert(lista.current() == &g);
+ printf("OK!\n");
+ printf("Elemento 8: ");
+ assert(lista.next() == NULL);
+ printf("OK!\n");
+ printf("Chequeo que no haya más elementos: ");
+ assert(!lista.have_more());
+ printf("OK!\n");
+
+ printf("Saco el primer elemento: ");
+ assert(lista.shift() == &h);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &d);
+ printf("OK!\n");
+
+ printf("Saco el último elemento: ");
+ assert(lista.pop() == &g);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &e);
+ printf("OK!\n");
+
+ printf("Saco el último elemento: ");
+ assert(lista.pop() == &e);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &b);
+ printf("OK!\n");
+
+ printf("Saco el último elemento: ");
+ assert(lista.pop() == &b);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &a);
+ printf("OK!\n");
+
+ printf("Saco el primer elemento: ");
+ assert(lista.shift() == &d);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &c);
+ printf("OK!\n");
+
+ printf("Saco el primer elemento: ");
+ assert(lista.shift() == &c);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == &a);
+ printf("OK!\n");
+
+ printf("Saco el primer elemento: ");
+ assert(lista.shift() == &a);
+ printf("OK!\n");
+ printf("Chequeo elemento actual: ");
+ assert(lista.current() == NULL);
+ printf("OK!\n");
+
+ printf("Chequeo si está vacía: ");
+ assert(lista.empty());
+ printf("OK!\n");
+
+ return EXIT_SUCCESS;
+}
+