public void Statistics_Calculated_In_Constructor()
        {
            var chats = Data.GetChatsB();
            var calculator = new SummaryStatisticsCalculator();

            var lines = calculator.GetStatisticsFromEnumerable(chats.Select(chat => (double)chat.Lines));
            var minutes = calculator.GetStatisticsFromEnumerable(chats.Select(chat => (double)chat.Minutes));

            var collection = new ChatCollection(chats);

            Assert.AreEqual(lines, collection.LineStatistics);
            Assert.AreEqual(minutes, collection.MinuteStatistics);
        }
        public void Statistics_Updated_On_Add()
        {
            var collection = new ChatCollection(Data.GetChatsB());
            collection.Add(Data.GetChatA());

            var chats = Data.GetChatsB().ToList();
            chats.Add(Data.GetChatA());

            var calculator = new SummaryStatisticsCalculator();
            var lines = calculator.GetStatisticsFromEnumerable(chats.Select(chat => (double)chat.Lines));
            var minutes = calculator.GetStatisticsFromEnumerable(chats.Select(chat => (double)chat.Minutes));

            Assert.AreEqual(lines, collection.LineStatistics);
            Assert.AreEqual(minutes, collection.MinuteStatistics);
        }
        public void Overloads_Match()
        {
            var data = new[]
            {
                new { x = 1, y = 2 },
                new { x = 5, y = 17 },
                new { x = 12, y = -9 }
            };

            var calculator = new SummaryStatisticsCalculator();
            var selectorSummary = calculator.GetStatisticsFromEnumerable(data, obj => obj.x + obj.y);

            var array = data.Select(obj => (double)obj.x + obj.y);
            var nonSelectorSummary = calculator.GetStatisticsFromEnumerable(array);

            Assert.AreEqual(selectorSummary, nonSelectorSummary);
        }
        public void Calculates_Correct_Summary_Statistics()
        {
            var data = new [] { 11, 21, 38, 25, 3, 5, 16, 49, 48, 66, 21, 41, 8, 80, 16, 44, 88, 82, 60, 30 };

            var statistics = new SummaryStatisticsCalculator().GetStatisticsFromEnumerable(data, x => (double)x);

            var expectedStatistics = new SummaryStatistics
            {
                Minimum = 3,
                Maximum = 88,
                Median = 34,
                Sum = 752,
                Mean = 37.6,
                StandardDeviation = 25.935304
            };

            Assert.AreEqual(statistics, expectedStatistics);
        }
        public void Calculates_Correct_Median_When_Length_Is_Odd()
        {
            var statistics = new SummaryStatisticsCalculator().GetStatisticsFromEnumerable(new double[] { 1, 2, 3 });

            Assert.AreEqual(statistics.Median, 2);
        }