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 TestConstructorColaVacia() { cola = new ColaConcurrente <int>(); Assert.AreEqual(0, cola.NumeroElementos, "El constructor de cola vacía no crea una cola con 0 elementos."); Assert.IsTrue(cola.EstáVacía(), "El constructor de cola vacía no crea una cola vacía."); Assert.AreEqual("<-[]<-", cola.ToString(), "El toString() de una cola vacía no indica que está vacía."); }
public void TestColaEstáVacía() { cola = new ColaConcurrente <int>(); Assert.IsTrue(cola.EstáVacía()); cola = new ColaConcurrente <int>(1); Assert.IsFalse(cola.EstáVacía()); cola = new ColaConcurrente <int>(1, 2, 3); Assert.IsFalse(cola.EstáVacía()); }
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 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."); }