public void TestColaEquals() { ColaConcurrente <Persona> cola1 = new ColaConcurrente <Persona>(Factoria.CrearPersonas()); ColaConcurrente <Persona> cola2 = new ColaConcurrente <Persona>(Factoria.CrearPersonas()); ColaConcurrente <Persona> cola3 = cola1; ColaConcurrente <Persona> cola4 = new ColaConcurrente <Persona>(cola2); cola4.Extraer(); // Comprobamos que indica que 2 variables que apuntan a la misma referencia cola son iguales. Assert.IsTrue(cola1.Equals(cola3), "El método Equals() no indica que dos colas iguales lo sean."); // Comprobamos que indica que 2 colas iguales lo son. Assert.IsTrue(cola1.Equals(cola2), "El método Equals() no indica que dos colas iguales lo sean."); // Comprobamos que indica que colas distintas no son iguales Assert.IsFalse(cola1.Equals(null), "El método Equals() indica que dos colas son iguales cuando se le pasa null."); Assert.IsFalse(cola1.Equals(new ColaConcurrente <int>()), "El método Equals() indica que dos colas son iguales cuando se le pasa una cola de otro tipo."); Assert.IsFalse(cola1.Equals(cola4), "El método Equals() indica que dos colas son iguales cuando las colas tienen distinto tamaño."); cola2.Extraer(); cola2.Añadir(new Persona("X", "X", "X")); Assert.IsFalse(cola1.Equals(cola2), "El método Equals() indica que dos colas son iguales cuando tienen el mismo tamaño pero elementos distintos."); cola1.Extraer(); cola1.Añadir(new Persona("X", "X", "X")); Assert.IsTrue(cola1.Equals(cola2), "El método Equals() indica que dos colas son distintas cuando tienen los mismos elementos."); }
public void TestColaAñadir() { cola = new ColaConcurrente <int>(); cola.Añadir(5); Assert.AreEqual(1, cola.NumeroElementos, "Añadir un elemento en una cola vacía no incrementa el número de elementos a 1."); Assert.AreEqual("<-[5]<-", cola.ToString(), "Añadir() no añade el elemento correctamente"); Assert.AreEqual(5, cola.PrimerElemento()); cola.Añadir(6); Assert.AreEqual(2, cola.NumeroElementos, "Añadir un elemento a una cola con 1 elemento no incrementa el número de elementos a 2."); Assert.AreEqual("<-[5, 6]<-", cola.ToString(), "Añadir() no añade el elemento correctamente"); Assert.AreEqual(5, cola.PrimerElemento()); }
private void AñadirMismoElementoXVecesEnCola(object objectTupla) { var tupla = (Tuple <int, int>)objectTupla; int elemento = tupla.Item1; int numVeces = tupla.Item2; for (int i = 0; i < numVeces; i++) { cola.Añadir(elemento); } }
public void TestExtraerVariosThreads() { cola = new ColaConcurrente <int>(); int numThreads = 10; int elemento = 5; int totalElementos = 10000; // El total de elementos debe ser divisible entre el número de hilos Debug.Assert(totalElementos % numThreads == 0); // Se añade el elemento las veces indicadas for (int i = 0; i < totalElementos; i++) { cola.Añadir(elemento); } Thread[] threads = new Thread[numThreads]; for (int i = 0; i < numThreads; i++) { threads[i] = new Thread(ExtraerElementoXVecesEnCola); } var numVecesExtraerElemento = totalElementos / numThreads; foreach (var thread in threads) { thread.Start(new Tuple <int, int>(elemento, numVecesExtraerElemento)); } foreach (var thread in threads) { thread.Join(); } // Al final, la cola deberá estar vacía Assert.IsTrue(cola.EstáVacía(), "El método Extraer() llamado con varios Threads no deja la cola vacía, aunque debería."); Assert.AreEqual(0, cola.NumeroElementos, "El método Extraer() llamado con varios Threads no deja la cola vacía, aunque debería."); }
public void TestColaConstructorCopia() { ColaConcurrente <int> colaOtro = new ColaConcurrente <int>(1, 2, 3); cola = new ColaConcurrente <int>(colaOtro); Assert.AreEqual(colaOtro.NumeroElementos, cola.NumeroElementos, "La cola creada con el constructor de copia no tiene el mismo número de elementos que la cola original."); Assert.AreEqual(colaOtro.ToString(), cola.ToString(), "La cola creada con el constructor de copia no tiene los mismos elementos que la cola original."); // Comprobamos que las dos colas son totalmente independientes (modificar una no modifica la otra) colaOtro.Añadir(4); cola.Extraer(); Assert.AreEqual(4, colaOtro.NumeroElementos, "La cola creada con el constructor de copia no es independiente de la cola original."); Assert.AreEqual("<-[1, 2, 3, 4]<-", colaOtro.ToString(), "La cola creada con el constructor de copia no es independiente de la cola original."); Assert.AreEqual(2, cola.NumeroElementos, "La cola creada con el constructor de copia no es independiente de la cola original."); Assert.AreEqual("<-[2, 3]<-", cola.ToString(), "La cola creada con el constructor de copia no es independiente de la cola original."); }