public void CanFit_CourseWillFitOnlyInLastDay_Yes() { course2.Students = 20; room2.Seats = 20; broom3 = new BookableRoom(end.AddMinutes(2), end.AddMinutes(7), room2); broomList2 = new List<BookableRoom>() { broom3 }; day2 = new Day(broomList2); table1 = new Timetable(new List<Day>() { day1, day2 }); Assert.IsTrue(table1.CanFit(course2)); }
/// <summary> /// list of courses /// timetable /// /// for each course in the list of courses /// try to fit this course in the timetable /// fit is found: /// fit course in a copy of the timetable /// make a copy of the list of courses and remove the reference to this course (shallow) /// call this method with the copied list and timetable /// fit is not found: /// try the next course in the list of courses /// </summary> private bool FitCourses(List<Course> courses, Timetable timetable) { int before = GeneratedTables.Count; if (courses.Any()) { foreach (Course course in courses) { // TODO: optimise for speed by combining check and actually fitting if (timetable.CanFit(course)) { // Clone the list of courses left to fit List<Course> coursesLeft = (List<Course>)courses.Clone(); // Remove the course that's going to be fitted from this cloned list coursesLeft.Remove(course); // Clone the timetable Timetable newTimetable = (Timetable)timetable.Clone(); // Fit the course in the cloned timetable newTimetable.Fit(course); // Try to fit the remaining courses FitCourses(coursesLeft, newTimetable); } } } else { bool added = GeneratedTables.Add(timetable); string output = String.Format("Item was added? {0}", added); Console.Out.WriteLine(output); } return before < GeneratedTables.Count; }