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 TestAñadirVariosThreads() { cola = new ColaConcurrente <int>(); int numThreads = 10; int elemento = 5; int numVeces = 1000; Thread[] threads = new Thread[numThreads]; for (int i = 0; i < numThreads; i++) { threads[i] = new Thread(AñadirMismoElementoXVecesEnCola); } foreach (var thread in threads) { thread.Start(new Tuple <int, int>(elemento, numVeces)); } foreach (var thread in threads) { thread.Join(); } Assert.IsFalse(cola.EstáVacía(), "El método Añadir() llamado con varios Threads deja una cola vacía."); Assert.AreEqual(numThreads * numVeces, cola.NumeroElementos, "El método Añadir() llamado con varios Threads no añade el número de elementos esperado."); for (int i = 0; i < numThreads * numVeces; i++) { Assert.AreEqual(elemento, cola.Extraer(), "El método Añadir() llamado con varios Threads no añade los elementos esperados."); } }
public void TestColaExtraer() { cola = new ColaConcurrente <int>(5, 6); var extraido = cola.Extraer(); Assert.AreEqual(5, extraido, "El elemento extraido con Extraer() no es el esperado."); Assert.AreEqual(1, cola.NumeroElementos, "Extraer() no decrementa el número de elementos en 1."); Assert.AreEqual("<-[6]<-", cola.ToString(), "Extraer() no borra el primer elemento de la cola."); // Probamos a Extraer() cuando la cola solo tiene un elemento extraido = cola.Extraer(); Assert.AreEqual(6, extraido, "El elemento extraido con Extraer() no es el esperado."); Assert.AreEqual(0, cola.NumeroElementos, "Extraer() no decrementa el número de elementos en 1."); Assert.IsTrue(cola.EstáVacía(), "Extraer() no deja la cola vacía."); Assert.AreEqual("<-[]<-", cola.ToString(), "Extraer() no borra el primer elemento de la cola."); }
private void ExtraerElementoXVecesEnCola(object objectTupla) { var tupla = (Tuple <int, int>)objectTupla; int elemento = tupla.Item1; int numVeces = tupla.Item2; for (int i = 0; i < numVeces; i++) { // Se comprueba también que el elemento devuelto por PrimerElemento() coincide con 'elemento' Assert.AreEqual(elemento, cola.PrimerElemento(), "El elemento obtenido con PrimerElemento() no coincide con el esperado."); // Cada vez que se extrae un elemento, se comprueba que coincide con 'elemento' var extraido = cola.Extraer(); Assert.AreEqual(elemento, extraido, "El elemento extraido no coincide con el esperado."); } }
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."); }
public void TestColaExtraerThrowsException() { cola = new ColaConcurrente <int>(); cola.Extraer(); }