コード例 #1
0
        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.");
            }
        }
コード例 #2
0
        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.");
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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.");
        }
コード例 #5
0
        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.");
        }