Пример #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 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.");
            }
        }
Пример #3
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.");
        }
Пример #4
0
        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.");
            }
        }
Пример #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.");
        }
Пример #6
0
 public void TestColaExtraerThrowsException()
 {
     cola = new ColaConcurrente <int>();
     cola.Extraer();
 }