public void ProcessRectanglePoints()
        {
            var dt = DateTime.Now;
            var sequence = 0;
            Func<DateTime> dtf = () => dt + TimeSpan.FromTicks(TimeSpan.FromMilliseconds(100).Ticks * sequence++);

            var state = new PlatformDiagnostic.State(dtf);
            var s1 = state.ProcessNext(new PointF(1, 1));
            var s2 = s1.ProcessNext(new PointF(1, -1));
            var s3 = s2.ProcessNext(new PointF(-1, -1));
            var s4 = s3.ProcessNext(new PointF(-1, 1));
            var s5 = s4.ProcessNext(new PointF(1, 1));

            //s5.Indicators.AvgAmplitude.Should().Be(new PointF(2, 2));
            s5.Indicators.Length.Should().Be(8);
            //s5.Indicators.MaxAmplitude.Should().Be(new PointF(2, 2));
            s5.Indicators.Frequency.Should().Be(new PointF(
                2/(float)TimeSpan.FromMilliseconds(400).TotalSeconds,
                2/(float)TimeSpan.FromMilliseconds(400).TotalSeconds));
            s5.Indicators.Period.Should().Be(new PointF(
                (float)TimeSpan.FromMilliseconds(400).TotalSeconds / 2f,
                (float)TimeSpan.FromMilliseconds(400).TotalSeconds / 2f));
            s5.Duration.Should().Be(TimeSpan.FromMilliseconds(400));

            var s6 =
                s5.ProcessNext(new PointF(1, -1))
                    .ProcessNext(new PointF(-1, -1))
                    .ProcessNext(new PointF(-1, 1))
                    .ProcessNext(new PointF(1, 1));

            //s6.Indicators.AvgAmplitude.Should().Be(new PointF(2, 2));
            s6.Indicators.Length.Should().Be(16);
            //s6.Indicators.MaxAmplitude.Should().Be(new PointF(2, 2));
            s6.Indicators.Frequency.Should().Be(new PointF(
                4 / (float)TimeSpan.FromMilliseconds(800).TotalSeconds,
                4 / (float)TimeSpan.FromMilliseconds(800).TotalSeconds));
            s6.Indicators.Period.Should().Be(new PointF(
                (float)TimeSpan.FromMilliseconds(800).TotalSeconds / 4f,
                (float)TimeSpan.FromMilliseconds(800).TotalSeconds / 4f));
            s6.Duration.Should().Be(TimeSpan.FromMilliseconds(800));
        }
        public void ProcessZeros()
        {
            var dt = DateTime.Now;
            var sequence = 0;
            Func<DateTime> dtf = () => dt + TimeSpan.FromTicks(TimeSpan.FromMilliseconds(100).Ticks * sequence++);

            var state = new PlatformDiagnostic.State(dtf);
            var s1 = state.ProcessNext(new PointF());
            var s2 = s1.ProcessNext(new PointF());
            var s3 = s2.ProcessNext(new PointF());

            s3.Indicators.AvgAmplitude.Should().Be(new PointF());
            s3.Indicators.Length.Should().Be(0);
            s3.Indicators.MaxAmplitude.Should().Be(new PointF());
            s3.Indicators.Frequency.Should().Be(new PointF());
            s3.Indicators.Period.Should().Be(new PointF());
            s3.Duration.Should().Be(TimeSpan.FromMilliseconds(200));
        }