public void Test_StateTable_GetStateOfDefinitelyOccupied_2() { var input = Permutator.Run_v2_withoutConsideringWeekNumber(TestData .GetSlotsByName(TestData.Subjects.HighwayAndTransportation).ToArray()); var expected = StateTable.ParseString_AsStateOfDefinitelyOccupied( "00000000000000000000001100000000~" + "00000000000000000000000000000000~" + "00000011110000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000" ); var actual = StateTable.GetStateOfDefinitelyOccupied(input); for (int i = 0; i < 7; i++) { if (expected[i] != actual[i]) { string errorMessage = "Error at day = " + i + "\n"; errorMessage += "Expected = " + Convert.ToString(expected[i], 2) + "\n"; errorMessage += "Actual = " + Convert.ToString(actual[i], 2); Assert.Fail(errorMessage); } } Assert.Pass(); }
public List <List <Slot> > GetPossibleTimetables(Slot[] inputSlots) { var subjects = SubjectModel.Parse(inputSlots.ToList()); Func <Slot[], List <List <Slot> > > permutator = Permutator.Run_v2_withoutConsideringWeekNumber; subjects = SortBySlotCount(subjects); var currentSlots = subjects[0].Slots; var possibleCombination = permutator.Invoke(currentSlots.ToArray()); var state = StateTable.GetStateOfDefinitelyOccupied(possibleCombination); int last = subjects.Count - 1; for (int i = 1; i < subjects.Count; i++) { var originalSchema = new SubjectSchema(subjects[i].Slots); var filtrate = StateTable.Filter(subjects[i].Slots, state); var newSchema = new SubjectSchema(filtrate); if (!originalSchema.Equals(newSchema)) { return(null); } currentSlots.AddRange(filtrate); possibleCombination = permutator.Invoke(currentSlots.ToArray()); if (i != last) { state = StateTable.GetStateOfDefinitelyOccupied(possibleCombination); } } return(possibleCombination); }
public void Test_StateTable_GetStateOfDefinitelyOccupied_1() { var input = Permutator.Run_v2_withoutConsideringWeekNumber(TestData .GetSlotsByName(TestData.Subjects.AdvancedStructuralSteelDesign).ToArray()); var expected = StateTable.ParseString_AsStateOfDefinitelyOccupied( "00000000000000111100000000000000~" + "00110000000000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000~" + "00000000000000000000000000000000" ); var actual = StateTable.GetStateOfDefinitelyOccupied(input); Assert.IsTrue(actual.SequenceEqual(expected)); }