Example #1
0
        public void TestValueStatDouble()
        {
            var nums1 = new[] { 19.8, 15.5, 89.6, 38.6, 77.5, 11.3 };
            var nums2 = new[] { 94.0, 9.4, 12.2, 40.3, 71.1, 0.7, 23.1, 86.2, 55.5, 92.7, 29.1, 56.5 };
            var stat1 = new ValueStat();
            var stat2 = new ValueStat();
            var stat3 = new ValueStat();

            foreach (var num in nums1)
            {
                stat1.AddObservation(num);
                stat3.AddObservation(num);
            }
            foreach (var num in nums2)
            {
                stat2.AddObservation(num);
                stat3.AddObservation(num);
            }
            var stat4 = new ValueStat();

            stat4.AddObservations(stat1.ObservationCount, stat1.Mean, stat1.Min, stat1.Max, stat1.Variance);
            stat4.AddObservations(stat2.ObservationCount, stat2.Mean, stat2.Min, stat2.Max, stat2.Variance);

            Assert.AreEqual(6, stat1.ObservationCount);
            Assert.AreEqual(12, stat2.ObservationCount);
            Assert.AreEqual(6 + 12, stat3.ObservationCount);
            Assert.AreEqual(6 + 12, stat4.ObservationCount);

            Assert.AreEqual(42.05, stat1.Mean, 0.00001);
            Assert.AreEqual(47.56666667, stat2.Mean, 0.00001);
            Assert.AreEqual(45.72777778, stat3.Mean, 0.00001);
            Assert.AreEqual(45.72777778, stat4.Mean, 0.00001);

            Assert.AreEqual(945.8558333, stat1.Variance, 0.00001);
            Assert.AreEqual(1023.215556, stat2.Variance, 0.00001);
            Assert.AreEqual(1004.192006, stat3.Variance, 0.00001);
            Assert.AreEqual(1004.192006, stat4.Variance, 0.00001);
        }
Example #2
0
        private void printStats()
        {
            if (!(EarliestMatchDate < long.MaxValue && LatestMatchDate > 0 && _heapLength > 0))
            {
                return;
            }
            if (DateTime.UtcNow < _noPrintStatsUntil)
            {
                return;
            }
            long searchMin = long.MaxValue;
            long searchMax = long.MinValue;

            for (int i = 0; i < _heapLength; i++)
            {
                if (searchMin > _heap[i].From)
                {
                    searchMin = _heap[i].From;
                }
                if (searchMax < _heap[i].To)
                {
                    searchMax = _heap[i].To;
                }
            }
            var covered = DataStore.ExistingMatchIds[Region].Concat(DataStore.NonexistentMatchIds[Region]).Count(id => id >= searchMin && id <= searchMax);
            var gapstat = new ValueStat();

            foreach (var gap in _heap.Take(_heapLength))
            {
                gapstat.AddObservation(gap.Length);
            }
            Console.ForegroundColor = MainWindow.Colors[Region];
            Console.WriteLine();
            Console.WriteLine($"{Region}: {MatchCount:#,0}; {searchMin:#,0} - {searchMax:#,0}; {new DateTime(1970, 1, 1).AddSeconds(EarliestMatchDate / 1000)} - {new DateTime(1970, 1, 1).AddSeconds(LatestMatchDate / 1000)}");
            Console.WriteLine($"    Coverage: {covered:#,0} of {searchMax - searchMin:#,0} ({covered / (double) (searchMax - searchMin) * 100:0.000}%).  Gaps: min {gapstat.Min:#,0}, max: {gapstat.Max:#,0}, mean: {gapstat.Mean:#,0.000}, stdev: {gapstat.StdDev:#,0.000}");
            Console.ForegroundColor = ConsoleColor.Gray;
            _noPrintStatsUntil      = DateTime.UtcNow.AddMinutes(10);
        }