示例#1
0
        public void DisposeTest()
        {
            var ttg = new TimetableGenerator();

            ttg.Dispose();

            Assert.IsNull(ttg.TokenSource);
        }
示例#2
0
        public void StopAlgorithmTest()
        {
            var tokenSource = new CancellationTokenSource();
            var ttg         = new TimetableGenerator(tokenSource);

            ttg.StopAlgorithm();

            Assert.IsTrue(tokenSource.IsCancellationRequested);
        }
示例#3
0
 public Task <Timetable> Start()
 {
     // Create algorithm task
     using (var model = new DataModel(StageIds))
         using (var generator = new TimetableGenerator())
         {
             return(generator.RunAlgorithm(new FetAlgorithm(), model));
         }
 }
示例#4
0
        public void RefreshIdTest()
        {
            var ttg = new TimetableGenerator();

            var previousIdentifier = ttg.CurrentRunIdentifier;

            ttg.RefreshIdentifier();

            // Verify that the identifier is refreshed
            Assert.AreNotEqual(previousIdentifier, ttg.CurrentRunIdentifier);
        }
示例#5
0
        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);
        }
示例#6
0
        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));
            }
        }