public void TestReducirPersonas()
        {
            Lista <Persona> personas = new Lista <Persona>(Factoria.CrearPersonas());

            var distribucionPersonasNombre = personas.Reducir((dict, persona) =>
            {
                if (dict.ContainsKey(persona.Nombre))
                {
                    dict[persona.Nombre]++;
                }
                else
                {
                    dict[persona.Nombre] = 1;
                }
                return(dict);
            }, new Dictionary <string, int>());

            var expectedDistribucion = new Dictionary <string, int>
            {
                { "María", 2 },
                { "Juan", 2 },
                { "Pepe", 1 },
                { "Luis", 1 },
                { "Carlos", 1 },
                { "Miguel", 1 },
                { "Cristina", 1 }
            };

            Assert.IsTrue(EqualDictionarys(expectedDistribucion, distribucionPersonasNombre),
                          "El método Reducir() no funciona correctamente.");
        }
        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
        }