int listar_fabricas(base_t* base,bool imprimir){
    int hora,minutos;
    fabrica_t* fabrica;
    fabrica_t* anterior;
    if (lista_esta_vacia(base->fabricasavisitar)){
        //creo una lista con las fabricas que voy a visitar
        anterior = heap_desencolar(base->cerradofabricas);
        lista_insertar_ultimo(base->fabricasavisitar,(void*)anterior);
        while (!heap_esta_vacio(base->cerradofabricas)){
            fabrica = heap_desencolar(base->cerradofabricas);
            if (fabrica->horarioentrada>=anterior->horariosalida){
                lista_insertar_ultimo(base->fabricasavisitar,(void*)fabrica);
                anterior = fabrica;
            }
        }
    }
    if (imprimir){
        printf("Cantidad: %zu\n",lista_largo(base->fabricasavisitar));
        lista_iter_t* iterador = lista_iter_crear(base->fabricasavisitar);
        while(!lista_iter_al_final(iterador)){
            fabrica = lista_iter_ver_actual(iterador);
            conversion_horario(&hora,&minutos,fabrica->horarioentrada);
            printf("%s,%02d:%02d,",fabrica->idfabrica,hora,minutos);
            conversion_horario(&hora,&minutos,fabrica->horariosalida);
            printf("%02d:%02d\n",hora,minutos);
            lista_iter_avanzar(iterador);
        }
        lista_iter_destruir(iterador);
    }
    return 0;
}
int agregar_juguete(base_t* base,char* idfabrica,char* idjuguete,char* valor,char* peso){
    if (!hash_pertenece(base->fabricas,idfabrica)) return -1; //verifico si la fabrica existe
    //creo el juguete
    juguete_t* juguete = crear_juguete(idjuguete,valor,peso);
    if (juguete==NULL) return -2; //no se pudo crear el juguete
    fabrica_t* fabrica = hash_obtener(base->fabricas,idfabrica);
    if (lista_insertar_ultimo(fabrica->juguetes,(void*)juguete)!=true) return -3; //agrego el juguete y verifico si se pudo
    return 0;
}
Esempio n. 3
0
bool agregar_pedido(vector_t *vectorzonas, pedido_t* pedido)
{
	if (pedido==NULL)
		return false;
	int i;
	i=pedido->zona;
	lista_t* listaaux=vector_obtener(vectorzonas, i-1);
	lista_insertar_ultimo(listaaux,pedido);
	printf("Se agrego el pedido %s en la zona %d \n",pedido->nombre,i);
	return true;
}
int inscribir(char* padron, char* idc, base_t* basedatos){
    int pos = existe_curso(idc,basedatos->listadecursos);
    if (pos==-1) return -2;
    char* anotar = malloc(LPADRON*sizeof(char));
    strcpy(anotar,padron);
    curso_t* curso = conseguir_curso(idc,basedatos->listadecursos);
    if (alumno_inscripto(anotar,curso->inscriptos)!=-1){
        free(anotar);
        return -1;
    }
    lista_insertar_ultimo(curso->inscriptos,anotar);
    if (curso->vacantes<lista_largo(curso->inscriptos)) return 2;
    return 1;
}
Esempio n. 5
0
File: mesa.c Progetto: lucas794/TP1
bool agregar_votante( mesa_t* mesa_de_votos, char* tipo_dni, char* numero_dni )
{
	int iDNI = atoi(numero_dni);
	
	votante_t* votante_nuevo;
		
	if( (votante_nuevo = malloc(sizeof(votante_t))) == NULL )
			return false;
	
	votante_nuevo->tipoDNI = strdup(tipo_dni);
	votante_nuevo->numeroDNI = iDNI;
	votante_nuevo->voto_realizado = false;
				
	lista_insertar_ultimo(mesa_de_votos->personas_a_votar, votante_nuevo);
	return true;
}
Esempio n. 6
0
File: lista.c Progetto: nee47/backup
bool lista_iter_insertar(lista_iter_t *iter, void *dato){
  bool res;
  if (iter->actual == iter->lista->primero){
    res = lista_insertar_primero(iter->lista, dato);
    iter->actual = iter->lista->primero ;
    return res;
  }
  if(lista_iter_al_final(iter)){
    res = lista_insertar_ultimo(iter->lista, dato);
    iter->actual = iter->lista->ultimo;
    return res;
  }
  nodo_t* nodo = nodo_crear(dato);
  if (!nodo) return false;
  nodo->siguiente = iter->actual;
  iter->actual = nodo;
  iter->anterior->siguiente = nodo;
  iter->lista->largo++ ;
  return true;
}
Esempio n. 7
0
File: 0.c Progetto: nee47/backup
bool almacenar(hash_t* hash, lista_t** tabla, daton_t* paquete, unsigned long largo){
  bool resu;
  unsigned long indice = fh(paquete->clave, largo );
  if (!tabla[indice]){
    tabla[indice] = lista_crear();
  }
  lista_iter_t* iter_l = busqueda(tabla[indice], paquete->clave);
  if (lista_iter_al_final(iter_l)) {  //no lo encontro
    resu = lista_insertar_primero(tabla[indice], paquete);
    hash->tam++;
    lista_iter_destruir(iter_l);
    return resu;
  }
  daton_t* aux = lista_iter_borrar(iter_l);
  free(aux->clave);
  if (hash->destruir_dato) hash->destruir_dato(aux->dato); 
  free(aux);
  resu = lista_insertar_ultimo(tabla[indice], paquete);
  lista_iter_destruir(iter_l);
  return resu;
}
Esempio n. 8
0
bool lista_insertar(lista_t *lista, lista_iter_t *iter, void *dato) {
	// Si estoy en la primera posición del iterador
	if (!iter->anterior) {
		if (lista_insertar_primero(lista, dato)) iter->actual = lista->inicio;
		else return false;
	}
	// Si estoy en la última posición del iterador
	else if (lista_iter_al_final(iter)) {
		if (lista_insertar_ultimo(lista, dato)) iter->actual = lista->fin;
		else return false;
	}
	// Si estoy en cualquier otra posición del iterador
	else {
		nodo_t* nodo = nodo_crear(dato);
		if (!nodo) return false;
		iter->anterior->siguiente = nodo;
		nodo->siguiente = iter->actual;
		iter->actual = nodo;
		lista->largo++;
	}
	return true;
}
Esempio n. 9
0
// Inserta un nuevo elemento a la lista en la posicion del iterador, 
// devuelve falso en caso de error.
// Pre: la lista y el iterador fueron creados.
// Post: se insertó un nuevo elemento en la lista.
bool lista_insertar(lista_t *lista, lista_iter_t *iter, void *dato)
{
	/* Creamos una variable para verificar que, en caso de ser usadas,
	 * insertar_primero o insertar_ultimo funcionaron correctamente */
	bool exito = true;
	
	/* Si el iterador está al principio de la lista o la lista
	 * está vacía, insertamos en el primero */
	if (!iter->anterior && (exito = lista_insertar_primero(lista, dato))){
		iter->actual = lista->primero;
		return true;
	}
	
	/* Si el iterador está al final de la lista insertamos en el ultimo */
	if (lista_iter_al_final(iter) && (exito = lista_insertar_ultimo(lista, dato))){
		iter->actual = lista->ultimo;
		return true;
	}
	
	/* El iterador no está al final ni al principio de la lista */
	if (exito){
		/* Creamos el nuevo nodo con el dato a insertar */
		nodo_t* nodo_nuevo = crear_nodo(dato);
		if (!nodo_nuevo)
			return false;
		
		/* Ubicamos el nuevo nodo en la posicion en donde se 
		 * encontraba el iterador, iter->actual pasa a ser el nuevo
		 * nodo insertado e iter->anterior se mantiene constante */
		nodo_nuevo->prox = iter->actual;
		iter->actual = nodo_nuevo;
		iter->anterior->prox = nodo_nuevo;
		lista->cantidad++;
		return true;
	}
	
	/* lista_insertar_primero o lista_insertar_ultimo devolvió false */
	return false;
}
Esempio n. 10
0
void registrar_pedido(vector_t* vectorzonas){
	bool resultado;
	pedido_t *pedido=malloc(sizeof(pedido_t));
	lista_t *listaaux;
		if (pedido==NULL){
			printf("Ocurrio un error, pruebe de vuelta\n");
			return;
			};
	int cantidad=vector_obtener_cantidad(vectorzonas);

	printf("Ingrese la zona del cliente:\n");
	scanf("%d", &(pedido->zona));
	while ((pedido->zona)<1 || (pedido->zona)> cantidad){
		printf ("la zona tiene que se del 1 al %d. Ingresela de vuelta\n",cantidad);
		scanf("%d", &(pedido->zona));  
		  }
	
	printf("A continuacion ingrese el nombre del cliente:\n");
	scanf("%s", pedido->nombre);
	
	printf("Ahora ingrese la cantidad de pizzas pedidas:\n");
	scanf("%d", &(pedido->cantidad));
		while ((pedido->cantidad)<1 || (pedido->cantidad)> 5){
		printf ("la cantidad tiene que se del 1 al 5. Ingresela de vuelta\n");
		scanf("%d", &(pedido->cantidad));  
		  }
	
	pedido->preparado=false;
	
	listaaux = (lista_t*) vector_obtener(vectorzonas,pedido->zona-1);
	resultado=lista_insertar_ultimo(listaaux, pedido);
	
	if (resultado==false){
		printf("Error al ingresar pedido\n");
		}else {
			printf("Se agrego el pedido correctamente\n");
			}
	}
int sesion_inscribir(char* idc,base_t* basedatos, sesion_t* sesion){
    //verifico si hay sesion iniciada
    if (strcmp(sesion->padron,"00000")==0) return -3;
    //verifico si existe el curso
    int pos = existe_curso(idc,basedatos->listadecursos);
    if (pos==-1) return -2;
    //verifico si ya estaba programada la inscripcion
    bool yaanotado = false;
    inscripcion_t* inscripcion;
    lista_iter_t* iterador = lista_iter_crear(sesion->inscripciones);
    while(!lista_iter_al_final(iterador) && !yaanotado){
        inscripcion = (inscripcion_t*)lista_iter_ver_actual(iterador);
        if (strcmp(inscripcion->curso,idc)==0) yaanotado=true;
        lista_iter_avanzar(iterador);
    }
    lista_iter_destruir(iterador);
    if (yaanotado==true) return -4;
    //consigo el curso
    int i;
    iterador = lista_iter_crear(basedatos->listadecursos);
    for(i=0;i<pos;i++) lista_iter_avanzar(iterador);
    curso_t* curso = (curso_t*) lista_iter_ver_actual(iterador);
    lista_iter_destruir(iterador);
    //verifico si ya esta anotado en el curso
    if (alumno_inscripto(sesion->padron,curso->inscriptos)!=-1) return -1;
    //creo la inscripcion
    inscripcion = malloc(sizeof(inscripcion_t));
    if (inscripcion==NULL) return -5;
    //programo la inscripcion
    inscripcion->curso = malloc(LIDC*sizeof(char));
    strcpy(inscripcion->curso,idc);
    ((curso->vacantes)>lista_largo(curso->inscriptos)) ? (inscripcion->estado=false) : (inscripcion->estado=true);
    lista_insertar_ultimo(sesion->inscripciones,inscripcion);
    if (inscripcion->estado) return 1;
    return 2;
}
int agregar_curso(char* idc,char* descripcion,char* materia,char* vacantes, base_t* basedatos){
    if (existe_curso(idc,basedatos->listadecursos)!=-1) return -1;
    curso_t* curso = crear_curso(idc,descripcion,materia,vacantes);
    lista_insertar_ultimo(basedatos->listadecursos,curso);
    return 0;
}
Esempio n. 13
0
/* Pruebas */
void prueba_tipos() {

	// Declaro de variables
	lista_iter_t *iter;
	lista_t* lista;
	alumno_t* alumno1;
	alumno_t* alumno2;
	alumno_t* alumno3;
	int padron1=94111;
	int padron2=77777;
	int padron3=10104;

	// las inicializo
	lista = lista_crear();
	alumno1=alumno_crear(padron1);
	alumno2=alumno_crear(padron2);
	alumno3=alumno_crear(padron3);

	printf("---------------------------PRUEBAS---------------------------\n");

	//pruebo que este vacia
	print_test("Pruebo que la lista se crea vacía", lista_esta_vacia(lista) );

	//inserto 1er elemento
	print_test("Inserto primer elemento alumno1", lista_insertar_primero(lista,alumno1) );

	//inserto ultimo
	print_test("Inserto ultimo elemento alumno2", lista_insertar_ultimo(lista,alumno2) );

	//inesrto un nuevo ultimo
	print_test("Inserto ultimo elemento alumno3", lista_insertar_ultimo(lista,alumno3) );

	//veo el primero
	print_test("Veo el primer elemento(alumno1)", alumno1==lista_ver_primero(lista));

	//borro el primero y veo devuelta
	print_test("Borro el primero", lista_borrar_primero(lista));
	print_test("Veo el primer elemento(alumno2)", alumno2==lista_ver_primero(lista));

	//veo el largo de la lista
	print_test("Veo el largo de la lista (2)", 2==lista_largo(lista));

	//creo iterador
	iter= lista_iter_crear(lista);

	//pruebas del iterador
	print_test("Hago avanza al iterador", lista_iter_avanzar(iter));
	print_test("Veo elemento actual del iterador (alumno3)", alumno3==lista_iter_ver_actual(iter));
	print_test("Hago avanza al iterador", lista_iter_avanzar(iter));
	print_test("Veo si esta al final", lista_iter_al_final(iter));

	//pruebas de lista junto con iterador
	print_test("Inserto de nuevo alumno1", lista_insertar(lista,iter,alumno1));
	print_test("Lo borro", alumno1==lista_borrar(lista,iter));

	//inserto 1er elemento
	print_test("Inserto primer elemento alumno1", lista_insertar_primero(lista,alumno1) );
	//destruyo el iterador
	lista_iter_destruir(iter);
	//creo iterador
	iter= lista_iter_crear(lista);
	print_test("Destruyo iterador,lo creo devuelta y borro el primer elemento (alumno1)", alumno1==lista_borrar(lista,iter));
	destruir_dato(alumno1);
	//destruyo lista e iterador
	lista_iter_destruir(iter);
	lista_destruir(lista,destruir_dato);

}
Esempio n. 14
0
void lista_prueba(){
	
	//Pruebo crear listas
	lista_t* lista1 = lista_crear();
	lista_t* lista2 = lista_crear();
	lista_t* lista3 = lista_crear();
	
	print_test("Probando si lista1 se creo bien", lista1!=NULL);
	print_test("Probando si lista1 esta vacia", lista_esta_vacia(lista1));
	print_test("Probando si el largo de lista2 es 0", lista_largo(lista2)==0);
	
	int vector[]={ 1, 2, 3, 4};
	char vector2[]="hola que tal";
	
	// Probando insertar en la lista;
	
	print_test("Probando si se inserta al principio un elemento en la lista1", lista_insertar_primero(lista1, &vector));
	print_test("Probando si se inserta al final un elemento en la lista1", lista_insertar_ultimo(lista1, &vector2));
	
	// Probando el largo de la lista con 2 elementos
	
	print_test("Probando que el largo de la lista1 sea dos", lista_largo(lista1)==2);
	
	// Probando el lista borrar primero en la lista 1
	
	print_test("Probando si se borra el primer elemento en la lista1", lista_borrar_primero(lista1) == vector);
	
	// Probando el lista ver primero
	
	print_test("Probando ver el primero de la lista 1", lista_ver_primero(lista1) == vector2 );
	
	// Probando agregar al principio en lista 3
	
	print_test("Probando si se inserta al principio un elemento en la lista3", lista_insertar_primero(lista3, &vector));
	
	lista_insertar_ultimo(lista3, &vector2);
	
	// PRUEBAS CON EL ITERADOR CON LA LISTA 3
	
	lista_iter_t* iter = lista_iter_crear(lista3);
	
	// Probando el iter avanzar
	
	print_test("Probando el iter avanzar", lista_iter_avanzar(iter));

	//  Probando el iter ver actual
	
	print_test("Probando el iter ver actual", lista_iter_ver_actual(iter) == vector2);
	
	// Probando el iter al final
		
	print_test("Probando el iter avanzar", lista_iter_avanzar(iter));
	print_test("Probando el iter avanzar (no puede avanzar mas)", lista_iter_avanzar(iter) == false);

	print_test("Probando el iter al final", lista_iter_al_final(iter));
	print_test("Probando si el iter esta el final el ver_actual", lista_iter_ver_actual(iter) == NULL); 
	
	lista_iter_destruir(iter);
	
	// Probando lista_insertar con iterador
	
	lista_iter_t* iter2 = lista_iter_crear(lista2);
	
	char vector3[]="chau";
	
	print_test("Probando el lista_insertar en la lista con el iter", lista_insertar(lista2,iter2,&vector3));
	print_test("Probando ver el primero de la lista2", lista_ver_primero(lista2) == &vector3 );
	print_test("Probando borrar con el iter", lista_borrar(lista2,iter2) == vector3 );
	print_test("Probando el lista_ver_primero con los nodos borrados", lista_ver_primero(lista2) == NULL );
	print_test("Probando el largo de una lista vacia", lista_largo(lista2) == 0 );
	print_test("Probando el lista_borrar_primero en una lista vacia", lista_borrar_primero(lista2) == NULL );
	
	lista_iter_destruir(iter2);
	
	// Pruebo Agregar 30 Datos y luego borrarlos
	
	for ( int i=0 ; i < 30 ; i++){
		lista_insertar_ultimo(lista2, &i);
	}
	print_test("Probando el largo de la lista2 luego de agregar 30 elementos", lista_largo(lista2) == 30);
	
	lista_iter_t* iter3=lista_iter_crear(lista2);
	
	while (!lista_iter_al_final(iter3)){
		lista_borrar(lista2,iter3);
	}
	
	print_test("Probando que se borraron todos los elementos" , lista_largo(lista2) == 0);
	print_test("Prubando borrar un elemento en una lista vacia" , lista_borrar(lista2,iter3) == NULL);
	
	lista_iter_destruir(iter3);
	
	//Finalmente, pruebo si estan vacias las 3 listas
	
	print_test( "Probando que la lista1 no este vacia", lista_esta_vacia(lista1) == false );
	print_test( "Probando que la lista2 este vacia", lista_esta_vacia(lista2) );
	print_test( "Probando que la lista3 no este vacia", lista_esta_vacia(lista3) == false );
	
	//Elimino las 3 listas
	
	lista_destruir(lista1, NULL);
	lista_destruir(lista2, NULL);
	lista_destruir(lista3, NULL);
	
	/* ******************************************************************
	*               Pruebas con lista 4
	* *****************************************************************/
	
	//Creo otra lista y le inserto 10 nodos
	
	lista_t* lista4 = lista_crear();
	
	for( int num=1; num <= 10 ; num++){
		int elemento=1;
		lista_insertar_ultimo(lista4 , &elemento);
	}
	
	print_test("Probando largo de la lista 4", lista_largo(lista4) == 10 );
	
	lista_iter_t* iter4= lista_iter_crear(lista4);
	
	print_test("Probando que se creo el iter 4", iter4!=NULL);
	
	print_test("Probando que el iter 4 no este al final", lista_iter_al_final(iter4) == false);
	
	for (int j=1; j<=10; j++){
		lista_iter_avanzar(iter4);
	}
		
	print_test("Probando que el iter 4 este al final", lista_iter_al_final(iter4));
	
	char prueba[] = "prueba";
	
	print_test("Probando lista_insertar con el iter al final ", lista_insertar(lista4, iter4, &prueba));
	
	print_test("Probando que el iter 4 no este al final", lista_iter_al_final(iter4) == false);
	
	print_test("Probando avanzar con el iter 4 al final", lista_iter_avanzar(iter4));
	
	print_test("Probando lista_borrar con el iter 4 al final", lista_borrar(lista4,iter4) == NULL);
	
	print_test("Probando lista_insertar con el iter 4 al final ", lista_insertar(lista4, iter4, &prueba));
	
	print_test("Probando lista_borrar con el iter 4", lista_borrar(lista4,iter4) == prueba);
	
	for (int j=0; j<=10; j++){
		lista_borrar_primero(lista4);
	}
	
	print_test("Probando largo de la lista 4", lista_largo(lista4) == 0 );

	// elimino el iter 4
	
	lista_iter_destruir(iter4);


	//Elimino la lista
	
	lista_destruir(lista4, free);
	
	
	
	/* ******************************************************************
	*               Pruebas con lista 5
	* *****************************************************************/
	
	//Creo otra lista y le inserto 10 nodos
	
	lista_t* lista5 = lista_crear();
	
	// le creo un iter
	
	lista_iter_t* iter5= lista_iter_crear(lista5);
	
	print_test("Probando que se creo el iter 5", iter5!=NULL);
	
	for( int num=1; num <= 10 ; num++){
		char elemento2[]="hola";
		lista_insertar(lista5, iter5, &elemento2);
	}
	
	print_test("Probando largo de la lista 5", lista_largo(lista5) == 10 );
	
	print_test("Probando que el iter 5 no este al final", lista_iter_al_final(iter5) == false);
	
	char prueba2[] = "prueba";
	
	print_test("Probando lista_borrar con el iter 5 al principio", lista_borrar(lista5,iter5) != NULL);
	
	print_test("Probando lista_insertar con el iter 5 al principio", lista_insertar(lista5, iter5, &prueba2));
	
	print_test("Probando lista_borrar con el iter 5 ", lista_borrar(lista5,iter5) == prueba2);
	
	for (int j=0; j<=10; j++){
		lista_borrar(lista5, iter5);
	}
	
	print_test("Probando largo de la lista 5", lista_largo(lista5) == 0 );
	
	print_test("Probando que la lista 5 este vacia", lista_esta_vacia(lista5));
	
	print_test("Probando lista ver_primero de la lista 5", lista_ver_primero(lista5) == NULL);
	
	print_test("Probando avanzar con el iter 5 al final", lista_iter_avanzar(iter5) == false);
	
	print_test("Probando avanzar con el iter 5 al final", lista_iter_ver_actual(iter5) == NULL);
	
	
	// elimino el iter 5
	lista_iter_destruir(iter5);
	
	//Elimino la lista
	lista_destruir(lista5, free);


	/* ******************************************************************
	*               Pruebas con lista 6
	* *****************************************************************/
		
	// Creo una nueva Lista
		
	lista_t* lista6 = lista_crear();
	
	// le creo un iter
	
	lista_iter_t* iter6= lista_iter_crear(lista6);
	
	print_test("Probando que se creo el iter 6", iter6!=NULL);
	
	
	void* elemento = malloc(sizeof(void*)) ;
	
	print_test("Probando agregar un elemento con lista_insertar con la lista 6 vacia", lista_insertar(lista6, iter6, elemento));
	
	print_test("Probando largo de la lista 6", lista_largo(lista6) == 1 );
	
	print_test("Probando que el iter 6 no este al final", lista_iter_al_final(iter6) == false);
	
	print_test("Probando si puedo avanzar con el iter 6", lista_iter_avanzar(iter6));
	
	print_test("Probando que el iter 6 este al final", lista_iter_al_final(iter6));
		
	void* borrar=lista_borrar_primero(lista6);
	free(borrar);
	
	// elimino el iter 6
	
	lista_iter_destruir(iter6);

	//Elimino la lista 6
	
	lista_destruir(lista6, free);
	
	/* ******************************************************************
	*               Pruebas con lista 7
	* *****************************************************************/
	
	lista_t* lista7 = lista_crear();
	
	
	
	for (int x=1 ; x<=10 ; x++){
		lista_insertar_primero(lista7, &x);
	}
	
	lista_iter_t* iter7 = lista_iter_crear(lista7);
	
	print_test("Probando que el largo de la lista7 sea 10", lista_largo(lista7) == 10);
	
	while (!lista_iter_al_final(iter7)){
		lista_iter_avanzar(iter7);
	}
	
	void* y;
	
	print_test("Probando si se puede ver el elemento actual del iter", lista_iter_ver_actual(iter7) == NULL);
	print_test("Probando insetar un elemento al final de la lista7", lista_insertar(lista7, iter7, &y));
	print_test("Probando que el largo de la lista7 sea 11", lista_largo(lista7) == 11);
	print_test("Probando borrar el ultimo elemento de lista7", lista_borrar(lista7,iter7) == &y);
	print_test("Probando que el largo de la lista7 sea 10", lista_largo(lista7) == 10);
	print_test("Probando insetar un elemento al final de la lista7", lista_insertar(lista7, iter7, &y));
	print_test("Probando que el iter7 no quede al final", lista_iter_al_final(iter7) == false);
	
	
	lista_iter_destruir(iter7);
	lista_destruir(lista7, NULL);

	/* ******************************************************************
	*               Pruebas con lista 8
	* *****************************************************************/

	lista_t* lista8 = lista_crear();
	
	for (int x=1 ; x<=5 ; x++){
		lista_insertar_ultimo(lista8, &x);
	}
	print_test("Probando que el largo de la lista8 sea 5", lista_largo(lista8) == 5);
	
	lista_iter_t* iter8 = lista_iter_crear(lista8);
	
	int elem=0;
	print_test("Probando que el elemento actual del iter8 no es null", lista_iter_ver_actual(iter8) != NULL);
	print_test("Probando insertar al principio con el iter en lista8", lista_insertar(lista8, iter8, &elem));
	print_test("Probando que el largo de lista8 sea 6", lista_largo(lista8) == 6);
	print_test("Probando eliminar el primer elemento de la lista8 con el iter", lista_borrar(lista8, iter8) == &elem);
	print_test("Probado que el largo de la lista8 es 5", lista_largo(lista8) == 5);
	print_test("Probando insertar un elemento en la primera posicion de lista8", lista_insertar_primero(lista8, &elem));
	print_test("Probando que el actual del iter8 sea distinto que el primero de lista8", lista_ver_primero(lista8) != lista_iter_ver_actual(iter8));
	
	lista_iter_destruir(iter8);
	lista_destruir(lista8 , NULL);
	
	/* ******************************************************************
	*               Pruebas con lista 9
	* *****************************************************************/
	
	lista_t* lista9 = lista_crear();
	
	int num;
	
	print_test("Probando insertar el elemento en la lista9", lista_insertar_primero(lista9, &num));
	print_test("Probando que el largo de lista9 es 1", lista_largo(lista9));
	
	lista_iter_t* iter9 = lista_iter_crear(lista9);
	
	print_test("Probando que el elemento actual del iter9 no es null", lista_iter_ver_actual(iter9) != NULL);
	print_test("Probando borrar el elemento de lista9 con el iter", lista_borrar(lista9, iter9) == &num);
	print_test("Probando que el largo de lista9 es 0", lista_largo(lista9) == 0);
	print_test("Probando borrar un elemento de la lista9 que esta vacia", lista_borrar(lista9, iter9) == NULL);
	print_test("Probando avanzar en lista9 que esta vacia", lista_iter_avanzar(iter9) == false);
	print_test("Probando agregar un elemento con el iter9", lista_insertar(lista9, iter9, &num));
	print_test("Probando eliminar el ultimo elemento con el iter9", lista_borrar(lista9, iter9) == &num);
	print_test("Probando agregar un elemento en la lista9", lista_insertar_primero(lista9, &num));
	print_test("Probando eliminar el ultimo elemento con borrar primero", lista_borrar_primero(lista9) == &num);
	
	
	lista_iter_destruir(iter9);
	lista_destruir(lista9 , NULL);	
	
	lista_t* lista10= lista_crear();
	
	int i=0;
	
	print_test("Probando agregar un elemento a lista10", lista_insertar_primero(lista10 , &i));
	print_test("Probando eliminar primer elemento", lista_borrar_primero(lista10) != NULL);
	
	lista_destruir(lista10, NULL);
	
	

	
}
Esempio n. 15
0
File: mesa.c Progetto: lucas794/TP1
mesa_t* abrir_mesa(char *mesa_electoral, char *padron)
{
	mesa_t* la_mesa;
	
	if( !(la_mesa = malloc(sizeof(mesa_t))) )
		return NULL;
	
	la_mesa->estado = false;
	la_mesa->boletas_en_mesa = lista_crear();
	la_mesa->personas_a_votar = lista_crear();
	la_mesa->padron = lista_crear();
	
	if( !la_mesa->boletas_en_mesa || !la_mesa->personas_a_votar || !la_mesa->padron )
	{
		fprintf(stderr, "ERROR1\n");
		return NULL;
	}
	
	if( mesa_electoral == NULL || padron == NULL )
	{
		fprintf(stderr, "ERROR1\n");
		lista_destruir(la_mesa->boletas_en_mesa, NULL);
		lista_destruir(la_mesa->personas_a_votar, NULL);
		lista_destruir(la_mesa->padron, NULL);
		free(la_mesa);
		return NULL;
	}
	
	FILE *postulantes, *votantes;

	if( !(postulantes = fopen(mesa_electoral, "r")) )
	{
		fprintf(stderr, "ERROR2\n");
		lista_destruir(la_mesa->personas_a_votar, NULL);
		lista_destruir(la_mesa->boletas_en_mesa, NULL);
		lista_destruir(la_mesa->padron, NULL);
		free(la_mesa);
		return NULL;
	}
		
	if( !(votantes = fopen(padron, "r")) )
	{
		fprintf(stderr, "ERROR2\n");
		fclose(postulantes);
		lista_destruir(la_mesa->personas_a_votar, NULL);
		lista_destruir(la_mesa->boletas_en_mesa, NULL);
		lista_destruir(la_mesa->padron, NULL);
		free(la_mesa);
		return NULL;
	}
	char *linea_fixeada;
	fila_csv_t* parseado;
	
	while( (linea_fixeada = leer_linea(postulantes)) != NULL )
	{
		parseado = parsear_linea_csv(linea_fixeada, 5);
		boleta_t* nueva_boleta;
		
		if( ( nueva_boleta = malloc(sizeof(boleta_t)) ) == NULL )
		{
			lista_destruir(la_mesa->boletas_en_mesa, NULL);
			lista_destruir(la_mesa->personas_a_votar, NULL);
			lista_destruir(la_mesa->padron, NULL);
			fclose(postulantes);
			fclose(votantes);
			free(la_mesa);
			return NULL;
		}
		nueva_boleta->IDpartido	= atoi(obtener_columna(parseado, 0));
		nueva_boleta->nombrePartido	= strdup(obtener_columna(parseado, 1));
		nueva_boleta->presidente = strdup(obtener_columna(parseado, 2));
		nueva_boleta->gobernador = strdup(obtener_columna(parseado, 3));
		nueva_boleta->intendente = strdup(obtener_columna(parseado, 4));
		nueva_boleta->votos_recibidos[0] = 0;
		nueva_boleta->votos_recibidos[1] = 0;
		nueva_boleta->votos_recibidos[2] = 0;
		lista_insertar_ultimo(la_mesa->boletas_en_mesa, nueva_boleta);
		destruir_fila_csv(parseado, false);
	}
	
	while( (linea_fixeada = leer_linea(votantes)) != NULL )
	{
		parseado = parsear_linea_csv(linea_fixeada, 2);
		
		votante_t* nuevo_votante;
		
		if( ( nuevo_votante = malloc(sizeof(votante_t)) ) == NULL )
		{
			lista_destruir(la_mesa->boletas_en_mesa, destruir_boleta);
			lista_destruir(la_mesa->personas_a_votar, NULL);
			lista_destruir(la_mesa->padron, NULL);
			fclose(postulantes);
			fclose(votantes);
			free(la_mesa);
			return NULL;
		}
		nuevo_votante->tipoDNI = strdup(obtener_columna(parseado, 0));
		nuevo_votante->numeroDNI = atoi((obtener_columna(parseado, 1)));
		nuevo_votante->voto_realizado = false;
		lista_insertar_ultimo(la_mesa->padron, nuevo_votante);
		destruir_fila_csv(parseado, false);
	}
	fclose(votantes);
	fclose(postulantes);
	return la_mesa;
}
Esempio n. 16
0
/* PRUEBA_ABB */
void prueba_abb(void){
	
	//~ 
//~ // DATOS ESTATICOS    
char *val1 = "pez espada";
char *val2 = "puerco";
char *val3 = "carpintero";
char *val4 = "ornitorrinco";
char *val5 = "oso hormiguero";
char *val6 = "ballena franca";
char *val7 = "colibri";
char *val8 = "perro callejero";
char *val9 = "marsupial";
char *val10 = "mariposa";
char *val11 = "pavo real";

// Datos dinámicos tipo lista
lista_t* val12 = lista_crear();
lista_t* val13 = lista_crear();
lista_t* val14 = lista_crear();
lista_t* val15 = lista_crear();
lista_t* val16 = lista_crear();
lista_t* val17 = lista_crear();
lista_t* val18 = lista_crear();
lista_t* val19 = lista_crear();
lista_t* val20 = lista_crear();
lista_t* val21 = lista_crear();
lista_t* val22 = lista_crear();


lista_insertar_ultimo(val12, "a");
lista_insertar_ultimo(val12, "b");
lista_insertar_ultimo(val12, "c");
lista_insertar_ultimo(val13, "d");
lista_insertar_ultimo(val13, "e");
lista_insertar_ultimo(val14, "f");
lista_insertar_ultimo(val15, "g");
lista_insertar_ultimo(val16, "h");
lista_insertar_ultimo(val17, "i");
lista_insertar_ultimo(val17, "j");
lista_insertar_ultimo(val18, "k");
lista_insertar_ultimo(val19, "l");
lista_insertar_ultimo(val20, "m");
lista_insertar_ultimo(val22, "n");
lista_insertar_ultimo(val22, "o");

	
	// Creo un arbol vacio
	abb_t* arbol0 = abb_crear(*cmp, NULL);
	print_test("Prueba arbol0 vacio: ", arbol0);
	print_test("Cantidad de arbol0 es 0: ", abb_cantidad(arbol0) == 0);

	// Guardo clave 5, pez espada en la raiz de arbol0
	print_test("Guardo clave 52, pez espada en la raiz de arbol0: ", abb_guardar(arbol0, "52", val1));
	print_test("El 52 pertenece", abb_pertenece(arbol0, "52"));
	print_test("Cantidad de arbol0 es 1: ", abb_cantidad(arbol0) == 1);

	// Guardo clave 2, puerco en arbol0. Debe guardarse en el hijo izquierdo de 5.
	print_test("Guardo clave 2, puerco en arbol0: ", abb_guardar(arbol0, "2", val2));
	print_test("El 2 pertenece", abb_pertenece(arbol0, "2"));
	print_test("Cantidad de arbol0 es 2: ", abb_cantidad(arbol0) == 2);
	// Guardo clave 33, carpintero en arbol0. Debe guardarse en el hijo derecho de 2.
	print_test("Guardo clave 33, carpintero en arbol0: ", abb_guardar(arbol0, "33", val3));
	print_test("El 33 pertenece", abb_pertenece(arbol0, "33"));
	print_test("Cantidad de arbol0 es 3: ", abb_cantidad(arbol0) == 3);
	// Guardo clave 99, ornitorrinco en arbol0. Debe guardarse en el hijo derecho de 5.
	print_test("Guardo clave 99, ornitorrinco en arbol0: ", abb_guardar(arbol0, "99", val4));
	print_test("El 99 pertenece", abb_pertenece(arbol0, "99"));
	print_test("Cantidad de arbol0 es 4: ", abb_cantidad(arbol0) == 4);
	// Guardo clave 2, oso hormiguero en arbol0. Debe reemplazar a (2, puerco).
	print_test("Reemplazo dato de clave 2 por oso hormiguero en arbol0: ", abb_guardar(arbol0, "2", val5));
	// La cantidad debe haber permanecido constante.
	print_test("Cantidad de arbol0 es 4: ", abb_cantidad(arbol0) == 4);
//~ 
	//~ // Busco clave 2
	print_test("Busco clave 2 con abb_obtener, devuelve oso hormiguero: ", val5 == abb_obtener(arbol0, "2"));
	//~ // Busco clave 111, no existe
	print_test("Busco clave 111 con abb_obtener, devuelve NULL: ", NULL == abb_obtener(arbol0, "111"));
	//~ // Busco clave 33
	print_test("Busco clave 33 con abb_pertenece, devuelve true: ", abb_pertenece(arbol0, "33"));
	puts("");
	//~ // Busco clave 10, no pertenece
	print_test("Busco clave 10 con abb_pertenece, devuelve false: ", !abb_pertenece(arbol0, "10"));
//~ 
//~ 
	// Borrar
	print_test("Cantidad de arbol0 antes de borrar es 4: ", abb_cantidad(arbol0) == 4);
	print_test("Borro nodo hoja, clave 33, devuelve el dato carpintero: ", abb_borrar(arbol0, "33") == val3);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol0, "33"));
	print_test("Cantidad de arbol0 despues de borrar es 3: ", abb_cantidad(arbol0) == 3);
	print_test("Cantidad de hojas arbol0 despues de borrar es 2: ", abb_contar_hojas(arbol0) == 2);
//~ 
	print_test("Guardo clave 30, ballena franca en arbol0: ", abb_guardar(arbol0, "30", val6));
	print_test("Guardo clave -1, colibri en arbol0: ", abb_guardar(arbol0, "-1", val7));
	print_test("Guardo clave -6, perro callejero en arbol0: ", abb_guardar(arbol0, "-6", val8));
	print_test("Guardo clave 15, marsupial en arbol0: ", abb_guardar(arbol0, "15", val9));
	print_test("Cantidad de hojas arbol0 es 3: ", abb_contar_hojas(arbol0) == 3);


	print_test("Borro nodo con un solo hijo, clave -1, devuelve el dato colibri: ", abb_borrar(arbol0, "-1") == val7);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol0, "-1"));
	print_test("Cantidad de arbol0 despues de borrar es 6: ", abb_cantidad(arbol0) == 6);
	print_test("Cantidad de hojas arbol0 despues de borrar es 3: ", abb_contar_hojas(arbol0) == 3);

	print_test("Borro nodo con un solo hijo, clave 30, devuelve el dato ballena franca: ", abb_borrar(arbol0, "30") == val6);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol0, "30"));
	print_test("Cantidad de arbol0 despues de borrar es 5: ", abb_cantidad(arbol0) == 5);
	print_test("Cantidad de hojas arbol0 despues de borrar es 3: ", abb_contar_hojas(arbol0) == 3);

	print_test("Guardo clave -7, mariposa en arbol0: ", abb_guardar(arbol0, "-7", val10));
	print_test("Guardo clave 0, pavo real en arbol0: ", abb_guardar(arbol0, "0", val11));
	print_test("Cantidad de hojas arbol0 es 4: ", abb_contar_hojas(arbol0) == 4);

	print_test("Borro nodo con un dos hijos, clave 2, devuelve el dato oso hormiguero: ", abb_borrar(arbol0, "2") == val5);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol0, "2"));
	print_test("Cantidad de arbol0 despues de borrar es 6: ", abb_cantidad(arbol0) == 6);
	print_test("Cantidad de hojas arbol0 despues de borrar es 3: ", abb_contar_hojas(arbol0) == 3);

	print_test("Borro nodo raiz con un dos hijos, clave 52, devuelve el dato pez espada: ", abb_borrar(arbol0, "52") == val1);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol0, "52"));
	print_test("Cantidad de arbol0 despues de borrar es 5: ", abb_cantidad(arbol0) == 5);
	print_test("Cantidad de hojas arbol0 despues de borrar es 3: ", abb_contar_hojas(arbol0) == 2);
	//~ 
	abb_t* arbol3 = abb_crear(cmp, NULL);
	print_test("Guardo clave -7, mariposa en arbol3: ", abb_guardar(arbol3, "-7", val10));
	print_test("Busco clave -7 con abb_obtener, devuelve mariposa: ", val10 == abb_obtener(arbol3, "-7"));
	print_test("Borro nodo raiz sin hijos, clave -7, devuelve el dato mariposa: ", abb_borrar(arbol3, "-7") == val10);
	
	abb_destruir(arbol3);

	// Iterador externo
	printf("Iterador inorder con función de impresión: \n");
	abb_in_order(arbol0, printear_dato_est, NULL);

	// Iterador interno
	// Con arbol no vacio
	abb_iter_t* iter = abb_iter_in_crear(arbol0);
	print_test("Iterador interno (al final es false): ", !abb_iter_in_al_final(iter));
	const char* clave = abb_iter_in_ver_actual(iter);
	int clave_int = atoi(clave);
	print_test("Iterador interno (-7): ", clave_int == -7);
	abb_iter_in_avanzar(iter);
	clave = abb_iter_in_ver_actual(iter);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (-6)): ", clave_int == -6);
	abb_iter_in_avanzar(iter);
	clave = abb_iter_in_ver_actual(iter);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (0)): ",  clave_int == 0);
	print_test("Iterador interno (al final es false): ", !abb_iter_in_al_final(iter));
	abb_iter_in_avanzar(iter);
	clave = abb_iter_in_ver_actual(iter);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (15)): ",  clave_int == 15);
	abb_iter_in_avanzar(iter);
	clave = abb_iter_in_ver_actual(iter);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (99)): ",  clave_int == 99);
	abb_iter_in_avanzar(iter);
	print_test("Iterador interno (avanzar, al final): ", !abb_iter_in_ver_actual(iter));
	print_test("Iterador interno (al final es true): ", abb_iter_in_al_final(iter));
	abb_iter_in_destruir(iter);
	// Con arbol vacio
	abb_t* arbol1 = abb_crear(cmp, NULL);
	abb_iter_t* iter1 = abb_iter_in_crear(arbol1);
	print_test("Iterador interno, arbol vacio (ver actual es NULL): ", !abb_iter_in_ver_actual(iter1));
	print_test("Iterador interno, arbol vacio (al final es true): ", abb_iter_in_al_final(iter1));
	print_test("Iterador interno, arbol vacio (avanzar es false): ", !abb_iter_in_avanzar(iter1));
	abb_iter_in_destruir(iter1);


	// Destruir arbol
	abb_destruir(arbol0);
	abb_destruir(arbol1);


	/*Arbol con datos dinamicos tipo listas*/
	// Creo un arbol vacio
	abb_t* arbol2 = abb_crear(*cmp, *destruir_dato_lista);
	print_test("Prueba arbol2 vacio: ", arbol2);
	print_test("Cantidad de arbol2 es 0: ", abb_cantidad(arbol2) == 0);

	// Guardo clave 5, val12 en la raiz de arbol2
	print_test("Guardo clave 52, val12 en la raiz de arbol2: ", abb_guardar(arbol2, "52", val12));
	print_test("Cantidad de arbol2 es 1: ", abb_cantidad(arbol2) == 1);

	// Guardo clave 2, val13 en arbol2. Debe guardarse en el hijo izquierdo de 5.
	print_test("Guardo clave 2, val13 en arbol2: ", abb_guardar(arbol2, "2", val13));
	print_test("Cantidad de arbol2 es 2: ", abb_cantidad(arbol2) == 2);
	// Guardo clave 33, val14 en arbol2. Debe guardarse en el hijo derecho de 2.
	print_test("Guardo clave 33, val14 en arbol2: ", abb_guardar(arbol2, "33", val14));
	print_test("Cantidad de arbol2 es 3: ", abb_cantidad(arbol2) == 3);
	// Guardo clave 99, val15 en arbol2. Debe guardarse en el hijo derecho de 5.
	print_test("Guardo clave 99, val15 en arbol2: ", abb_guardar(arbol2, "99", val15));
	print_test("Cantidad de arbol2 es 4: ", abb_cantidad(arbol2) == 4);
	// Guardo clave 2, val16 en arbol2. Debe reemplazar a (2, val13). 
	print_test("Reemplazo dato de clave 2 por val16 en arbol2: ", abb_guardar(arbol2, "2", val16));
	// La cantidad debe haber permanecido constante.
	print_test("Cantidad de arbol2 es 4: ", abb_cantidad(arbol2) == 4);

	// Busco clave 2
	print_test("Busco clave 2 con abb_obtener, devuelve val16: ", val16 == abb_obtener(arbol2, "2"));
	// Busco clave 111, no existe
	print_test("Busco clave 111 con abb_obtener, devuelve NULL: ", NULL == abb_obtener(arbol2, "111"));
	// Busco clave 33
	print_test("Busco clave 33 con abb_pertenece, devuelve true: ", abb_pertenece(arbol2, "33"));
	// Busco clave 10, no pertenece
	print_test("Busco clave 10 con abb_pertenece, devuelve false: ", !abb_pertenece(arbol2, "10"));


	// Borrar
	print_test("Cantidad de arbol2 antes de borrar es 4: ", abb_cantidad(arbol2) == 4);
	print_test("Borro nodo hoja, clave 33, devuelve el dato val14: ", abb_borrar(arbol2, "33") == val14);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol2, "33"));
	print_test("Cantidad de arbol2 despues de borrar es 3: ", abb_cantidad(arbol2) == 3);
	print_test("Cantidad de hojas arbol2 despues de borrar es 2: ", abb_contar_hojas(arbol2) == 2);

	print_test("Guardo clave 30, val17 en arbol2: ", abb_guardar(arbol2, "30", val17));
	print_test("Guardo clave -1, val18 en arbol2: ", abb_guardar(arbol2, "-1", val18));
	print_test("Guardo clave -6, val19 en arbol2: ", abb_guardar(arbol2, "-6", val19));
	print_test("Guardo clave 15, val20 en arbol2: ", abb_guardar(arbol2, "15", val20));
	print_test("Cantidad de hojas arbol2 es 3: ", abb_contar_hojas(arbol2) == 3);


	print_test("Borro nodo con un solo hijo, clave -1, devuelve el dato val18: ", abb_borrar(arbol2, "-1") == val18);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol2, "-1"));
	print_test("Cantidad de arbol2 despues de borrar es 6: ", abb_cantidad(arbol2) == 6);
	print_test("Cantidad de hojas arbol2 despues de borrar es 3: ", abb_contar_hojas(arbol2) == 3);

	print_test("Borro nodo con un solo hijo, clave 30, devuelve el dato val17: ", abb_borrar(arbol2, "30") == val17);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol2, "30"));
	print_test("Cantidad de arbol2 despues de borrar es 5: ", abb_cantidad(arbol2) == 5);
	print_test("Cantidad de hojas arbol2 despues de borrar es 3: ", abb_contar_hojas(arbol2) == 3);

	print_test("Guardo clave -7, val21 en arbol2: ", abb_guardar(arbol2, "-7", val21));
	print_test("Guardo clave 0, val22 en arbol2: ", abb_guardar(arbol2, "0", val22));
	print_test("Cantidad de hojas arbol2 es 4: ", abb_contar_hojas(arbol2) == 4);

	print_test("Borro nodo con un dos hijos, clave 2, devuelve el dato val16: ", abb_borrar(arbol2, "2") == val16);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol2, "2"));
	print_test("Cantidad de arbol2 despues de borrar es 6: ", abb_cantidad(arbol2) == 6);
	print_test("Cantidad de hojas arbol2 despues de borrar es 3: ", abb_contar_hojas(arbol2) == 3);

	print_test("Borro nodo raiz con un dos hijos, clave 52, devuelve el dato val12: ", abb_borrar(arbol2, "52") == val12);
	print_test("Busco el nodo borrado con abb_pertenece, devuelve false: ", !abb_pertenece(arbol2, "52"));
	print_test("Cantidad de arbol2 despues de borrar es 5: ", abb_cantidad(arbol2) == 5);
	print_test("Cantidad de hojas arbol2 despues de borrar es 3: ", abb_contar_hojas(arbol2) == 2);

	// Iterador externo
	printf("Iterador inorder con funcion de impresion:\n");
	abb_in_order(arbol2, printear, NULL);


	// Iterador interno
	abb_iter_t* iter_Auto = abb_iter_in_crear(arbol2);
	int contador = 0;
	while (!abb_iter_in_al_final(iter_Auto)){
		abb_iter_in_avanzar(iter_Auto);
		contador++;
	}
	print_test("Iterador interno recorre todos los elementos: ", abb_cantidad(arbol2) == contador);
	abb_iter_in_destruir(iter_Auto);
		
	abb_iter_t* iter2 = abb_iter_in_crear(arbol2);
	print_test("Iterador interno (al final es false): ", !abb_iter_in_al_final(iter2));
	clave = abb_iter_in_ver_actual(iter2);
	clave_int = atoi(clave);
	print_test("Iterador interno (-7): ", clave_int == -7);
	abb_iter_in_avanzar(iter2);
	clave = abb_iter_in_ver_actual(iter2);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (-6)): ", clave_int == -6);
	abb_iter_in_avanzar(iter2);
	clave = abb_iter_in_ver_actual(iter2);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (0)): ",  clave_int == 0);
	print_test("Iterador interno (al final es false): ", !abb_iter_in_al_final(iter2));
	abb_iter_in_avanzar(iter2);
	clave = abb_iter_in_ver_actual(iter2);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (15)): ",  clave_int == 15);
	abb_iter_in_avanzar(iter2);
	clave = abb_iter_in_ver_actual(iter2);
	clave_int = atoi(clave);
	print_test("Iterador interno (avanzar (99)): ",  clave_int == 99);
	abb_iter_in_avanzar(iter2);
	print_test("Iterador interno (avanzar, al final): ", !abb_iter_in_ver_actual(iter2));
	print_test("Iterador interno (al final es true): ", abb_iter_in_al_final(iter2));
	abb_iter_in_destruir(iter2);

	// Destruir arbol
	abb_destruir(arbol2); // Destruyo val20, val21, val15, val19, val22. Ya destrui val13
	
	// Destruyo las listas que quedaron
	//~ lista_destruir(val12, NULL);
	//~ //lista_destruir(val13, NULL);
	//~ lista_destruir(val14, NULL);
	//~ lista_destruir(val16, NULL);
	//~ lista_destruir(val17, NULL);
	//~ lista_destruir(val18, NULL);
	//~ 
	// Nuevas pruebas
	
	cola_t* val23 = cola_crear();
	cola_t* val24 = cola_crear();
	char* clave2 = "2";
	char* clave3 = "3";


	cola_encolar(val23, "a");
	cola_encolar(val24, "d");

	abb_t* arbol4 = abb_crear(*cmp, destruir_cola);

	print_test("Cantidad de arbol4 es 0: ", abb_cantidad(arbol4) == 0);

	print_test("Guardo clave 2  en la raiz de arbol4: ", abb_guardar(arbol4, clave2, val23));
	print_test("Cantidad de arbol4 es 1: ", abb_cantidad(arbol4) == 1);
	print_test("Prueba abb_obtener clave 2 es val23: ", abb_obtener(arbol4, clave2) == val23);

	print_test("Borro clave 2: ", abb_borrar(arbol4, clave2) == val23);
	print_test("Cantidad de arbol4 es 0: ", abb_cantidad(arbol4) == 0);
	print_test("Prueba abb_obtener clave 2 es falso: ", !abb_obtener(arbol4, clave2));
	
	print_test("Guardo clave 2  en la raiz de arbol4: ", abb_guardar(arbol4, clave2, val24));
	print_test("Cantidad de arbol4 es 1: ", abb_cantidad(arbol4) == 1);
	print_test("Prueba abb_obtener clave 2 es val24: ", abb_obtener(arbol4, clave2) == val24);

	print_test("Reemplazo el valor de clave 2,  en arbol4: ", abb_guardar(arbol4, clave2, val23));
	print_test("Cantidad de arbol4 es 1: ", abb_cantidad(arbol4) == 1);
	print_test("Prueba abb_obtener clave 2 es val23: ", abb_obtener(arbol4, clave2) == val23);
	
	print_test("Borro clave 2: ", abb_borrar(arbol4, clave2) == val23);
	print_test("Cantidad de arbol4 es 0: ", abb_cantidad(arbol4) == 0);	
	print_test("Prueba abb_obtener clave 2 es falso: ", !abb_obtener(arbol4, clave2));
	
	print_test("Guardo clave 3,  en arbol4: ", abb_guardar(arbol4, clave3, val23));
	print_test("Cantidad de arbol4 es 1: ", abb_cantidad(arbol4) == 1);
	print_test("Prueba abb_obtener clave 3 es val23: ", abb_obtener(arbol4, clave3) == val23);

	print_test("Reemplazo clave 3,  en arbol4: ", abb_guardar(arbol4, clave3, val24));
	print_test("Cantidad de arbol4 es 1: ", abb_cantidad(arbol4) == 1);
	print_test("Prueba abb_obtener clave 3 es val24: ", abb_obtener(arbol4, clave3) == val24);

	print_test("Guardo clave 2  en la raiz de arbol4: ", abb_guardar(arbol4, clave2, val24));
	print_test("Cantidad de arbol4 es 2: ", abb_cantidad(arbol4) == 2);
	print_test("Prueba abb_obtener clave 2 es val24: ", abb_obtener(arbol4, clave2) == val24);
	
	print_test("Borro clave 3: ", abb_borrar(arbol4, clave3) == val24);
	print_test("Cantidad de arbol4 es 1: ", abb_cantidad(arbol4) == 1);
	print_test("Prueba abb_obtener clave 3 es falso: ", !abb_obtener(arbol4, clave3));

	//Modifico desde afuera clave2 (valor original "2"):
	clave2 = "33";
	// Sin embargo en el arbol sigue estando "2"
	print_test("Prueba abb_obtener clave 2 es val24: ", abb_obtener(arbol4, "2") == val24);

	print_test("Borro clave 2: ", abb_borrar(arbol4, "2") == val24);
	print_test("Cantidad de arbol4 es 0: ", abb_cantidad(arbol4) == 0);	
	print_test("Prueba abb_obtener clave 2 es falso: ", !abb_obtener(arbol4, "2"));

	
	abb_iter_t* iter4 = abb_iter_in_crear(arbol4);
	abb_iter_in_destruir(iter4);
	abb_iter_t* iter5 = abb_iter_in_crear(arbol4);

	print_test("Iterador interno (actual NULL): ",  !abb_iter_in_ver_actual(iter5));
	print_test("Iterador interno (avanzar falso): ",  !abb_iter_in_avanzar(iter5));
	
	abb_iter_in_destruir(iter5);

	//~ cola_destruir(val23, NULL);
	//~ cola_destruir(val24, NULL);
	//~ 
	abb_destruir(arbol4);


}