void test_rastrillaje_mover_hacia_hippie() { Driver campus; campus.crearCampus(10,10); Dicc<Agente,aed2::Posicion> agentes; Agente a = 1; aed2::Posicion p; p.x = 1; p.y = 1; agentes.Definir(a,p); campus.comenzarRastrillaje(agentes); aed2::Posicion ph; ph.x = 5; ph.y = 1; Nombre h = "hippie"; campus.ingresarHippie(h,ph); campus.moverAgente(a); aed2::Posicion p4 = campus.posAgente(a); ASSERT(p4.x == 2 && p4.y == 1); }
void test_rastrillaje_Mover_hacia_hippie() { Campus camp(10,10); Dicc<Agente,Posicion> agentes; Agente a = 1; Posicion p; p.x = 1; p.y = 1; agentes.Definir(a,p); Rastrillaje rast(camp,agentes); Posicion ph; ph.x = 5; ph.y = 1; Nombre h = "hippie"; rast.IngresarHippie(ph,h); rast.MoverAgente(a); Posicion p4 = rast.PosAgente(a); ASSERT(p4.x == 2 && p4.y == 1); }
Driver::Registro RNRS(const modulos::Registro& r){ // Registro Nuestro a Registro Suyo const Dicc<String,modulos::Dato> dc = r.DameDic(); typename Dicc<String,modulos::Dato>::const_Iterador it = dc.CrearIt(); Driver::Registro res; while(it.HaySiguiente()){ Driver::Dato d = DNDS( it.SiguienteSignificado() ); res.Definir( it.SiguienteClave(), d); it.Avanzar(); } return res; }
/** * Ejemplo de caso de test, con llamadas a las rutinas de aserción * definidas en mini_test.h */ void test_ciudad_simple() { Conj<Estacion> estaciones; estaciones.Agregar("Belgrano"); estaciones.Agregar("Retiro"); estaciones.Agregar("Martinez"); Driver caba(estaciones); caba.AgregarSenda("Belgrano", "Retiro", "(trenDePasajeros | trenDeCarga) & !trenDeLaAlegria"); caba.AgregarSenda("Martinez", "Retiro", "trenDeLaAlegria"); caba.AgregarSenda("Martinez", "Belgrano", "trenDePasajeros"); Conj<Caracteristica> r1, r2, r3; r1.Agregar("trenDePasajeros"); r2.Agregar("trenDeCarga"); r3.Agregar("trenDeLaAlegria"); caba.Entrar(r1,"Belgrano"); // RUR 0 caba.Entrar(r2,"Retiro"); // RUR 1 caba.Entrar(r3,"Martinez"); // RUR 2 ASSERT_EQ(caba.CantidadEstaciones(), 3); ASSERT_EQ(caba.CantidadRobotsActivos(), 3); ASSERT_EQ(caba.CantidadDeSendasParaEstacion("Belgrano"), 2); caba.Mover(0,"Retiro"); // RUR 0: 0 infracciones caba.Mover(0,"Martinez"); // RUR 0: 1 infracciones caba.Mover(1,"Belgrano"); // RUR 1: 0 infracciones caba.Mover(1,"Martinez"); // RUR 1: 1 infracciones caba.Mover(2,"Belgrano"); // RUR 2: 1 infracciones caba.Mover(2,"Retiro"); // RUR 2: 2 infracciones Dicc<RUR,Nat> infraccionesRobots; // Chequeo infracciones iterando los robots for (Nat i = 0; i< caba.CantidadRobotsActivos(); ++i) infraccionesRobots.Definir(caba.IesimoRobotActivo(i),caba.CantInfraccionesIesimoRobotActivo(i)); ASSERT_EQ(infraccionesRobots.Significado(0), 1); ASSERT_EQ(infraccionesRobots.Significado(1), 1); ASSERT_EQ(infraccionesRobots.Significado(2), 2); ASSERT_EQ(caba.ElMasInfractor(),2); // Vuela un robot caba.Inspeccion("Retiro"); ASSERT_EQ(caba.CantidadRobotsActivos(),2); }
void Inicializacion() { Nat filas = 3; Nat columnas = 3; Campus* campus = new Campus(filas, columnas); Dicc<Agente, Posicion> agentes; agentes.Definir(1,Posicion(0,0)); agentes.Definir(2,Posicion(2,2)); CampusSeguro* c = new CampusSeguro(campus,agentes); delete c; delete campus; }
void test_captura_estudiante() { Driver campus; campus.crearCampus(10,10); Dicc<Agente,Posicion> agentes; Agente a = 1; Agente a2 = 2; Agente a3 = 3; Posicion p; p.x = 1; p.y = 1; Posicion p2; p2.x = 2; p2.y = 2; Posicion p3; p3.x = 3; p3.y = 1; agentes.Definir(a,p); agentes.Definir(a2,p2); agentes.Definir(a3,p3); campus.comenzarRastrillaje(agentes); Posicion pe; pe.x = 2; pe.y = 1; Nombre e = "pepe"; campus.ingresarEstudiante(e,pe); ASSERT(campus.cantSanciones(a)==1); ASSERT(campus.cantSanciones(a2)==1); ASSERT(campus.cantSanciones(a3)==1); ASSERT(campus.conMismasSanciones(a).Cardinal() == 3 ); ASSERT(campus.conMismasSanciones(a2).Cardinal() == 3 ); ASSERT(campus.conMismasSanciones(a3).Cardinal() == 3 ); Nat c = campus.conKSanciones(1).Cardinal(); ASSERT(c == 3); Nat c2 = campus.conKSanciones(0).Cardinal(); ASSERT(c2 == 0 ); }
void IngresarHippies(){ Nat filas = 3; Nat columnas = 3; Campus* campus = new Campus(filas, columnas); Dicc<Agente, Posicion> agentes; agentes.Definir(1,Posicion(0,0)); agentes.Definir(2,Posicion(2,2)); CampusSeguro* c = new CampusSeguro(campus,agentes); c->IngresaHippie("luis", Posicion(2,0)); c->IngresaHippie("julian", Posicion(1,0)); delete c; delete campus; }
void test_comenzar_rastrillaje_simple() { Campus camp(10,10); Dicc<Agente,Posicion> agentes; Agente a = 1; Posicion p; p.x = 1; p.y = 1; agentes.Definir(a,p); Rastrillaje rast(camp,agentes); ASSERT(rast.cantAgentes() == 1); }
void test_comenzar_rastrillaje_simple() { Driver campus; campus.crearCampus(10,10); Dicc<Agente,aed2::Posicion> agentes; Agente a = 1; aed2::Posicion p; p.x = 1; p.y = 1; agentes.Definir(a,p); campus.comenzarRastrillaje(agentes); ASSERT(campus.cantAgentes() == 1); }
void test_captura_hippie_entre_agentes() { Driver campus; campus.crearCampus(10,10); Dicc<Agente,aed2::Posicion> agentes; Agente a = 1; Agente a2 = 2; Agente a3 = 3; aed2::Posicion p; p.x = 1; p.y = 1; aed2::Posicion p2; p2.x = 2; p2.y = 2; aed2::Posicion p3; p3.x = 3; p3.y = 1; agentes.Definir(a,p); agentes.Definir(a2,p2); agentes.Definir(a3,p3); campus.comenzarRastrillaje(agentes); aed2::Posicion ph; ph.x = 2; ph.y = 1; Nombre h = "hippie"; campus.ingresarHippie(h,ph); ASSERT(campus.cantHippiesAtrapados(a) == 1); ASSERT(campus.cantHippiesAtrapados(a2) == 1); ASSERT(campus.cantHippiesAtrapados(a3) == 1); ASSERT(campus.masVigilante() == a || campus.masVigilante() == a2 || campus.masVigilante() == a3); }
void test_captura_hippie_entre_agentes() { Campus camp(10,10); Dicc<Agente,Posicion> agentes; Agente a = 1; Agente a2 = 2; Agente a3 = 3; Posicion p; p.x = 1; p.y = 1; Posicion p2; p2.x = 2; p2.y = 2; Posicion p3; p3.x = 3; p3.y = 1; agentes.Definir(a,p); agentes.Definir(a2,p2); agentes.Definir(a3,p3); Rastrillaje rast(camp,agentes); Posicion ph; ph.x = 2; ph.y = 1; Nombre h = "hippie"; rast.IngresarHippie(ph,h); ASSERT(rast.CantHippiesAtrapados(a) == 1); ASSERT(rast.CantHippiesAtrapados(a2) == 1); ASSERT(rast.CantHippiesAtrapados(a3) == 1); ASSERT(rast.MasVigilante() == a || rast.MasVigilante() == a2 || rast.MasVigilante() == a3); }
void test_mas_vigilante() { // 3 primeras lineas antes de que ingresen los estudiantes // 1 2 3 4 5 // 1 | A | | A | | O // 2 | | A | | O | // 3 ... // Los hippies ingresan en (2,1) y (4,1) los huecos. El Agente en (3,1) se transforma en el mas vigilante Driver campus; campus.crearCampus(10,10); aed2::Posicion o; o.x = 4; o.y = 2; campus.agregarObstaculo(o); aed2::Posicion o2; o2.x = 5; o2.y = 1; campus.agregarObstaculo(o2); Dicc<Agente,aed2::Posicion> agentes; Agente a = 1; Agente a2 = 2; Agente a3 = 3; aed2::Posicion p; p.x = 1; p.y = 1; aed2::Posicion p2; p2.x = 2; p2.y = 2; aed2::Posicion p3; p3.x = 3; p3.y = 1; agentes.Definir(a,p); agentes.Definir(a2,p2); agentes.Definir(a3,p3); campus.comenzarRastrillaje(agentes); aed2::Posicion ph; ph.x = 2; ph.y = 1; Nombre h = "hippie"; campus.ingresarHippie(h,ph); aed2::Posicion ph2; ph2.x = 4; ph2.y = 1; Nombre h2 = "hippie2"; campus.ingresarHippie(h2,ph2); ASSERT(campus.cantHippiesAtrapados(a) == 1); ASSERT(campus.cantHippiesAtrapados(a2) == 1); ASSERT(campus.cantHippiesAtrapados(a3) == 2); ASSERT(campus.masVigilante() == a3); }
campusSeguro::campusSeguro(campus c, Dicc<Agente,Posicion> d) { campus camp = c; DiccPalabra<Posicion> estyHip;// creo un DiccTrie vacio. campusSeguro::DatosPos tup; tup.id = 4; tup.tag = "libre"; tup.placa = 0; Nat cantidadFilas=c.Filas(); Nat cantidadColumnas=c.Columnas(); diccMatriz<campusSeguro::DatosPos> datosMatriz(cantidadFilas,cantidadColumnas,tup); diccHash<Agente,campusSeguro::Datos> dicc(d.CantClaves()); // creo dicchash de tamaño d.Claves().Cardinal() diccHash<Agente,campusSeguro::Datos>::Iterador itHashVacio = dicc.CrearIt(); tup.datosAgente = itHashVacio; ConjsEqu<Agente> equSan; // creo un EqusEqu vacio y lo guardo en la variable equSan. campusSeguro::DatosSanciones KSan; Nat i = 0; Nat j = 0; while( i < c.Filas() ) { while( j< c.Columnas()) { //Posicion pos(i,j); // creo una posicion (i,j). Posicion p; p.x = i; p.y = j; campusSeguro::DatosPos data; // ESTA VARIABLE NO SE SI VA DENTRO DEL SCOPE DEL WHILE, xq SE BORRA. if( _campus.Posocupada(p)) { data.id = 0; data.tag = "ocupada"; data.placa = 0; data.datosAgente = itHashVacio; datosMatriz.Definir(p, data); } j++; }// endwhile i++; }// endwhile Dicc<Agente,Posicion>::Iterador it; it = d.CrearIt(); while( it.HaySiguiente() ) { campusSeguro::DatosPos data; // ESTA VARIABLE NO SE SI VA DENTRO DEL SCOPE DEL WHILE, xq SE BORRA. campusSeguro::Datos dataH; Posicion pos; Agente plak; ConjsEqu<Agente>::Iterador itEqu; plak = it.SiguienteClave(); pos = it.SiguienteSignificado(); itEqu = equSan.relacionar(0, plak); dataH.pos = pos; dataH.Sanciones = 0; dataH.hippiesAtrapados = 0; dataH.claseConMismasSanciones = itEqu; data.id = 3; data.tag = "agente"; data.placa = plak; data.datosAgente = dicc.Definir(plak, dataH); // definir retorna un iterador de Dicc. datosMatriz.Definir(pos, data); it.Avanzar(); } Arreglo<TuplaAgYSan> nuevoArreglo(1); // creo array de 1 posicion KSan.arreglo = nuevoArreglo; // meto el arreglo en el campo arreglo de KSan. KSan.buffer = false; KSan.itMenosSanciones = equSan.CrearIt(); // el masvigilante al comienzo de la instancia campusSeguro es cualquier vigilante: campusSeguro::DatosAgentesyAtrapados elMas; Dicc<Agente,Posicion>::Iterador itAgts = d.CrearIt(); elMas.agente = itAgts.SiguienteClave();// el primer agente que encuentre. elMas.cantAtrapados = 0; // incio la instancia: _campus = camp; _estudiantes = estyHip; _hippies = estyHip; Conj<Agente> conjuntoDeAgentes; // conjunto vacio que almacenará agentes Dicc<Agente,Posicion>::Iterador itDiccAgentes = d.CrearIt(); while(itDiccAgentes.HaySiguiente()) // voy llenando el conjunto con los agentes del diccionario. { conjuntoDeAgentes.AgregarRapido(itDiccAgentes.SiguienteClave()); itDiccAgentes.Avanzar(); } _agentes = conjuntoDeAgentes; datosAgentes = dicc; grilla = datosMatriz; _masVigilante = elMas; equivalenciaSanciones = equSan; KSanciones = KSan; Dicc<Agente,Posicion>::Iterador it2; it2 = d.CrearIt(); } // fin funcion constructora (rastrillaje).
void primerRutina(){ Driver dr; dr.crearCampus(3,5); /*if(dr.columnas() == 3 && dr.filas() == 5){ cout << "Las filas y columnas estan bien." << endl; }*/ cout << "Campus Vacío." << endl; /* PANTALLA A SIMULAR H X E X - X - - X A - A - A A DONDE '-' ES NADA 'H' ES HIPPIE 'A' ES AGENTE Y 'E' ES ESTUDIANTE TESTEO: >>MOVER AGENTES ESTUDIANTE Y HIPPIE A POSICIONES NO VÁLIDAS O NO POSIBLES DE MOVER Y QUE SIGAN IGUALES. >>INTRODUCIR HIPPIES Y ESTUDIANTES SUCESIVAMENTE EN LA ESQUINA INFERIOR IZQUIERDA Y IR VIENDO AVANCE EN PUNTAJES Y SANCIONES >>BLOQUEAR AGENTES >>MOVER TODOS AGENTES OTRA VEZ PARA DEJAR UNA BUENA SALIDA DISPONIBLE */ dr.agregarObstaculo({2,1}); dr.agregarObstaculo({1,2}); dr.agregarObstaculo({3,2}); dr.agregarObstaculo({3,3}); cout << "Campus con solo Obstátuclos." << endl; Dicc<Agente,aed2::Posicion> d; d.Definir(1,{1,4}); d.Definir(2,{2,5}); d.Definir(4,{3,4}); d.Definir(3,{3,5}); dr.comenzarRastrillaje(d); cout << "Campus con solo Obstátuclos y agentes." << endl; cout << dr << endl; dr.ingresarEstudiante("Estudiante base",{3,1}); dr.ingresarHippie("Hippie base",{1,1}); cout << "Con un Hippie y un Estudiante." << endl; cout << dr << endl; //Parece que los estudiantes por requiere tiene que tener una posición donde moverse aed2::Posicion p1 = dr.posEstudianteYHippie("Estudiante base"); /*dr.moverEstudiante("Estudiante base",abajo); dr.moverEstudiante("Estudiante base",abajo); dr.moverEstudiante("Estudiante base",abajo); cout << dr << endl;*/ aed2::Posicion p2 = dr.posEstudianteYHippie("Estudiante base"); /*dr.moverEstudiante("Estudiante base",izq); dr.moverEstudiante("Estudiante base",izq); dr.moverEstudiante("Estudiante base",izq); cout << dr << endl;*/ aed2::Posicion p3 = dr.posEstudianteYHippie("Estudiante base"); //dr.moverEstudiante("Estudiante base",der); //dr.moverEstudiante("Estudiante base",der); //dr.moverEstudiante("Estudiante base",der); cout << dr << endl; //assert( !posicionesIguales(p1,p2) || !posicionesIguales(p2, p3) || !dr.ocupada(p1) || !dr.ocupada(p2) || !dr.ocupada(p3)); //out << "No bardeo moviendo el estudiante Encerrado." << endl; p1 = dr.posEstudianteYHippie("Hippie base"); dr.moverHippie("Hippie base"); p2 = dr.posEstudianteYHippie("Hippie base"); dr.moverHippie("Hippie base"); dr.moverHippie("Hippie base"); p3 = dr.posEstudianteYHippie("Hippie base"); cout<< "primer assert : " << ( !posicionesIguales(p1, p2) || !posicionesIguales(p2, p3) || !dr.ocupada(p3) || !dr.ocupada(p2) || !dr.ocupada(p1) ) << endl; assert( !posicionesIguales(p1, p2) || !posicionesIguales(p2, p3) || !dr.ocupada(p3) || !dr.ocupada(p2) || !dr.ocupada(p1)); cout << "No bardeo moviendo el hippie Encerrado." << endl; cout << dr << endl; p1 = dr.posAgente(3); dr.moverAgente(3); p2 = dr.posAgente(3); dr.moverAgente(3); p3 = dr.posAgente(3); assert( !posicionesIguales(p1, p2) || !posicionesIguales(p2, p3) || !dr.ocupada(p3) || !dr.ocupada(p2) || !dr.ocupada(p1)); cout << "No bardeo moviendo el Agente Encerrado." << endl << endl << endl; cout << dr << endl; p1 = dr.posAgente(4); dr.moverAgente(4); cout << dr << endl; p2 = dr.posAgente(4); dr.moverAgente(4); cout << dr << endl; p3 = dr.posAgente(4); assert( posicionesIguales(p1, p2) || posicionesIguales(p2, p3) || !dr.ocupada(p3) || dr.ocupada(p2) || dr.ocupada(p1)); cout << "Se movió el agente 4 bien." << endl; /* CASO COMENTADO: EL REQUIERE DICE QUE NO DEBERÌAN ENTRAR ALUMNOS EN POS OCUPADAS */ //No debería poder entrar /*for(Nat i =1; i < 4 ; i++){ dr.ingresarHippie("Alto Recursante",{i,1}); cout << " lo ingrese? "<< endl; cout << dr << endl; } cout << dr << endl; p1 = dr.posEstudianteYHippie("Alto Recursante"); assert(dr.ocupada(p1));*/ aed2::Agente poli = dr.masVigilante(); cout << "Mas vigilante: " << poli << endl; cout << "Cantidad de hippis atrapados: " << dr.cantHippiesAtrapados(poli) << endl; cout << "Cantidad de sanciones: "<< dr.cantSanciones(poli) << endl; aed2::Conj<aed2::Agente> conMismasSanciones = dr.conMismasSanciones(poli); aed2::Conj<aed2::Agente> conMismasSancionesAux = dr.conKSanciones(dr.cantSanciones(poli)); aed2::Conj<aed2::Agente> conKSanciones = dr.conKSanciones(0); cout << "Cardinal con mismas sanciones: "<< dr.conMismasSanciones(poli).Cardinal() << endl; cout << "Cardinal con mismas sanciones: "<< dr.conKSanciones(dr.cantSanciones(poli)).Cardinal() << endl; cout << "Cardinal con mismas sanciones: "<< dr.conKSanciones(0) << endl; //Parece que no tenemos una igualdad de conjuntos desarrollada; //assert( !(conMismasSanciones == conKSanciones) || !(conMismasSancionesAux == conKSanciones)); //asique hacemos esto y confiamos en alá cout << ( !conjuntosIguales(conMismasSanciones, conKSanciones) || !conjuntosIguales(conMismasSancionesAux, conKSanciones) ) << endl; assert( ( !conjuntosIguales(conMismasSanciones, conKSanciones) || !conjuntosIguales(conMismasSancionesAux, conKSanciones) ) ); cout << dr << endl; /* //ver que parametro toma iesimoAgente aed2::Agente agenteAux; for(Nat i =1; i < 5 ; i++){ agenteAux = dr.iesimoAgente(i); assert( dr.cantSanciones(agenteAux) != dr.cantHippiesAtrapados(agenteAux) || dr.conKSanciones( dr.cantSanciones(agenteAux) ) != dr.conMismasSanciones(agenteAux) || dr.conKSanciones( dr.cantSanciones(dr.masVigilante()) ) != dr.conMismasSanciones(agenteAux) ); } cout << "Todos los agentes estan bien inicializados." << endl;*/ /* //Empiezo a poner y sacar estudiantes en la pos (1,5) y voy testeando conKSanciones, y viendo cuando ya no pueden moverse por bloquearse aed2::Posicion posClave(1,5); for (Nat i =0 ; i< 15 ; i ++){ dr.ingresarEstudiante("ElBRAYAN", posClave); assert ( posClave != dr.posEstudianteYHippie("ElBRAYAN") || !dr.ocupada(posClave) ); cout << "Se agrega por vez Num: " << i << " un estudiante." << endl; cout << dr <<endl; dr.moverEstudiante("ElBRAYAN", abajo); cout << dr << endl; cout << "Agentes con 0 sanciones: " << dr.conKSanciones(0) << endl; cout << "Agentes con " << i+1 << " sanciones: " << dr.conKSanciones(i+1) << endl; } //Empiezo a poner y sacar Hippies en la pos (1,5) y voy testeando conKSanciones, y viendo cuando ya no pueden moverse por bloquearse for (int i =0 ; i< 15 ; i ++){ cout << "Se agrega por vez Num: " << i+1 << " un hippie." << endl; dr.ingresarHippie("ElBRAYAN", posClave); cout << dr <<endl; assert ( posClave == dr.posEstudianteYHippie("ElBRAYAN") || dr.ocupada(posClave) ); assert ( dr.cantHippiesAtrapados( dr.masVigilante() ) != i+1 ); //SOLO PUEDO ACCEDER POR masVigilante a un agente? patetico.... } cout << "Los agentes incrementaron satisfactoriamente sus atrapadas." << endl; cout << "Agentes con 15 sanciones: " << dr.conKSanciones(15) << endl; cout << "Agentes con 0 sanciones: " << dr.conKSanciones(0) << endl; cout << dr<< endl; //Veamos si los bloqueados pueden moverse; Conj<Agente> agentesQuietos = dr.conKSanciones(15); Conj<Agente>::const_Iterador itAgentesQuietos = agentesQuietos.crearIt(); while( itAgentesQuietos.HaySiguiente() ){ dr.moverAgente(itAgentesQuietos.Siguiente()); cout << dr << endl; itAgentesQuietos.Avanzar(); } //Veamos si los no bloqueados pueden moverse; Conj<Agente> agentesNoQuietos = dr.conKSanciones(0); Conj<Agente>::Iterador itAgentesNoQuietos = agentesNoQuietos.crearIt(); while( itAgentesNoQuietos.HaySiguiente() ){ dr.moverAgente(itAgentesNoQuietos.Siguiente()); cout << dr << endl; itAgentesNoQuietos.Avanzar(); }*/ }