public void AddTokenTest() { #region Тест одновходного блока и AndBlock andBlock = new AndBlock(1); andBlock.AddToken(new Token(0, 0), 0); //првоеряем, родил ли блок токен Assert.IsNotNull(andBlock.GetOutputToken(0)); #endregion #region Тест двувходного блока andBlock = new AndBlock(2); andBlock.AddToken(new Token(1, 2), 0); //не должен был родить Assert.IsNull(andBlock.GetOutputToken(0)); andBlock.AddToken(new Token(2, 5), 1); var token = andBlock.GetOutputToken(0); //должен был родить Assert.IsNotNull(token); //времмя рождения должно быть как последнее из всех входных, т.е. 2 Assert.AreEqual(2, token.BornTime, 0.1); //сложность должна быть средним арифмектическим Assert.AreEqual((2 + 5) / 2.0, token.Complexity, 0.1); TokensCollector tokensCollector = TokensCollector.GetInstance(); var collectorToken1 = tokensCollector.GetHistory()[1]; var collectorToken2 = tokensCollector.GetHistory()[2]; //в коллектор должны были прийти входные Assert.IsNotNull(collectorToken1); Assert.IsNotNull(collectorToken2); //время обработки должно быть как последнее время рождения Assert.AreEqual(token.BornTime, collectorToken1.ProcessEndTime, 0.1); Assert.AreEqual(token.BornTime, collectorToken2.ProcessEndTime, 0.1); #endregion }
private void AnalizeToken() { var list = _collector.GetHistory(); // Получаем список токенов list = list.OrderBy(x => x.ProcessStartTime).ToList(); // Выстраиваем по времени начала try { MinDuration = list.Min(x => x.ProcessEndTime - x.ProcessStartTime); // Находим минимальную продолжительность } catch (InvalidOperationException ex) { throw new InvalidOperationException("TokenViewer: список токенов содержит 0 токенов"); } // Проставляем блоки foreach (var l in list) { AddBlock(l); } // Проставляем связи (так как пока нет параллельности, идут друг за другом) int count = MainWindow.Children.Count; // Смотрим количество блоков из которых пойдёт связь this.Width = (count + 1) * ProcedureWPF.DEFAULT_WIDTH; for (int i = 0; i < count; i++) { if (i < count - 1) { // Берём начальный и конечный блоки ProcedureWPF Start = MainWindow.Children[i] as ProcedureWPF; ProcedureWPF End = MainWindow.Children[i + 1] as ProcedureWPF; // Создаём связь ProcConnectionWPF connectionWPF = new ProcConnectionWPF(Start, End, new Point(ProcedureWPF.DEFAULT_WIDTH, ProcedureWPF.DEFAULT_HEIGHT / 2), new Point(ProcedureWPF.DEFAULT_WIDTH, ProcedureWPF.DEFAULT_HEIGHT / 2)); // Добавляем связь к ресурсам Start.AddOutPutConnection(connectionWPF); End.AddInPutConnection(connectionWPF); // Добавляем связь на область MainWindow.Children.Add(connectionWPF); } } }