public void TestInvertirAngulos()
        {
            Lista <Angulo> angulos      = new Lista <Angulo>(Factoria.CrearAngulos());
            Lista <Angulo> copiaAngulos = new Lista <Angulo>(angulos);

            var angulosInvertidos = angulos.Invertir();

            // Comprobamos que los elementos son los esperados
            Assert.AreEqual(angulos.NumeroElementos, angulosInvertidos.Count(),
                            "El método Invertir() modifica el numero de elementos del IEnumerable.");

            int expectedGrados = 360;

            foreach (var angulo in angulosInvertidos)
            {
                Assert.AreEqual(expectedGrados, angulo.Grados,
                                "El método Invertir() no retorna los elementos esperados");

                expectedGrados--;
            }

            // Comprobamos que no se modifica la lista original
            Assert.AreEqual(copiaAngulos, angulos,
                            "El método Invertir() modifica el IEnumerable original.");
        }
        public void TestFiltrarAngulos()
        {
            Lista <Angulo> angulos = new Lista <Angulo>(Factoria.CrearAngulos());

            #region FiltradoAngulosRectos

            /* Filtrado de ángulos rectos */
            // Filtramos los ángulos de 90 grados
            AssertFiltrar(angulos, angulo => Math.Abs(Math.Abs(angulo.Grados) - 90.0) <= 0.001, new[] { 90 });

            #endregion

            #region FiltradoAngulosCuadrantes

            /* Filtrado de ángulos de cada cuadrante */
            // Filtramos los ángulos del primer cuadrante
            AssertFiltrar(angulos, angulo => angulo.Cuadrante == 1, GetArrayIndices(0, 90));

            // Filtramos los ángulos del segundo cuadrante
            AssertFiltrar(angulos, angulo => angulo.Cuadrante == 2, GetArrayIndices(91, 180));

            // Filtramos los ángulos del tercer cuadrante
            AssertFiltrar(angulos, angulo => angulo.Cuadrante == 3, GetArrayIndices(181, 270));

            // Filtramos los ángulos del cuarto cuadrante
            AssertFiltrar(angulos, angulo => angulo.Cuadrante == 4, GetArrayIndices(271, 360));

            #endregion
        }
        public void TestBuscarAngulos()
        {
            Lista <Angulo> angulos = new Lista <Angulo>(Factoria.CrearAngulos());

            #region BusquedaAngulosRectos

            /* Búsqueda de ángulos rectos */
            // Buscamos el primer ángulo de 90 grados
            AssertBuscar(angulos, angulo => Math.Abs(Math.Abs(angulo.Grados) - 90.0) <= 0.001,
                         angulos.Get(90), messageElementInCollection);

            #endregion

            #region BusquedaAngulosCuadrantes

            /* Búsqueda de ángulos en un cuadrante */
            // Buscamos el primer ángulo del primer cuadrante
            AssertBuscar(angulos, angulo => angulo.Cuadrante == 1,
                         angulos.Get(0), messageElementInCollection);
            // Buscamos el primer ángulo del segundo cuadrante
            AssertBuscar(angulos, angulo => angulo.Cuadrante == 2,
                         angulos.Get(91), messageElementInCollection);
            // Buscamos el primer ángulo del tercer cuadrante
            AssertBuscar(angulos, angulo => angulo.Cuadrante == 3,
                         angulos.Get(181), messageElementInCollection);
            // Buscamos el primer ángulo del cuarto cuadrante
            AssertBuscar(angulos, angulo => angulo.Cuadrante == 4,
                         angulos.Get(271), messageElementInCollection);

            #endregion
        }
        public void TestMapAngulos()
        {
            Lista <Angulo> angulos      = new Lista <Angulo>(Factoria.CrearAngulos());
            Lista <Angulo> copiaAngulos = new Lista <Angulo>(angulos);

            var cuadrantesAngulos = angulos.Map(angulo => angulo.Cuadrante);

            // Comprobamos que los elementos son los esperados
            Assert.AreEqual(angulos.NumeroElementos, cuadrantesAngulos.Count(),
                            "El método Map() modifica el numero de elementos del IEnumerable.");

            int i = 0;

            foreach (var cuadrante in cuadrantesAngulos)
            {
                int expectedCuadrante;
                if (i <= 90)
                {
                    expectedCuadrante = 1;
                }
                else if (i <= 180)
                {
                    expectedCuadrante = 2;
                }
                else if (i <= 270)
                {
                    expectedCuadrante = 3;
                }
                else
                {
                    expectedCuadrante = 4;
                }

                Assert.AreEqual(expectedCuadrante, cuadrante,
                                "El método Map() no retorna los elementos esperados");

                i++;
            }

            // Comprobamos que no se modifica la lista original
            Assert.AreEqual(copiaAngulos, angulos,
                            "El método Map() modifica el IEnumerable original.");
        }
        public void TestReducirAngulos()
        {
            Lista <Angulo> angulos = new Lista <Angulo>(Factoria.CrearAngulos());

            #region SumaGradosAngulos

            var sumaGrados         = angulos.Reducir((float acumulado, Angulo angulo) => acumulado + angulo.Grados);
            var expectedSumaGrados =
                (float)GetArrayIndices(0, 360).Aggregate((acumulado, val) => acumulado + val);
            Assert.AreEqual(expectedSumaGrados, sumaGrados, "El método Reducir() no funciona correctamente.");

            #endregion

            #region SenoMaximoAngulos

            var senoMaximo         = angulos.Reducir((double senoMax, Angulo angulo) => Math.Max(senoMax, angulo.Seno()));
            var expectedSenoMaximo = 1.0;
            Assert.AreEqual(expectedSenoMaximo, senoMaximo, "El método Reducir() no funciona correctamente.");

            #endregion
        }
        public void TestForEachAngulos()
        {
            Lista <Angulo> angulos      = new Lista <Angulo>(Factoria.CrearAngulos());
            Lista <Angulo> copiaAngulos = new Lista <Angulo>(angulos);

            // Lista donde se van a añadir los elementos de angulos usando el ForEach
            Lista <Angulo> listaAngulosForEach = new Lista <Angulo>();

            angulos.ForEach(listaAngulosForEach.AddLast);

            // Comprobamos que los elementos son los esperados
            Assert.AreEqual(angulos.NumeroElementos, listaAngulosForEach.Count(),
                            "El método ForEach() no itera por todos los elementos del IEnumerable.");

            // Se utiliza el método Equals() definido en la clase Lista para comparar que las 2 listas son iguales
            Assert.AreEqual(angulos, listaAngulosForEach,
                            "Tras hacer angulos.ForEach(lista.AddLast) angulos y lista no son iguales.");

            // Comprobamos que no se modifica la lista original
            Assert.AreEqual(copiaAngulos, angulos,
                            "El método ForEach() modifica el IEnumerable original.");
        }