Exemplo n.º 1
0
        private void VerifyPercsWithAbsoluteEpsilon(double[] a, SampleStream s, IReadOnlyList <QuantileEpsilonPair> targets)
        {
            foreach (var target in targets)
            {
                double n = a.Length;
                int    k = (int)(target.Quantile * n);
                if (k < 1)
                {
                    k = 1;
                }

                int lower = (int)((target.Quantile - target.Epsilon) * n);
                if (lower < 1)
                {
                    lower = 1;
                }

                int upper = (int)Math.Ceiling((target.Quantile + target.Epsilon) * n);
                if (upper > a.Length)
                {
                    upper = a.Length;
                }

                double w   = a[k - 1];
                double min = a[lower - 1];
                double max = a[upper - 1];

                double g = s.Query(target.Quantile);

                Assert.True(g >= min, $"q={target.Quantile}: want {w} [{min}, {max}], got {g}");
                Assert.True(g <= max, $"q={target.Quantile}: want {w} [{min}, {max}], got {g}");
            }
        }
Exemplo n.º 2
0
        public void TestDefaults()
        {
            var    q = new SampleStream(Invariants.Targeted(new[] { new QuantileEpsilonPair(0.99d, 0.001d) }));
            double g = q.Query(0.99);

            Assert.Equal(double.NaN, g);
        }
Exemplo n.º 3
0
        public void TestUncompressedOne()
        {
            var q = new SampleStream(Invariants.Targeted(new[] { new QuantileEpsilonPair(0.99d, 0.001d) }));

            q.InsertRange(new[] { 3.14 });
            double g = q.Query(0.90);

            Assert.Equal(3.14, g);
        }
Exemplo n.º 4
0
        private void VerifyHighPercsWithRelativeEpsilon(double[] a, SampleStream s)
        {
            Array.Sort(a);

            foreach (double qu in _highQuantiles)
            {
                double n = a.Length;
                int    k = (int)(qu * n);

                int    lowerRank = (int)((1 - ((1 + _relativeEpsilon) * (1 - qu))) * n);
                int    upperRank = (int)Math.Ceiling((1 - ((1 - _relativeEpsilon) * (1 - qu))) * n);
                double w         = a[k - 1];
                double min       = a[lowerRank - 1];
                double max       = a[upperRank - 1];

                double g = s.Query(qu);

                Assert.True(g >= min, $"q={qu}: want {w} [{min}, {max}], got {g}");
                Assert.True(g <= max, $"q={qu}: want {w} [{min}, {max}], got {g}");
            }
        }