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