Exemplo n.º 1
0
        public void TestMerge()
        {
            Random r = new Random();

            TDigest       digestA   = new TDigest();
            TDigest       digestAll = new TDigest();
            List <double> actual    = new List <double>();

            for (int i = 0; i < 10000; i++)
            {
                var n = (r.Next() % 50) + (r.Next() % 50);
                digestA.Add(n);
                digestAll.Add(n);
                actual.Add(n);
            }

            TDigest       digestB = new TDigest();
            List <double> actualB = new List <double>();

            for (int i = 0; i < 10000; i++)
            {
                var n = (r.Next() % 100) + (r.Next() % 100);
                digestB.Add(n);
                digestAll.Add(n);
                actual.Add(n);
            }

            actual.Sort();

            var merged = TDigest.Merge(digestA, digestB);

            Assert.AreEqual(actual.Count, merged.Count);

            var avgError = GetAvgPercentileError(actual, merged);

            Assert.IsTrue(avgError < .5);

            var trueAvg  = actual.Average();
            var deltaAvg = Math.Abs(digestAll.Average - merged.Average);

            Assert.IsTrue(deltaAvg < .01);
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            Random r = new Random();

            TDigest       digestA   = new TDigest();
            TDigest       digestAll = new TDigest();
            List <double> actual    = new List <double>();

            for (int i = 0; i < 10000; i++)
            {
                var n = (r.Next() % 50) + (r.Next() % 50);
                digestA.Add(n);
                //digestAll.Add(n);
                actual.Add(n);
            }

            TDigest       digestB = new TDigest();
            List <double> actualB = new List <double>();

            for (int i = 0; i < 10000; i++)
            {
                var n = (r.Next() % 100) + (r.Next() % 100);
                digestB.Add(n);
                digestAll.Add(n);
                actual.Add(n);
            }

            actual.Sort();

            var merged = TDigest.Merge(digestA, digestB);
            //Debug.Assert.AreEqual(actual.Count, merged.Count);

            //var avgError = GetAvgError(actual, merged);
            //Assert.IsTrue(avgError < .5);

            var trueAvg  = actual.Average();
            var deltaAvg = Math.Abs(digestAll.Average - merged.Average);
        }