// if there are any interseptions of weekends
        private List <WeekEnd> WeekendsMegre(WeekEnd[] weekEnds)
        {
            if (weekEnds == null)
            {
                return(new List <WeekEnd>());
            }
            List <WeekEnd> list = new List <WeekEnd>();
            WeekEnd        w    = null;

            foreach (WeekEnd weekEnd in weekEnds)
            {
                if (w is null)
                {
                    w = weekEnd; continue;
                }
                if (weekEnd.StartDate - this.Oneday > w.EndDate)
                {
                    list.Add(w); w = weekEnd;
                }
                else
                {
                    w.EndDate = w.EndDate > weekEnd.EndDate ? w.EndDate : weekEnd.EndDate;
                }
            }
            list.Add(w);
            return(list);
        }
Exemplo n.º 2
0
        public void TestWeekendAfterEnd()
        {
            //DateTime startDate = new DateTime(2021, 4, 21);
            //DateTime startDate = new DateTime(2021, 4, 21);
            DateTime startDate = new DateTime(2021, 4, 28);

            int count = 5;

            //WeekEnd[] weekends = new WeekEnd[2]
            //{
            //    new WeekEnd(new DateTime(2021, 4, 23), new DateTime(2021, 4, 25)),
            //    new WeekEnd(new DateTime(2021, 4, 29), new DateTime(2021, 4, 29))
            //};

            //WeekEnd[] weekends = new WeekEnd[2]
            //{
            //    new WeekEnd(new DateTime(2021, 4, 23), new DateTime(2021, 4, 25)),
            //    new WeekEnd(new DateTime(2021, 4, 28), new DateTime(2021, 4, 28))
            //};

            WeekEnd[] weekends = new WeekEnd[3]
            {
                new WeekEnd(new DateTime(2021, 4, 20), new DateTime(2021, 4, 21)),
                new WeekEnd(new DateTime(2021, 4, 28), new DateTime(2021, 4, 28)),
                new WeekEnd(new DateTime(2021, 4, 29), new DateTime(2021, 4, 29))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            //Assert.IsTrue(result.Equals(new DateTime(2021, 4, 28)));

            //Assert.IsTrue(result.Equals(new DateTime(2021, 4, 29)));

            Assert.IsTrue(result.Equals(new DateTime(2021, 5, 4)));
        }
Exemplo n.º 3
0
        public void TestNegativeDuration()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = -5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 14), new DateTime(2017, 4, 15))
            };
            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);
        }
        public void TestInvalidInputWeekend()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 23), new DateTime(2017, 4, 19)),
            };
            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);
        }
        public void TestInvalidInputDuration()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 0;

            WeekEnd[] weekends = new WeekEnd[2]
            {
                new WeekEnd(new DateTime(2017, 4, 20), new DateTime(2017, 4, 21)),
                new WeekEnd(new DateTime(2017, 4, 26), new DateTime(2017, 4, 27))
            };
            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);
        }
Exemplo n.º 6
0
        public void TestDifferentKindOfTimeZones()
        {
            DateTime startDate = DateTime.UtcNow;
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(DateTime.Now, DateTime.Now)
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends); // should throw an exception
        }
Exemplo n.º 7
0
        public void TestIncorrectWeekends()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 25), new DateTime(2017, 4, 24))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);
        }
Exemplo n.º 8
0
        public void TestWeekendAfterEndEmpty()
        {
            DateTime startDate = new DateTime(2019, 9, 30);
            int      count     = 6;
            DateTime expected  = new DateTime(2019, 10, 5);

            WeekEnd[] weekends = new WeekEnd[]
            {
            };
            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.AreEqual(expected, result);
        }
Exemplo n.º 9
0
        public void TestEmpty()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[0]
            {
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 25)));
        }
Exemplo n.º 10
0
        public void TestMiddleWeekEnd()
        {
            DateTime startDate = new DateTime(2019, 9, 15);
            int      count     = 4;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2019, 9, 12), new DateTime(2019, 9, 17)),
            };
            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2019, 9, 21)));
        }
Exemplo n.º 11
0
        public void TestCurrentDate()
        {
            DateTime startDate = DateTime.Now;
            int      count     = 12;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(DateTime.Now.AddDays(2), DateTime.Now.AddDays(3))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.AreEqual(startDate.AddDays(count), result);
        }
Exemplo n.º 12
0
        public void TestSameStartEndDates()
        {
            DateTime startDate = new DateTime(2012, 2, 1);
            int      count     = 10;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2012, 2, 5), new DateTime(2012, 2, 5))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2012, 2, 11)));
        }
        public void TestWeekendsBeforePeriod()
        {
            DateTime startDate = new DateTime(2017, 4, 20);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 10), new DateTime(2017, 4, 15))
            };

            DateTime result = WorkDayCalculator.Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 24)));
        }
        public void TestWeekendsAfterPeriod()
        {
            DateTime startDate = new DateTime(2017, 4, 20);
            int      count     = 7;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 29), new DateTime(2017, 4, 30))
            };

            DateTime result = WorkDayCalculator.Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 26)));
        }
Exemplo n.º 15
0
        public void TestTwoDaysWeekend()
        {
            DateTime startDate = new DateTime(2019, 3, 27);
            int      count     = 2;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2019, 3, 28), new DateTime(2019, 3, 29))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2019, 3, 30)));
        }
        public void TestWeekEndsStartAtLastWorkDay()
        {
            DateTime startDate = new DateTime(2019, 10, 10);
            int      count     = 2;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2019, 10, 11), new DateTime(2019, 10, 13))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.AreEqual(new DateTime(2019, 10, 14), result);
        }
        public void TestOneDayWeekEnd()
        {
            DateTime startDate = new DateTime(2019, 10, 10);
            int      count     = 9;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2019, 10, 12), new DateTime(2019, 10, 12))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.AreEqual(new DateTime(2019, 10, 19), result);
        }
Exemplo n.º 18
0
        public void TestFirstDayEqualWeekends()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 1;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 21), new DateTime(2017, 4, 21))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 23)));
        }
Exemplo n.º 19
0
        public void TestWeekEndStartBeforeAndEndAfterStartDate()
        {
            DateTime startDate = new DateTime(2015, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2015, 4, 19), new DateTime(2015, 4, 23))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2015, 4, 27)));
        }
Exemplo n.º 20
0
        public void TestOutOfRange()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[]
            {
                new WeekEnd(new DateTime(2017, 5, 28), new DateTime(2017, 5, 30))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(startDate.AddDays(count - 1)));
        }
Exemplo n.º 21
0
        public void TestWeekendBeforeStart()//maybe the period will start over the weekend
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 20), new DateTime(2017, 4, 22))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 27)));
        }
        public void TestOneWeekendsInside()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 23), new DateTime(2017, 4, 23))
            };

            DateTime result = WorkDayCalculator.Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 26)));
        }
Exemplo n.º 23
0
        public void TestNormalTwoMonthsLeapYear()
        {
            DateTime startDate = new DateTime(2019, 2, 27);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2019, 2, 28), new DateTime(2019, 3, 1))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2019, 3, 5)));
        }
Exemplo n.º 24
0
        public void TestNormalPath()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 23), new DateTime(2017, 4, 25))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 28)));
        }
Exemplo n.º 25
0
        public void TestFewMonths()
        {
            DateTime startDate = new DateTime(2019, 9, 25);
            int      count     = 10;

            WeekEnd[] weekends = new WeekEnd[2]
            {
                new WeekEnd(new DateTime(2019, 9, 27), new DateTime(2019, 10, 28)),
                new WeekEnd(new DateTime(2019, 11, 1), new DateTime(2019, 11, 5))
            };
            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2019, 11, 10)));
        }
Exemplo n.º 26
0
        public void TestWeekendBeforeStart()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 14), new DateTime(2017, 4, 15))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.AreEqual(startDate.AddDays(count - 1), result);
        }
Exemplo n.º 27
0
        public void TestIntervalInsideWeekend()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[1]
            {
                new WeekEnd(new DateTime(2017, 4, 20), new DateTime(2017, 4, 29))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 5, 4)));
        }
Exemplo n.º 28
0
        public void TestDoubleWeekends()
        {
            DateTime startDate = new DateTime(2017, 4, 1);
            int      count     = 10;

            WeekEnd[] weekends = new WeekEnd[2]
            {
                new WeekEnd(new DateTime(2017, 4, 2), new DateTime(2017, 4, 4)),
                new WeekEnd(new DateTime(2017, 4, 6), new DateTime(2017, 4, 7))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 4, 15)));
        }
Exemplo n.º 29
0
        public void TestWeekendsStartFromStartDate()
        {
            DateTime startDate = new DateTime(2017, 4, 21);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[2]
            {
                new WeekEnd(new DateTime(2017, 4, 21), new DateTime(2017, 4, 25)),
                new WeekEnd(new DateTime(2017, 4, 29), new DateTime(2017, 4, 29))
            };

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.IsTrue(result.Equals(new DateTime(2017, 5, 1)));
        }
Exemplo n.º 30
0
        public void TestHighLoad()
        {
            DateTime startDate = new DateTime(2017, 4, 1);
            int      count     = 5;

            WeekEnd[] weekends = new WeekEnd[100];
            for (int i = 0; i < 100; i++)
            {
                weekends[i] = new WeekEnd(startDate.AddDays(i), startDate.AddDays(i));
            }

            DateTime result = new WorkDayCalculator().Calculate(startDate, count, weekends);

            Assert.AreEqual(new DateTime(2017, 7, 14), result);
        }