示例#1
0
        public void CouldCalculateSMAInRealTime()
        {
            var totalCount = 10000;
            var sm         = new SortedChunkedMap <int, double>();
            var tcs        = new TaskCompletionSource <bool>();

            Task.Run(async() => {
                for (int i = 0; i < 20; i++)
                {
                    sm.Add(i, i);
                    if (i == 0)
                    {
                        tcs.SetResult(true);
                    }
                }

                await Task.Delay(100);

                for (int i = 20; i < totalCount; i++)
                {
                    //await Task.Delay(1); // 15 msec
                    sm.Add(i, i);
                }
                sm.Complete();
            });


            var sma = sm.SMA(10, true);

            var c = sma.GetCursor();

            //Thread.Sleep(200);
            Assert.IsTrue(tcs.Task.Result);
            Assert.IsTrue(c.MoveNext(CancellationToken.None).Result);
            Assert.IsTrue(c.MoveNext());
            var ii = 2;

            while (c.MoveNext(CancellationToken.None).Result)   //
            //Console.WriteLine("Key: {0}, value: {1}", c.CurrentKey, c.CurrentValue);
            {
                ii++;
            }
            Assert.AreEqual(totalCount, ii);
            Console.WriteLine("finished");
        }
示例#2
0
        public void SmaDeviationTest()
        {
            var count = 8193;
            var data  = new SortedChunkedMap <int, double>();

            for (int i = 0; i < count; i++)
            {
                data.Add(i, i);
            }


            var dc = data.GetCursor();

            dc.MoveFirst();
            var dc2 = dc.Clone();

            Assert.IsFalse(dc.MovePrevious());
            Assert.IsFalse(dc2.MovePrevious());
            //Assert.AreEqual(8192, dc.CurrentKey);



            var sma  = data.SMA(2, true);
            var sma2 = data.Window(2, 1, true).Map(w => w.Values.Average());
            var ii   = 0;

            foreach (var kvp in sma2)
            {
                //Assert.AreEqual(kvp.Value, ii);
                ii++;
            }
            Assert.AreEqual(count, ii);
            //var smaSm = sma.ToSortedMap();
            //Assert.AreEqual(count, smaSm.Count());

            //var deviation = (data/sma - 1);
            //var deviationSm = deviation;
            //var smaDirection = deviation.Map(Math.Sign);
            //Assert.AreEqual(count, smaDirection.Count());
            //Assert.AreEqual(count, deviation.Count());
        }
示例#3
0
        public void AsyncCoursorOnEmptyMapWaitsForValues()
        {
            var scm    = new SortedChunkedMap <int, double>();
            var scmSma = scm.SMA(20, true);
            var c      = scmSma.GetCursor();
            var task   = c.MoveNext(CancellationToken.None);
            var moved  = task.Wait(100);

            // timeout
            Assert.IsFalse(moved);
            scm.Add(1, 1.0);
            Assert.IsTrue(task.Result);
            Console.WriteLine("moved " + task.Result);

            task  = c.MoveNext(CancellationToken.None);
            moved = task.Wait(100);
            // timeout
            Assert.IsFalse(moved);
            scm.Complete();
            Assert.IsFalse(task.Result);
            Console.WriteLine("moved " + task.Result);
        }