public void TestAlgorythm1()
        {
            List<Room> rooms = new List<Room>();

            var roomType1 = new HashSet<RoomType>();
            roomType1.Add(RoomType.Computer);
            var availabilityRoom1 = new List<UniProgramGen.Helpers.TimeSlot>();
            availabilityRoom1.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Monday, 13, 15));
            availabilityRoom1.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Sunday, 16, 17));
            availabilityRoom1.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Tuesday, 12, 17));
            rooms.Add(new Room(roomType1, 30, availabilityRoom1, "404"));

            var roomType2 = new HashSet<RoomType>();
            roomType2.Add(RoomType.Lecture);
            var availabilityRoom2 = new List<UniProgramGen.Helpers.TimeSlot>();
            availabilityRoom2.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Monday, 13, 14));
            availabilityRoom2.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Sunday, 11, 17));
            rooms.Add(new Room(roomType2, 60, availabilityRoom2, "326"));

            var roomType3 = new HashSet<RoomType>();
            roomType1.Add(RoomType.Computer);
            roomType1.Add(RoomType.Projector);
            var availabilityRoom3 = new List<UniProgramGen.Helpers.TimeSlot>();
            availabilityRoom3.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Monday, 12, 14));
            availabilityRoom3.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Friday, 13, 19));
            availabilityRoom3.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Tuesday, 12, 17));
            rooms.Add(new Room(roomType3, 10, availabilityRoom3, "01"));

            // ---------------------------------------------------------------------------------------------------

            List<Teacher> teachers = new List<Teacher>();

            var teacher1freeTime = new List<UniProgramGen.Helpers.TimeSlot>();
            teacher1freeTime.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Monday, 12, 13));
            teacher1freeTime.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Friday, 12, 20));
            var teacher1rooms = new HashSet<Room>();
            teacher1rooms.Add(rooms[1]);
            teacher1rooms.Add(rooms[2]);
            var teacher1requirements = new Requirements(0.3, teacher1freeTime, teacher1rooms);
            teachers.Add(new Teacher(teacher1requirements, "Kiki Vladimiki"));

            var teacher2freeTime = new List<UniProgramGen.Helpers.TimeSlot>();
            teacher2freeTime.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Sunday, 11, 18));
            teacher2freeTime.Add(new UniProgramGen.Helpers.TimeSlot(DayOfWeek.Tuesday, 12, 20));
            var teacher2rooms = new HashSet<Room>();
            teacher2rooms.Add(rooms[0]);
            var teacher2requirements = new Requirements(1, teacher2freeTime, teacher2rooms);
            teachers.Add(new Teacher(teacher2requirements, "Pesho Kelesho"));

            // ---------------------------------------------------------------------------------------------------

            List<Subject> subjects = new List<Subject>();

            var subject1roomtypes = new HashSet<RoomType>();
            subject1roomtypes.Add(RoomType.Computer);
            var subject1teachers = new List<Teacher>();
            subject1teachers.Add(teachers[0]);
            subjects.Add(new Subject(subject1roomtypes, subject1teachers, "OOP", 2));

            var subject2roomtypes = new HashSet<RoomType>();
            subject2roomtypes.Add(RoomType.Lecture);
            var subject2teachers = new List<Teacher>();
            subject2teachers.Add(teachers[1]);
            subjects.Add(new Subject(subject2roomtypes, subject2teachers, "KARH", 1));

            // ---------------------------------------------------------------------------------------------------

            List<Group> groups = new List<Group>();

            var group1subjects = new List<Subject>();
            group1subjects.Add(subjects[0]);
            groups.Add(new Group(group1subjects, 5, "SoftInj1"));

            var group2subjects = new List<Subject>();
            group2subjects.Add(subjects[0]);
            group2subjects.Add(subjects[1]);
            groups.Add(new Group(group2subjects, 6, "SoftInj2"));

            var group3subjects = new List<Subject>();
            group3subjects.Add(subjects[0]);
            group3subjects.Add(subjects[1]);
            groups.Add(new Group(group3subjects, 12, "KompNauki"));

            var generatorRessult = new ProgramGenerator().GenerateProgram(rooms, subjects, teachers, groups);

            var ser = new Newtonsoft.Json.JsonSerializer();

            var ser_string = Newtonsoft.Json.JsonConvert.SerializeObject(generatorRessult);
            //System.IO.File.WriteAllText(@"..\..\program_generated_test.js", ser_string);
        }
 private void buttonGenerate_Click(object sender, EventArgs e)
 {
     var schedules = new ProgramGenerator().GenerateProgram(rooms, subjects, teachers, groups);
     personalSchedule = new Helpers.PersonalSchedule(schedules.First());
     RefreshData();
 }