public void T001_ScheduleItem_Constructors()
        {
            //Basic constructor
            ScheduleItem theBasicItem = new ScheduleItem(itemName);
            Assert.AreEqual<string>(itemName, theBasicItem.ItemName);
            Assert.AreEqual<int>(0, theBasicItem.Duration);

            //Detailed constructor (start/end hours and minutes)
            ScheduleItem theDetailItem1 = new ScheduleItem(itemName, startHour, startMinute, endHour, endMinute);
            Assert.AreEqual<string>(itemName, theDetailItem1.ItemName);
            Assert.AreEqual<TimeHHMM>(startTime, theDetailItem1.StartTime);
            Assert.AreEqual<TimeHHMM>(endTime, theDetailItem1.EndTime);
            Assert.AreEqual<int>(duration, theDetailItem1.Duration);

            //Detailed constructor (start/end time objects)
            ScheduleItem theDetailItem2 = new ScheduleItem(itemName, startTime, endTime);
            Assert.AreEqual<string>(itemName, theDetailItem2.ItemName);
            Assert.AreEqual<TimeHHMM>(startTime, theDetailItem2.StartTime);
            Assert.AreEqual<TimeHHMM>(endTime, theDetailItem2.EndTime);
            Assert.AreEqual<int>(duration, theDetailItem2.Duration);

            //Detailed constructor (start hour/minute and duration)
            ScheduleItem theDetailItem3 = new ScheduleItem(itemName, startHour, startMinute, duration);
            Assert.AreEqual<string>(itemName, theDetailItem3.ItemName);
            Assert.AreEqual<TimeHHMM>(startTime, theDetailItem3.StartTime);
            Assert.AreEqual<TimeHHMM>(endTime, theDetailItem3.EndTime);
            Assert.AreEqual<int>(duration, theDetailItem3.Duration);

            //Detailed constructor (start time and duration)
            ScheduleItem theDetailItem4 = new ScheduleItem(itemName, startTime, duration);
            Assert.AreEqual<string>(itemName, theDetailItem4.ItemName);
            Assert.AreEqual<TimeHHMM>(startTime, theDetailItem4.StartTime);
            Assert.AreEqual<TimeHHMM>(endTime, theDetailItem4.EndTime);
            Assert.AreEqual<int>(duration, theDetailItem4.Duration);
        }
Ejemplo n.º 2
0
        public bool Equals(ScheduleItem rhs)
        {
            //Check for null
            if (null == (object)rhs)
            {
                return false;
            }

            //Equal if name, startTime, and endTime are equal
            return ((ItemName == rhs.ItemName) && (StartTime == rhs.StartTime) && (EndTime == rhs.EndTime));
        }
Ejemplo n.º 3
0
        /**
        *<summary>
        * Checks if two ScheduleItems conflict
        *</summary>
        */
        public bool ConflictsWith(ScheduleItem item2)
        {
            //Check for null
            if(null == (object) item2)
            {
                return false;
            }

            //Check that start time
            if(item2.StartTime >= EndTime)
            {
                return false;
            }
            if(item2.StartTime >= StartTime)
            {
                return true;
            }

            //Check that end time out of range
            if(item2.EndTime <= StartTime)
            {
                return false;
            }
            if(item2.EndTime <= EndTime)
            {
                return true;
            }

            return false;
        }
        public void T002_Student_AddClass()
        {
            /** Method Locals */
            //Miscellaneous
            bool result = false;
            //Student object
            Student nominalTestStudent = new Student("John", "Doe");
            Student failTestStudent = new Student("Jane", "Doe");
            Student scheduleConflictStudent = new Student("Steve", "Doe");
            Student nameConflictStudent = new Student("Sally", "Doe");
            //Class names
            String[] classNames =
            {
                "Homeroom",
                "Reading",
                "Math",
                "Social Studies",
                "Recess"
            };
            //Class start times Tuples
            Tuple<int, int>[] startTimes =
            {
                new Tuple<int, int>( 8,  0),
                new Tuple<int, int>( 9,  0),
                new Tuple<int, int>( 9, 55),
                new Tuple<int, int>(10, 40),
                new Tuple<int, int>(11, 30)
            };
            //Class start time TimeHHMM
            TimeHHMM[] classStartTimes =
            {
                new TimeHHMM(startTimes[0].Item1, startTimes[0].Item2),
                new TimeHHMM(startTimes[1].Item1, startTimes[1].Item2),
                new TimeHHMM(startTimes[2].Item1, startTimes[2].Item2),
                new TimeHHMM(startTimes[3].Item1, startTimes[3].Item2),
                new TimeHHMM(startTimes[4].Item1, startTimes[4].Item2)
            };
            //Class end times Tuples
            Tuple<int, int>[] endTimes =
            {
                new Tuple<int, int>( 8, 50),
                new Tuple<int, int>( 9, 45),
                new Tuple<int, int>(10, 30),
                new Tuple<int, int>(11, 30),
                new Tuple<int, int>(12, 15)
            };
            //Class end time TimeHHMM
            TimeHHMM[] classEndTimes =
            {
                new TimeHHMM(endTimes[0].Item1, endTimes[0].Item2),
                new TimeHHMM(endTimes[1].Item1, endTimes[1].Item2),
                new TimeHHMM(endTimes[2].Item1, endTimes[2].Item2),
                new TimeHHMM(endTimes[3].Item1, endTimes[3].Item2),
                new TimeHHMM(endTimes[4].Item1, endTimes[4].Item2)
            };

            /** Nominal AddClass() Scenarios */
            result = nominalTestStudent.AddClass(classNames[0], classStartTimes[0], classEndTimes[0]);
            Assert.IsTrue(result);

            result = nominalTestStudent.AddClass(classNames[1], startTimes[1].Item1, startTimes[1].Item2, 50);
            Assert.IsTrue(result);

            result = nominalTestStudent.AddClass(classNames[2], startTimes[2].Item1, startTimes[2].Item2, endTimes[2].Item1, endTimes[2].Item2);
            Assert.IsTrue(result);

            result = nominalTestStudent.AddClass(classNames[3], classStartTimes[3], 50);
            Assert.IsTrue(result);

            result = nominalTestStudent.AddClass(new ScheduleItem(classNames[4], classStartTimes[4], classEndTimes[4]));
            Assert.IsTrue(result);

            /** Failure AddClass() Scenarios */
            result = failTestStudent.AddClass("", classStartTimes[0], classEndTimes[0]);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[0], null, classEndTimes[0]);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[0], classStartTimes[0], null);
            Assert.IsFalse(result);

            result = failTestStudent.AddClass("", startTimes[1].Item1, startTimes[1].Item2, 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[1], -1, startTimes[1].Item2, 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[1], 24, startTimes[1].Item2, 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[1], startTimes[1].Item1, -1, 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[1], startTimes[1].Item1, 60, 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[1], startTimes[1].Item1, startTimes[1].Item2, 0);
            Assert.IsFalse(result);

            result = failTestStudent.AddClass("", startTimes[2].Item1, startTimes[2].Item2, endTimes[2].Item1, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], -1, startTimes[2].Item2, endTimes[2].Item1, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], 24, startTimes[2].Item2, endTimes[2].Item1, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], startTimes[2].Item1, -1, endTimes[2].Item1, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], startTimes[2].Item1, 60, endTimes[2].Item1, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], startTimes[2].Item1, startTimes[2].Item2, -1, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], startTimes[2].Item1, startTimes[2].Item2, 24, endTimes[2].Item2);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], startTimes[2].Item1, startTimes[2].Item2, endTimes[2].Item1, -1);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[2], startTimes[2].Item1, startTimes[2].Item2, endTimes[2].Item1, 60);
            Assert.IsFalse(result);

            result = failTestStudent.AddClass("", classStartTimes[3], 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[3], null, 50);
            Assert.IsFalse(result);
            result = failTestStudent.AddClass(classNames[3], classStartTimes[3], 0);
            Assert.IsFalse(result);

            result = failTestStudent.AddClass(null);
            Assert.IsFalse(result);

            /** Schedule conflict failure */
            TimeHHMM overlappingStart = classStartTimes[0] - 15;
            TimeHHMM overlappingEnd = classEndTimes[0] - 15;

            result = scheduleConflictStudent.AddClass(classNames[0], classStartTimes[0], classEndTimes[0]); //Add first class
            Assert.IsTrue(result);

            //Overlap start of class by 15m
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingStart, classEndTimes[0]);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingStart.Hour, overlappingStart.Minute, 30);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingStart.Hour, overlappingStart.Minute, endTimes[0].Item1, endTimes[0].Item2);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingStart, 30);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass(new ScheduleItem("WillFailClass", overlappingStart, 30));
            Assert.IsFalse(result);

            //Overlap end of class by 15m
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingEnd, classEndTimes[0]);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingEnd.Hour, overlappingEnd.Minute, 15);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingEnd.Hour, overlappingEnd.Minute, endTimes[0].Item1, endTimes[0].Item2);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass("WillFailClass", overlappingEnd, 15);
            Assert.IsFalse(result);
            result = scheduleConflictStudent.AddClass(new ScheduleItem("WillFailClass", overlappingEnd, 15));
            Assert.IsFalse(result);

            /** Name conflict failure */
            ScheduleItem duplicateClass = new ScheduleItem(classNames[0], classEndTimes[0] + 30, 30);

            //Add valid class to schedule
            result = nameConflictStudent.AddClass(classNames[0], classStartTimes[0], classEndTimes[0]);
            Assert.IsTrue(result);

            //Try to add duplicate class (same name, different time)
            result = nameConflictStudent.AddClass(duplicateClass);
            Assert.IsFalse(result);
        }
        public void T004_Student_Reschedule()
        {
            bool result = false;

            //Classes for test
            ScheduleItem class1 = new ScheduleItem("Class1", new TimeHHMM(8, 30), 30);
            ScheduleItem class2 = new ScheduleItem("Class2", new TimeHHMM(9, 30), 30);
            ScheduleItem class2moved = new ScheduleItem("Class2", new TimeHHMM(12, 30), 30);
            //Student for test
            Student testStudent = new Student("Jane", "Doe");

            //Build basic, valid schedule
            result = testStudent.AddClass(class1);
            Assert.IsTrue(result);
            result = testStudent.AddClass(class2);
            Assert.IsTrue(result);
            Assert.AreEqual<int>(2, testStudent.StudentSchedule.Count);

            /** Nominal reschedule */
            result = testStudent.Reschedule(class2.ItemName, new TimeHHMM(12, 30));
            Assert.IsTrue(result);
            Assert.AreEqual<int>(2, testStudent.StudentSchedule.Count); //Still only 2 classes in schedule

            /** Conflict reschedule */
            result = testStudent.Reschedule(class2.ItemName, new TimeHHMM(8, 45));
            Assert.IsFalse(result);
            result = testStudent.GetClass(class1.ItemName) == class1;
            Assert.IsTrue(result); //Class1 hasn't moved
            result = testStudent.GetClass(class2moved.ItemName) == class2moved;
            Assert.IsTrue(result); //Class2 is still in modified location
        }
        public void T003_Student_GetClass()
        {
            bool result = false;

            /** Classes for test */
            ScheduleItem class1 = new ScheduleItem("Class1", new TimeHHMM(8, 30), 30);
            ScheduleItem class2 = new ScheduleItem("Class2", new TimeHHMM(9, 30), 30);
            ScheduleItem foundClass;
            /** Student for test */
            Student testStudent = new Student("Jane", "Doe");

            //Build basic, valid schedule
            result = testStudent.AddClass(class1);
            Assert.IsTrue(result);
            result = testStudent.AddClass(class2);
            Assert.IsTrue(result);
            Assert.AreEqual<int>(2, testStudent.StudentSchedule.Count);

            //Nominal GetClass
            foundClass = testStudent.GetClass(class1.ItemName);
            Assert.AreEqual<ScheduleItem>(class1, foundClass);
            foundClass = testStudent.GetClass(class2.ItemName);
            Assert.AreEqual<ScheduleItem>(class2, foundClass);

            //Failed GetClass
            foundClass = testStudent.GetClass("Class3");
            Assert.AreEqual<object>(null, (object)foundClass);
        }
        public void T002_ScheduleItem_ConflictsWith()
        {
            bool result = false;

            //New TimeHHMMs for Test
            TimeHHMM time1 = new TimeHHMM(8, 30);
            TimeHHMM time2 = new TimeHHMM(8, 45);
            TimeHHMM time3 = new TimeHHMM(9,  0);

            //ScheduleItems for Test
            ScheduleItem item1 = new ScheduleItem("Item1", time1, 30);
            ScheduleItem item2 = new ScheduleItem("Item2", time2, 30);
            ScheduleItem item3 = new ScheduleItem("Item3", time3, 30);

            //No Conflict
            result = item1.ConflictsWith(item3);
            Assert.IsFalse(result);
            result = item1.ConflictsWith(null);
            Assert.IsFalse(result);

            //Conflict
            result = item1.ConflictsWith(item2);
            Assert.IsTrue(result);
        }
        public void T005_ScheduleItem_Reschedule()
        {
            bool result = false;

            //TimeHHMMs for Test
            TimeHHMM startTime = new TimeHHMM(8, 30);
            TimeHHMM endTime = new TimeHHMM(9, 0);
            TimeHHMM newTime = new TimeHHMM(9, 30);

            //Nominal Test
            ScheduleItem nominalItem = new ScheduleItem("Nominal Item", startTime, endTime);
            result = nominalItem.Reschedule(newTime);
            Assert.IsTrue(result);
            Assert.AreEqual<TimeHHMM>(newTime, nominalItem.StartTime); //New start time
            Assert.AreNotEqual<TimeHHMM>(endTime, nominalItem.EndTime); //New end time
            Assert.AreEqual<int>((int) (endTime - startTime).TotalMinutes, nominalItem.Duration); //Same duration

            //Failed test
            ScheduleItem failureItem = new ScheduleItem("Failure Item", new TimeHHMM(11, 0), 45);
            result = failureItem.Reschedule(null);
            Assert.IsFalse(result);
        }
Ejemplo n.º 9
0
        /**
        *<summary>
        *With Name, Start hour/minute, and End hour/minute
        *</summary>
        */
        public bool AddClass(string className, int startHour, int startMinute, int endHour, int endMinute)
        {
            //Validate className (non-empty String)
            if ("" == className)
            {
                return false;
            }

            //Validate startHour (0-23)
            if ((0 > startHour) || (23 < startHour))
            {
                return false;
            }

            //Validate startMinute (0-59)
            if ((0 > startMinute) || (59 < startMinute))
            {
                return false;
            }

            //Validate endHour (0-23)
            if ((0 > endHour) || (23 < endHour))
            {
                return false;
            }

            //Validate endMinute (0-59)
            if ((0 > endMinute) || (59 < endMinute))
            {
                return false;
            }

            //Create the ScheduleItem
            ScheduleItem newClass = new ScheduleItem(className, new TimeHHMM(startHour, startMinute), new TimeHHMM(endHour, endMinute));
            if (scheduleConflict(newClass))
            {
                return false;
            }

            //Check that new class isn't same name as any existing
            if (nameConflict(newClass))
            {
                return false;
            }

            //Add class to schedule
            studentSchedule.Add(newClass);
            return true;
        }
        public void T004_ScheduleItem_ConflictsWithEnd()
        {
            bool result = false;

            //New TimeHHMMs for Test
            TimeHHMM time1 = new TimeHHMM(8, 30);
            TimeHHMM time2 = new TimeHHMM(8, 45);
            TimeHHMM time3 = new TimeHHMM(9,  0);

            //ScheduleItems for Test
            ScheduleItem item = new ScheduleItem("Item", time1, 30);

            //No Conflict
            result = item.ConflictsWithEnd(time1);
            Assert.IsFalse(result);

            //Conflict
            result = item.ConflictsWithEnd(time2);
            Assert.IsTrue(result);
            result = item.ConflictsWithEnd(time3);
            Assert.IsTrue(result);
        }
Ejemplo n.º 11
0
 /**
 *<summary>
 *Schedule conflict helper (ScheduleItems conflict with ScheduleItems)
 *</summary>
 */
 private bool scheduleConflict(ScheduleItem newClass)
 {
     return (null != (object)studentSchedule.Find(x => x.ConflictsWith(newClass)));
 }
Ejemplo n.º 12
0
 /**
 *<summary>
 *Name conflict helper
 *</summary>
 */
 private bool nameConflict(ScheduleItem newClass)
 {
     return (null != (object)studentSchedule.Find(x => x.ItemName.Equals(newClass.ItemName)));
 }
Ejemplo n.º 13
0
        /**
        *<summary>
        *With ScheduleItem
        *</summary>
        */
        public bool AddClass(ScheduleItem newClass)
        {
            //Validate newClass
            if(null == (object)newClass)
            {
                return false;
            }

            //Check that new class doesnt conflict with any existing
            if(scheduleConflict(newClass))
            {
                return false;
            }

            //Check that new class isn't same name as any existing
            if(nameConflict(newClass))
            {
                return false;
            }

            //Add class to schedule
            studentSchedule.Add(newClass);
            return true;
        }
Ejemplo n.º 14
0
        /**
        *<summary>
        *With Name, Start TimeHHMM, and Duration
        *</summary>
        */
        public bool AddClass(string className, TimeHHMM startTime, int minutesDuration)
        {
            //Validate className
            if ("" == className)
            {
                return false;
            }

            //Validate startTime
            if (null == (object)startTime)
            {
                return false;
            }

            //Validate minutesDuration
            if (minutesDuration <= 0)
            {
                return false;
            }

            //Check that new class doesn't conflict with any existing
            ScheduleItem newClass = new ScheduleItem(className, startTime, minutesDuration);
            if (scheduleConflict(newClass))
            {
                return false;
            }

            //Check that new class isn't same name as any existing
            if (nameConflict(newClass))
            {
                return false;
            }

            //Add class to schedule
            studentSchedule.Add(newClass);
            return true;
        }
Ejemplo n.º 15
0
        /**
        *<summary>
        *With Name, Start hour/minute, and Duration
        *</summary>
        */
        public bool AddClass(string className, int startHour, int startMinute, int minutesDuration)
        {
            //Validate className
            if ("" == className)
            {
                return false;
            }

            //Validate startHour (0-23)
            if ((0 > startHour) || (23 < startHour))
            {
                return false;
            }

            //Validate startMinute (0-59)
            if ((0 > startMinute) || (59 < startMinute))
            {
                return false;
            }

            //Validate minutesDuration
            if (minutesDuration <= 0)
            {
                return false;
            }

            //Check that new class doesn't conflict with any existing
            ScheduleItem newClass = new ScheduleItem(className, startHour, startMinute, minutesDuration);
            if (scheduleConflict(newClass))
            {
                return false;
            }

            //Check that new class isn't same name as any existing
            if (nameConflict(newClass))
            {
                return false;
            }

            //Add class to schedule
            studentSchedule.Add(newClass);
            return true;
        }