示例#1
0
        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
        }
示例#2
0
        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);
                }
            }
        }