Iterator that also produces the correct mask (DdrLister.Part) for DDR LISTER queries
The key part is only providing the string of just the right length to match. Note that if your iterator is of a lesser precision than the precision of the dates then you will get some bleed at the edges of the iteration. For example, say you want to iterate by day between 12am on the start day and 3pm of the end day. The iterator will go through the whole day and the DdrLister.Part will only match on the whole day. Therefore you will get the whole end day -- the calling function will have to be responsible for cleaning up the loose ends. An iterator of lesser precision will give greater performance (fewer iterations, appends, and queries to VistA) but it will have poorer accuracy. The application should be designed with this in mind.
 public void TestHourRollOver()
 {
     VistaDateTimeIterator testIterator = new VistaDateTimeIterator(
         new DateTime(2008, 01, 01, 22, 0, 0)
         , new DateTime(2008, 01, 03)
         , new TimeSpan(1, 0, 0)
     );
     List<string> values = new List<string>();
     while (!testIterator.IsDone())
     {
         testIterator.SetIterEndDate(); // put at start of loop
         values.Add(testIterator.GetDdrListerPart());
         testIterator.AdvanceIterStartDate(); // put at end of loop
     }
     int result = string.Concat(values.ToArray()).GetHashCode();
     //Spot Check - Count
     Assert.AreEqual(26, values.Count);
     String[] strings = values.ToArray();
     //Spot Check - Validate Start Value
     Assert.IsTrue(strings[0].Equals("3080101.22"));
     //Spot Check - Validate End Value
     Assert.IsTrue(strings[25].Equals("3080102.23"));
     //Spot Check - Validate an Intermediate Value
     Assert.IsTrue(strings[14].Equals("3080102.12"));
     //Hash Code is not stable acrosss .Net Versions
     //Assert.AreEqual(1712919498, result);
 }
示例#2
0
        public void TestHourRollOver()
        {
            //http://msdn.microsoft.com/en-us/library/system.string.gethashcode.aspx
            //   If two string objects are equal, the GetHashCode method returns identical values. However, there is not a unique hash code value for each unique string value. Different strings can return the same hash code.
            VistaDateTimeIterator testIterator = new VistaDateTimeIterator(
                new DateTime(2008, 01, 01, 22, 0, 0)
                , new DateTime(2008, 01, 03)
                , new TimeSpan(1, 0, 0)
                );
            List <string> values = new List <string>();

            while (!testIterator.IsDone())
            {
                testIterator.SetIterEndDate();       // put at start of loop
                values.Add(testIterator.GetDdrListerPart());
                testIterator.AdvanceIterStartDate(); // put at end of loop
            }
            //Spot Check - Count
            Assert.AreEqual(26, values.Count);
            String[] strings = values.ToArray();
            //Spot Check - Validate Start Value
            Assert.IsTrue(strings[0].Equals("3080101.22"));
            //Spot Check - Validate End Value
            Assert.IsTrue(strings[25].Equals("3080102.23"));
            //Spot Check - Validate an Intermediate Value
            Assert.IsTrue(strings[14].Equals("3080102.12"));
            //The MD5 hash value is stable across platforms
            string hash = CalculateMD5Hash(string.Concat(values.ToArray()));

            Assert.AreEqual("830FAB9CC0EB3A1E3855B5DF0F560213", hash);
        }
        public void TestSetIteratorLengthFromEndDateZero()
        {
            VistaDateTimeIterator testIterator = new VistaDateTimeIterator("20080102", "20080103.00");

            Assert.IsTrue(testIterator._iterLength == VistaDateTimeIterator.HOUR_ITERATION);
            Assert.AreEqual((int)VistaDateTimeIterator.PRECISION.HOUR, testIterator._precision);
        }
        public void TestSetIteratorLengthFromDates()
        {
            VistaDateTimeIterator testIterator = new VistaDateTimeIterator("20080102.234556", "20080103");

            Assert.IsTrue(testIterator._iterLength == VistaDateTimeIterator.SECOND_ITERATION);
            Assert.AreEqual((int)VistaDateTimeIterator.PRECISION.SECOND, testIterator._precision);
        }
        public void TestSetIteratorLengthNormalizedNumber()
        {
            VistaDateTimeIterator testIterator = new VistaDateTimeIterator("20080102.000000", "20080103.0000");

            Assert.IsTrue(testIterator._iterLength == VistaDateTimeIterator.SECOND_ITERATION);
            Assert.AreEqual((int)VistaDateTimeIterator.PRECISION.SECOND, testIterator._precision);
        }
        public void TestHourRollOver()
        {
            VistaDateTimeIterator testIterator = new VistaDateTimeIterator(
                new DateTime(2008, 01, 01, 22, 0, 0)
                , new DateTime(2008, 01, 03)
                , new TimeSpan(1, 0, 0)
                );
            List <string> values = new List <string>();

            while (!testIterator.IsDone())
            {
                testIterator.SetIterEndDate();       // put at start of loop
                values.Add(testIterator.GetDdrListerPart());
                testIterator.AdvanceIterStartDate(); // put at end of loop
            }
            int result = string.Concat(values.ToArray()).GetHashCode();

            //Spot Check - Count
            Assert.AreEqual(26, values.Count);
            String[] strings = values.ToArray();
            //Spot Check - Validate Start Value
            Assert.IsTrue(strings[0].Equals("3080101.22"));
            //Spot Check - Validate End Value
            Assert.IsTrue(strings[25].Equals("3080102.23"));
            //Spot Check - Validate an Intermediate Value
            Assert.IsTrue(strings[14].Equals("3080102.12"));
            //Hash Code is not stable acrosss .Net Versions
            //Assert.AreEqual(1712919498, result);
        }
        public void TestIterationTimeSpanFromStringTooManySeconds()
        {
            TimeSpan result = VistaDateTimeIterator.IterationTimeSpanFromString("1.250290");

            Assert.AreEqual(2, result.Days);
            Assert.AreEqual(1, result.Hours);
            Assert.AreEqual(3, result.Minutes);
            Assert.AreEqual(30, result.Seconds);
        }
        public void TestIterationTimeSpanFromStringOneDay()
        {
            TimeSpan result = VistaDateTimeIterator.IterationTimeSpanFromString("1.");

            Assert.AreEqual(1, result.Days);
            Assert.AreEqual(0, result.Hours);
            Assert.AreEqual(0, result.Minutes);
            Assert.AreEqual(0, result.Seconds);
        }
 public void TestHourRollOver()
 {
     VistaDateTimeIterator testIterator = new VistaDateTimeIterator(
         new DateTime(2008, 01, 01, 22, 0, 0)
         , new DateTime(2008, 01, 03)
         , new TimeSpan(1, 0, 0)
     );
     List<string> values = new List<string>();
     while (!testIterator.IsDone())
     {
         testIterator.SetIterEndDate(); // put at start of loop
         values.Add(testIterator.GetDdrListerPart());
         testIterator.AdvanceIterStartDate(); // put at end of loop
     }
     int result = string.Concat(values.ToArray()).GetHashCode();
     Assert.AreEqual(1712919498, result);
 }
示例#10
0
        public void TestHourRollOver()
        {
            VistaDateTimeIterator testIterator = new VistaDateTimeIterator(
                new DateTime(2008, 01, 01, 22, 0, 0)
                , new DateTime(2008, 01, 03)
                , new TimeSpan(1, 0, 0)
                );
            List <string> values = new List <string>();

            while (!testIterator.IsDone())
            {
                testIterator.SetIterEndDate();       // put at start of loop
                values.Add(testIterator.GetDdrListerPart());
                testIterator.AdvanceIterStartDate(); // put at end of loop
            }
            int result = string.Concat(values.ToArray()).GetHashCode();

            Assert.AreEqual(1712919498, result);
        }
示例#11
0
        public void TestIterationTimeSpanFromStringOhOne()
        {
            TimeSpan result = VistaDateTimeIterator.IterationTimeSpanFromString("01");

            Assert.AreEqual(1, result.Hours);
        }
 public void TestSetIteratorLengthFromEndDateZero()
 {
     VistaDateTimeIterator testIterator = new VistaDateTimeIterator("20080102", "20080103.00");
     Assert.IsTrue(testIterator._iterLength == VistaDateTimeIterator.HOUR_ITERATION);
     Assert.AreEqual((int)VistaDateTimeIterator.PRECISION.HOUR, testIterator._precision);
 }
 public void TestSetIteratorLengthNormalizedNumber()
 {
     VistaDateTimeIterator testIterator = new VistaDateTimeIterator("20080102.000000", "20080103.0000");
     Assert.IsTrue(testIterator._iterLength == VistaDateTimeIterator.SECOND_ITERATION);
     Assert.AreEqual((int)VistaDateTimeIterator.PRECISION.SECOND, testIterator._precision);
 }
示例#14
0
        public void TestIterationDays1HourNoPoint()
        {
            int result = VistaDateTimeIterator.IterationDays("100000");

            Assert.AreEqual(0, result);
        }
 public void TestSetIteratorLengthFromDates()
 {
     VistaDateTimeIterator testIterator = new VistaDateTimeIterator("20080102.234556", "20080103");
     Assert.IsTrue(testIterator._iterLength == VistaDateTimeIterator.SECOND_ITERATION);
     Assert.AreEqual((int)VistaDateTimeIterator.PRECISION.SECOND, testIterator._precision);
 }
示例#16
0
        public void TestIterationHoursNoPoint()
        {
            int result = VistaDateTimeIterator.IterationHours("120000");

            Assert.AreEqual(12, result);
        }
示例#17
0
        public void TestIterationHours()
        {
            int result = VistaDateTimeIterator.IterationHours("1.100000");

            Assert.AreEqual(10, result);
        }
示例#18
0
        public void TestIterationHoursPoint()
        {
            int result = VistaDateTimeIterator.IterationHours(".345000");

            Assert.AreEqual(34, result);
        }
示例#19
0
        public void TestIterationMinutes()
        {
            int result = VistaDateTimeIterator.IterationMinutes(".345000");

            Assert.AreEqual(50, result);
        }
示例#20
0
        public void TestIterationDays()
        {
            int result = VistaDateTimeIterator.IterationDays("1.000000");

            Assert.AreEqual(1, result);
        }
示例#21
0
        /// <summary>Iterates through dates and gets the inpatient moves for those days 
        /// </summary> 
        /// <param name="fromDate">Inclusive start date</param> 
        /// <param name="toDate">Non-inclusive end date</param> 
        /// <returns>Adt array, with length of 0 and no Adts if empty set</returns> 
        public Adt[] getInpatientMoves(string fromDate, string toDate, string iterLength)
        {
            ArrayList allAdts = new ArrayList();
            TimeSpan interval = VistaDateTimeIterator.IterationTimeSpanFromString(iterLength);
            // these are all the same for every query... 

            DdrLister query = buildBasicGetInpatientMovesQuery();
            query.Xref = "B";

#if REFACTORING
            VistaDateTimeIterator iteratingDate
                = new VistaDateTimeIterator(DateUtils.IsoDateStringToDateTime(fromDate)
                                            , DateUtils.IsoDateStringToDateTime(toDate)
                                            , interval
                                            );

            while (!iteratingDate.IsDone())
            {
                iteratingDate.SetIterEndDate();
                query.From = iteratingDate.GetDdrListerPart();
                // part restricts matches, so you actually need to do some iterating and walk through 
                // the toDate will be used in the iteration, and the part will be the same as the iterating date 
                // which starts as the fromDate. 
                query.Part = iteratingDate.GetDdrListerPart();
                string[] rtn = query.execute();
                if (rtn != null && rtn.Length != 0)
                {
                    allAdts.AddRange(toAdt(rtn));
                }
                iteratingDate.AdvanceIterStartDate();
            }
#else 
            // get initial date strings and convert 
            // TBD VAN consider custom formatter or extract to DateUtils 
            DateTime iteratingDate = DateUtils.IsoDateStringToDateTime(fromDate); 
            // non-inclusive end iteration 
            DateTime endDate = DateUtils.IsoDateStringToDateTime(toDate); 
            while (iteratingDate.CompareTo(endDate) < 0) 
            { 
                string iteratingDateStr = iteratingDate.ToString("yyyyMMdd"); 
                query.From = VistaTimestamp.fromUtcString(iteratingDateStr); 
                // part restricts matches, so you actually need to do some iterating and walk through 
                // the toDate will be used in the iteration, and the part will be the same as the iterating date 
                // which starts as the fromDate. 
                query.Part = VistaTimestamp.fromUtcString(iteratingDateStr); 
 
                String[] rtn = query.execute(); 
                if (!Object.Equals(rtn, null)) 
                { 
                    allAdts.AddRange(MakeAdts(rtn)); 
                } 
                DateTime nextDate = iteratingDate.Add(interval); 
                iteratingDate = nextDate; 
            } 
#endif // REFACTORING
            return (Adt[])allAdts.ToArray(typeof(Adt));
        }
示例#22
0
        public void TestIterationSecond()
        {
            int result = VistaDateTimeIterator.IterationSeconds(".345036");

            Assert.AreEqual(36, result);
        }