示例#1
0
        private static void FuzzIteration(int seed)
        {
            var xyAxiseries = new TestAxisSeries();

            var N            = 15;
            var random       = new Random(seed);
            var testData     = new System.Collections.Generic.List <double>();
            var currentValue = random.NextDouble() - 0.5;

            for (int i = 0; i < N; ++i)
            {
                testData.Add(currentValue);
                currentValue += random.NextDouble();
            }

            var targetX = random.NextDouble() * (N / 2.0) - 1.0;
            var guess   = random.Next(0, testData.Count);

            int foundIndex = xyAxiseries.FindWindowStartIndex(testData, x => x, targetX, guess);

            if (foundIndex > 0)
            {
                Assert.LessOrEqual(testData[foundIndex], targetX, "At " + seed);
            }
            if (foundIndex < testData.Count - 1)
            {
                Assert.GreaterOrEqual(testData[foundIndex + 1], targetX, "At " + seed);
            }
        }
示例#2
0
        private static void FuzzIterationWithNan(int seed)
        {
            var xyAxiseries = new TestAxisSeries();

            var N            = 15;
            var random       = new Random(seed);
            var testData     = new System.Collections.Generic.List <double>();
            var currentValue = random.NextDouble() - 0.5;

            for (int i = 0; i < N; ++i)
            {
                if (random.Next(4) == 0)
                {
                    testData.Add(double.NaN);
                }
                testData.Add(currentValue);
                currentValue += random.NextDouble();
            }

            double?PrevNonNan(int index)
            {
                while (index >= 0)
                {
                    if (double.IsNaN(testData[index]) == false)
                    {
                        return(testData[index]);
                    }
                    index -= 1;
                }

                return(null);
            }

            double?NextNonNan(int index)
            {
                while (index >= 0)
                {
                    if (double.IsNaN(testData[index]) == false)
                    {
                        return(testData[index]);
                    }
                    index += 1;
                }

                return(null);
            }

            var targetX = random.NextDouble() * (N / 2.0) - 1.0;
            var guess   = random.Next(0, testData.Count);

            int foundIndex = xyAxiseries.FindWindowStartIndex(testData, x => x, targetX, guess);

            if (foundIndex > 0)
            {
                if (double.IsNaN(testData[foundIndex]))
                {
                    var prevNonNaN = PrevNonNan(foundIndex - 1);
                    if (prevNonNaN.HasValue)
                    {
                        Assert.LessOrEqual(prevNonNaN, targetX, "At " + seed);
                    }
                }
                else
                {
                    Assert.LessOrEqual(testData[foundIndex], targetX, "At " + seed);
                }
            }

            if (foundIndex < testData.Count - 1)
            {
                if (double.IsNaN(testData[foundIndex + 1]))
                {
                    var nextNonNaN = NextNonNan(foundIndex + 1);
                    if (nextNonNaN.HasValue)
                    {
                        Assert.GreaterOrEqual(nextNonNaN, targetX, "At " + seed);
                    }
                }
                else
                {
                    Assert.GreaterOrEqual(testData[foundIndex + 1], targetX, "At " + seed);
                }
            }
        }