89 lines
2.7 KiB
C#
89 lines
2.7 KiB
C#
using Core.Calculation;
|
|
using Core.Entities;
|
|
using Tests.Parsers;
|
|
|
|
namespace Tests.Calculation;
|
|
|
|
[TestFixture]
|
|
public class TeamSchedulerTest
|
|
{
|
|
[Test]
|
|
public void Prototype_Test()
|
|
{
|
|
var teamSchedulerTest = new TeamScheduler_Prototype();
|
|
teamSchedulerTest.Solve();
|
|
}
|
|
|
|
[Test]
|
|
public void SolutionTest()
|
|
{
|
|
var events = TestEntityHandler.GetEvents();
|
|
var students = TestEntityHandler.GetStudents(events);
|
|
|
|
var allTeams = TestEntityHandler.GetTeams(events, students);
|
|
var teams = allTeams;
|
|
|
|
teams =
|
|
(from e in events
|
|
from t in teams
|
|
where t.Event == e
|
|
//&& t.Students.Count > 1
|
|
&& (e.EventFormat == EventFormat.Team && e.RegionalEvent)
|
|
select t).ToArray();
|
|
teams =
|
|
teams.Where(t => !t.Event.Name.Contains("Tech Bowl")).ToArray();
|
|
|
|
//var eventAssignment = new EventAssignment(events, students);
|
|
//var teams = eventAssignment.Solve();
|
|
|
|
TeamSchedulerSolution solution;
|
|
if (true)
|
|
{
|
|
var teamScheduler = TeamScheduler.CreateInstance(teams, 3, students);
|
|
solution = teamScheduler.Solve();
|
|
}
|
|
else
|
|
{
|
|
var teamScheduler = new TeamScheduler_DecisionTree(teams, 3);
|
|
solution = teamScheduler.Solve();
|
|
}
|
|
|
|
//solution = new UnassignedStudentScheduler(allTeams, solution.TimeSlots).ScheduleStrategy(UnassignedScheduleStrategy.BiggestGroup);
|
|
//solution = new UnassignedStudentScheduler(allTeams, solution.TimeSlots).ScheduleStrategy(UnassignedScheduleStrategy.IndividualEvents);
|
|
|
|
var i = 1;
|
|
foreach (var slot in solution.TimeSlots)
|
|
{
|
|
Console.WriteLine($"Time slot {i++}");
|
|
foreach (var team in slot.Teams.OrderBy(s => s.Event.Name))
|
|
{
|
|
var names = string.Join(", ", team.Students.OrderByDescending(s => s.Grade + s.TsaYear).Select(s => s.FirstName));
|
|
Console.WriteLine($"\t{team.Event.Name}");
|
|
Console.WriteLine($"\t\t{names}");
|
|
}
|
|
|
|
var overlaps = TeamSchedulerSolution.GetStudentTeamOverlaps(slot.Teams).ToList();
|
|
|
|
if (overlaps.Any())
|
|
{
|
|
Console.WriteLine("\toverlaps");
|
|
foreach (var overlap in overlaps)
|
|
Console.WriteLine(
|
|
$"\t\t{overlap.Item1.Name} : {string.Join(", ", overlap.Item2.Select(t => t.Event.Name))}");
|
|
}
|
|
|
|
var unassigned = UnassignedStudentScheduler.UnassignedStudents(students, slot.Teams).ToList();
|
|
|
|
if (unassigned.Any())
|
|
Console.WriteLine("\tunassigned");
|
|
Console.WriteLine($"\t\t{string.Join(", ", unassigned.Select(s => s.FirstName))}");
|
|
}
|
|
|
|
//var allScheduledTeams = timeSlots.SelectMany(list => list).GroupBy(t => t.Name).SelectMany(g => g).Distinct();
|
|
//foreach (var allScheduledTeam in allScheduledTeams.OrderBy(a => a.Name))
|
|
//{
|
|
// Console.WriteLine($"{allScheduledTeam.Name}");
|
|
// Console.WriteLine($"\t{string.Join(", ", allScheduledTeam.Students.Select(s => s.FirstName))}");
|
|
//}
|
|
}
|
|
} |