Exemple #1
0
        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));
        }
Exemple #2
0
        public void Deconstruct()
        {
            var dayHour = new DayHour(5, 12);

            var(day, hour) = dayHour;
            Assert.Equal(dayHour.Day, day);
            Assert.Equal(dayHour.Hour, hour);
        }
Exemple #3
0
        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);
        }
Exemple #4
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);
        }
Exemple #5
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));
        }
Exemple #6
0
        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>();
        }
Exemple #7
0
        /// <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);
        }