예제 #1
0
        public void TestExample()
        {
            double[] x = new[] { 1.0, 2.0, 3.0 };
            double[] y = new[] { 3.0, 5.0, 6.5 };

            var trendline = new Trendline(x, y);

            Assert.That(Math.Round(trendline.GetY(0.0), 3), Is.EqualTo(1.333));
            Assert.That(Math.Round(trendline.GetY(3.14), 3), Is.EqualTo(6.828));
        }
예제 #2
0
        public void TestLinear()
        {
            // y = 2x + 1
            double[] x = new[] { 1.0, 2.0, 3.0 };
            double[] y = new[] { 3.0, 5.0, 7.0 };

            var trendline = new Trendline(x, y);

            Assert.That(trendline.GetX(0.0), Is.EqualTo(-0.5));
            Assert.That(trendline.GetY(0.0), Is.EqualTo(1.0));
            Assert.That(trendline.GetY(137.23), Is.EqualTo(275.46));
        }
예제 #3
0
        private static object GetTimeRemaining(ModelBase model)
        {
            var viewModel = (ProgressFieldViewModel)model;

            if (viewModel.Target == 0)
            {
                return(TimeSpan.MaxValue);
            }

            if (viewModel._progressStart == null)
            {
                viewModel._progressStart = DateTime.UtcNow;
                return(TimeSpan.MaxValue);
            }

            var elapsed             = DateTime.UtcNow - viewModel._progressStart.GetValueOrDefault();
            var elapsedMilliseconds = elapsed.TotalMilliseconds;

            lock (viewModel._elapsedSample)
            {
                if (elapsedMilliseconds - viewModel._elapsedSample[viewModel._sampleIndex] > (1000 / SampleCount))
                {
                    viewModel._elapsedSample[viewModel._sampleIndex]  = elapsedMilliseconds;
                    viewModel._progressSample[viewModel._sampleIndex] = (double)viewModel.Current;
                    viewModel._sampleIndex = (viewModel._sampleIndex + 1) % SampleCount;

                    var trendline = new Trendline(viewModel._progressSample, viewModel._elapsedSample);
                    viewModel._estimatedMilliseconds = trendline.GetY(viewModel.Target);
                }
            }

            var remainingMilliseconds = viewModel._estimatedMilliseconds - elapsedMilliseconds;

            return(TimeSpan.FromMilliseconds(remainingMilliseconds));
        }