// 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); }
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))); }
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); }
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 }
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); }
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); }
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))); }
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))); }
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); }
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))); }
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); }
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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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))); }
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); }
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))); }
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))); }
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))); }
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); }