public void TestTemporalDatabase() { double[] logistic = new double[1000]; logistic[0] = 0.1; for (int n = 1; n < 1000; n++) { logistic[n] = 4.0 * logistic[n - 1] * (1.0 - logistic[n - 1]); } ChaosAnalysis analysis = new ChaosAnalysis(); DateTime start = new DateTime(1997, 1, 1, 0, 0, 0, 0); analysis.sampleTime = new TimeSpan(0, 0, 1); analysis.LoadSampledData(logistic, start, new TimeSpan(0, 0, 1)); Assert.AreEqual(start, analysis.earliest); Assert.AreEqual(start + new TimeSpan(9990000000), analysis.latest); Assert.AreEqual(1000, analysis.Count); Assert.AreEqual(logistic[0], analysis[0]); Assert.AreEqual(logistic[999], analysis[999]); Assert.AreEqual(logistic[599], analysis[599]); Assert.AreEqual(logistic[768], analysis[768]); //remove before start analysis.RemoveBefore(new DateTime(1997, 1, 1, 0, 0, 0, 0)); Assert.AreEqual(start, analysis.earliest); Assert.AreEqual(start + new TimeSpan(9990000000), analysis.latest); //remove before fixed point DateTime newStart = new DateTime(1997, 1, 1, 0, 12, 0, 0); analysis.RemoveBefore(newStart); Assert.AreEqual(newStart, analysis.earliest); Assert.AreEqual(start + new TimeSpan(9990000000), analysis.latest); newStart = new DateTime(1997, 1, 1, 1, 12, 0, 0); analysis.RemoveBefore(newStart); Assert.AreEqual(DateTime.MinValue, analysis.earliest); Assert.AreEqual(DateTime.MaxValue, analysis.latest); }
public void TestTemporalDatabaseWithTaggedData() { double[] logistic = new double[1000]; DateTime[] times = new DateTime[1000]; DateTime start = new DateTime(1997, 1, 1, 0, 0, 0, 0); logistic[0] = 0.1; times[0] = start; TimeSpan offset = new TimeSpan(0, 1, 0); DateTime iterator = start; for (int n = 1; n < 1000; n++) { logistic[n] = 4.0 * logistic[n - 1] * (1.0 - logistic[n - 1]); iterator += offset; times[n] = iterator; } ChaosAnalysis analysis = new ChaosAnalysis(); analysis.LoadTaggedData(logistic, times); analysis.sampleTime = offset; analysis.interpolation = true; Assert.AreEqual(start, analysis.earliest); Assert.AreEqual(iterator, analysis.latest); Assert.AreEqual(1000, analysis.Count); Assert.AreEqual(logistic[0], analysis[0]); Assert.AreEqual(logistic[999], analysis[999]); Assert.AreEqual(logistic[599], analysis[599]); Assert.AreEqual(logistic[768], analysis[768]); //test interpolation TimeSpan testOfset = new TimeSpan((long)((double)offset.Ticks * 599.5)); Assert.AreEqual((logistic[599] + logistic[600]) / 2.0, analysis[start + testOfset]); testOfset = new TimeSpan((long)((double)offset.Ticks * 200.5)); Assert.AreEqual((logistic[200] + logistic[201]) / 2.0, analysis[start + testOfset]); // Assert.ReferenceEquals(double.NaN,analysis[DateTime.MinValue]); Assert.AreEqual(logistic[999], analysis[DateTime.MaxValue]); //remove before start analysis.RemoveBefore(new DateTime(1997, 1, 1, 0, 0, 0, 0)); Assert.AreEqual(start, analysis.earliest); Assert.AreEqual(iterator, analysis.latest); //remove before fixed point DateTime newStart = new DateTime(1997, 1, 1, 0, 12, 0, 0); analysis.RemoveBefore(newStart); Assert.AreEqual(newStart, analysis.earliest); Assert.AreEqual(iterator, analysis.latest); newStart = new DateTime(1997, 1, 1, 17, 0, 0, 0); analysis.RemoveBefore(newStart); Assert.AreEqual(DateTime.MinValue, analysis.earliest); Assert.AreEqual(DateTime.MaxValue, analysis.latest); //now test unequally spaced events double[] data = new double[500]; times = new DateTime[500]; iterator = start; for (int n = 0; n < 500; n++) { data[n] = (double)n; times[n] = iterator; TimeSpan testOffset = new TimeSpan((long)((double)offset.Ticks * ((double)n / 100 + 1))); iterator += testOffset; } analysis = new ChaosAnalysis(); analysis.LoadTaggedData(data, times); analysis.sampleTime = offset; analysis.interpolation = true; Assert.AreEqual(start, analysis.earliest); Assert.AreEqual(1742, analysis.Count);//This is not the count of events, but the count of the number of samples in the database, based on the sample time. // Assert.AreEqual(data[0],analysis[times[0]]); Assert.AreEqual(data[199], analysis[times[199]]); Assert.AreEqual(data[299], analysis[times[299]]); Assert.AreEqual(data[468], analysis[times[468]]); //test interpolation DateTime testtime = new DateTime((times[199].Ticks + times[200].Ticks) / 2);//halfway between two samples Assert.AreEqual((data[199] + data[200]) / 2.0, analysis[testtime]); testtime = new DateTime((times[303].Ticks + times[304].Ticks) / 2);//halfway between two samples Assert.AreEqual((data[303] + data[304]) / 2.0, analysis[testtime], 0.000001); }