public void DisposeTest() { var ttg = new TimetableGenerator(); ttg.Dispose(); Assert.IsNull(ttg.TokenSource); }
public void StopAlgorithmTest() { var tokenSource = new CancellationTokenSource(); var ttg = new TimetableGenerator(tokenSource); ttg.StopAlgorithm(); Assert.IsTrue(tokenSource.IsCancellationRequested); }
public Task <Timetable> Start() { // Create algorithm task using (var model = new DataModel(StageIds)) using (var generator = new TimetableGenerator()) { return(generator.RunAlgorithm(new FetAlgorithm(), model)); } }
public void RefreshIdTest() { var ttg = new TimetableGenerator(); var previousIdentifier = ttg.CurrentRunIdentifier; ttg.RefreshIdentifier(); // Verify that the identifier is refreshed Assert.AreNotEqual(previousIdentifier, ttg.CurrentRunIdentifier); }
public void RunAlgorithmTest() { var ttg = new TimetableGenerator(); var mockAlgorithm = new Mock <TimetablingStrategy>(); var previousIdentifier = ttg.CurrentRunIdentifier; var task = ttg.RunAlgorithm(mockAlgorithm.Object, null); // Verify that the identifier is refreshed Assert.AreNotEqual(previousIdentifier, ttg.CurrentRunIdentifier); // Verify that a Timetable task is generated mockAlgorithm.Verify(mock => mock.GenerateTask(ttg.CurrentRunIdentifier, null, It.IsAny <CancellationToken>()), Times.Once); Assert.IsInstanceOf <Task <Timetable> >(task); }
public async Task <IActionResult> GenerateTimetableData() { try { // Construct a new generator with some sensible contraints. TimetableGenerator generator = new TimetableGenerator( DateTime.Now.Date, DateTime.Now.AddDays(7).Date, TimeSpan.FromHours(9), TimeSpan.FromHours(18), 2, await DissDatabaseContext.Nodes .Where(node => node.Type == NodeType.Room && node.LeafletNodeType == "room") .Select(node => node.NodeId) .ToArrayAsync() ); // Generate the list of events for 20,000 students. List <TimetableEvent> output = generator.GenerateStudentTimetables(20000); // Remove entire content of events table. DissDatabaseContext.TimetableEvents.RemoveRange(DissDatabaseContext.TimetableEvents); await DissDatabaseContext.SaveChangesAsync(); // Add the new dataset to the database. DissDatabaseContext.TimetableEvents.AddRange(output); // Save changes - long running operation due to network transfer. await DissDatabaseContext.SaveChangesAsync(); return(Created("", "")); } catch (Exception e) { return(StatusCode(500, e.Message)); } }