public void Equal(int d1, int h1, int d2, int h2) { var first = new DayHour(d1, h1); var second = new DayHour(d2, h2); Assert.Equal(first, second); Assert.True(first == second); Assert.True(second == first); Assert.False(first != second); Assert.False(second != first); Assert.True(first <= second); Assert.True(first >= second); Assert.True(second <= first); Assert.True(second >= first); Assert.False(first < second); Assert.False(first > second); Assert.False(second < first); Assert.False(second > first); Assert.True(first.Equals(second)); Assert.True(second.Equals(first)); Assert.True(Object.Equals(first, second)); Assert.True(Object.Equals(second, first)); Assert.True(((object)first).Equals(second)); Assert.True(((object)second).Equals(first)); Assert.Equal(first.GetHashCode(), second.GetHashCode()); Assert.Equal(0, first.CompareTo(second)); Assert.Equal(0, second.CompareTo(first)); }
public void Deconstruct() { var dayHour = new DayHour(5, 12); var(day, hour) = dayHour; Assert.Equal(dayHour.Day, day); Assert.Equal(dayHour.Hour, hour); }
public void Greater(int d1, int h1, int d2, int h2) { var first = new DayHour(d1, h1); var second = new DayHour(d2, h2); Assert.True(first.CompareTo(second) > 0); Assert.True(first > second); Assert.True(first >= second); Assert.True(((IComparable)first).CompareTo(second) > 0); }
public void Less(int d1, int h1, int d2, int h2) { var first = new DayHour(d1, h1); var second = new DayHour(d2, h2); Assert.True(first.CompareTo(second) < 0); Assert.True(first < second); Assert.True(first <= second); Assert.True(((IComparable)first).CompareTo(second) < 0); }
public void NotEqual(int d1, int h1, int d2, int h2) { var first = new DayHour(d1, h1); var second = new DayHour(d2, h2); Assert.NotEqual(first, second); Assert.False(first == second); Assert.False(second == first); Assert.True(first != second); Assert.True(second != first); Assert.False(first.Equals(second)); Assert.False(second.Equals(first)); Assert.False(Object.Equals(first, second)); Assert.False(Object.Equals(second, first)); Assert.False(((object)first).Equals(second)); Assert.False(((object)second).Equals(first)); }
private void DoLoop() { subject = GetNextSubject();// get 1st subject do { if (usedSubgroups.Count == GetMaxSlots()) // check if subject configured for all subgroups { if (subjects.Count == 0) { break; // All subjects assigned } subject = GetNextSubject(); // take next subject } subgroup = GetNextSubgroup(); // take next subgroup eg. lab-2 if (subject != null) { lastUsedHour = GetNextTime(); // find next available hour represented as day number + hour number SetUpLesson(); // save lesson } } while (subject != null); // do until all subject processed plans.Add(lessons); // add plan to list of plans lessons = new List <LessonModel>(); }
/// <summary> /// Get next free time for lesson. /// </summary> /// <param name="includeUnreserved">If "true" include also hours not reserved for ex/lab/proj.</param> /// <returns></returns> private DayHour GetNextTime(bool includeUnreserved = false) { DayHour output;// = new KeyValuePair<int, int>(-1,-1); DayModel tmpDay = new DayModel(); int tmpHour = -1; int slotsMax = GetMaxSlots(); PersonUnavDaysHours currentTeacherUnav = teachersUnav.First(t => t.PerId == subject.TeacherId); room = new RoomModel(); RoomModel _room = null; attemptNo++; int tolerance = 0; do { tolerance += 15; foreach (var day in daysDictionary) // loop in days { if (!CanNextLessonBeAdded(day, group.MaxLessonsPerDay)) // check if adding new lesson will not breake requirments { continue; // skip to next day } foreach (var hour in day.Hours) // loop in day's hours { if (hour.SlotsMax == slotsMax && // check if hours is divided for slots according to current subgroup type hour.SlotsReserved[subgroup.GrNo - 1] == 0 && // check if slot for this subgroup is not reserved !(currentTeacherUnav.DayAndHour.Exists( th => th.dayNo == day.DayNo && th.hourNo == hour.HourNo)) //check if teacher is not blocked ) { _room = GetRoom(day.DayNo, hour.HourNo, tolerance); // get room if fulfill conditions if (_room != null) { // save found resources room = _room; tmpDay = day; tmpHour = hour.HourNo; break; } } } if (tmpHour != -1 && _room != null) // do not take next day if correct time was found { break; } } // search again if time not found - do not include reserved slots if (tmpHour == -1 && _room == null) // { foreach (var day in daysDictionary) { if (!CanNextLessonBeAdded(day, group.MaxLessonsPerDay)) { continue; } foreach (var hour in day.Hours) { if (hour.SlotsMax == 0 && !(currentTeacherUnav.DayAndHour.Exists(th => th.dayNo == day.DayNo && th.hourNo == hour.HourNo)) ) { _room = GetRoom(day.DayNo, hour.HourNo, tolerance); if (_room != null) { room = _room; tmpDay = day; tmpHour = hour.HourNo; break; } } } if (tmpHour != -1 && _room != null) // do not take next day if correct time was found { break; } } }////// } while (_room == null && maxSitsInRoom >= (subgroup.StudentsCnt + tolerance)); /****************************** No Room included **********************************/ if (_room == null) //in case no available room was found. { foreach (var day in daysDictionary) { if (!CanNextLessonBeAdded(day, group.MaxLessonsPerDay)) // do not allow to add more then 6 lesson per day for specyfic subgroup { continue; } foreach (var hour in day.Hours) { if (hour.SlotsMax == slotsMax && hour.SlotsReserved[subgroup.GrNo - 1] == 0 && !(currentTeacherUnav.DayAndHour.Exists(th => th.dayNo == day.DayNo && th.hourNo == hour.HourNo)) ) { tmpDay = day; tmpHour = hour.HourNo; break; } } if (tmpHour != -1) // do not take next day if correct time was found { break; } } if (tmpHour == -1) // now we don't include reserved slots { foreach (var day in daysDictionary) { if (!CanNextLessonBeAdded(day, group.MaxLessonsPerDay)) // do not allow to add more then 6 lesson per day for specyfic subgroup { continue; } foreach (var hour in day.Hours) { if (hour.SlotsMax == 0 && !(currentTeacherUnav.DayAndHour.Exists(th => th.dayNo == day.DayNo && th.hourNo == hour.HourNo)) ) { tmpDay = day; tmpHour = hour.HourNo; break; } } if (tmpHour != -1) // do not take next day if correct time was found { break; } } } } output = new DayHour(tmpDay.DayNo, tmpHour); return(output); }