public void WeeklyTime_CompareTo() { var zoo = new WeeklyTime(DayOfWeek.Monday, 0, 0, 0); var foo = new WeeklyTime(DayOfWeek.Monday, 1, 1, 1); var moo = new WeeklyTime(DayOfWeek.Monday, 1, 1, 1); var bar = new WeeklyTime(DayOfWeek.Monday, 2, 2, 2); Assert.True(foo.CompareTo(bar) == -1); Assert.True(foo.CompareTo(moo) == 0); Assert.True(foo.CompareTo(zoo) == 1); }
public void WeeklyTime_CompareToInvalid() { var did_throw = false; var zoo = new WeeklyTime(DayOfWeek.Monday, 0, 0, 0); var boo = new object(); try { zoo.CompareTo(boo); } catch (ArgumentException) { did_throw = true; } Assert.True(did_throw); }
/// <summary> /// This method returns the next RouteInstance to depart from the given the date time. /// /// If the Route has no deliveryTimes, the method will return null. Otherwise, it will return a RouteInstance with /// the DateTime of the next delivery time. /// </summary> /// <param name="time"></param> /// <returns></returns> public RouteInstance GetNextDeparture(DateTime time) { if (departureTimes.Count == 0) { return null; } var asWeeklyTime = new WeeklyTime(time); // find next departure time WeeklyTime nextDeparture = null; foreach (WeeklyTime departureTime in departureTimes) { var value = asWeeklyTime.CompareTo(departureTime); if ( value <= 0) { nextDeparture = departureTime; break; } } int extraMinutes = 0; // extra time to add if the departureTime is next week. // if no deliveries this week, get first one next week. if (nextDeparture == null) { nextDeparture = departureTimes[0]; extraMinutes = WeeklyTime.MINUTES_IN_A_WEEK; } // work out datetime int minutesDifference = (int)(nextDeparture.Value.TotalMinutes - asWeeklyTime.Value.TotalMinutes) + extraMinutes; var departureDateTime = time.AddMinutes(minutesDifference); // create and return route instance return new RouteInstance(this, departureDateTime); }