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"); }
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()); }
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); }