Ejemplo n.º 1
0
        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);
        }