private void AddDeepestOnceFormulas() { var alreadyKnownLabels = FinalStateFormulaLabels.ToArray(); var onceFormulaCollector = new CollectDeepestOnceFormulasWithCompilableOperandVisitor(); foreach (var formula in _formulasToCheck) { onceFormulaCollector.VisitNewTopLevelFormula(formula); } var deepestOnceFormulas = onceFormulaCollector.DeepestOnceFormulasWithCompilableOperand.ToArray(); if (deepestOnceFormulas.Length > 0) { var formulasToObserve = deepestOnceFormulas.Select(formula => formula.Operand).ToArray(); Func <ObserveFormulasModifier> observeFormulasModifier = () => new ObserveFormulasModifier(alreadyKnownLabels, formulasToObserve); _transitionModifierGenerators.Add(observeFormulasModifier); } foreach (var formula in deepestOnceFormulas) { Assert.That(formula.Operator == UnaryOperator.Once, "operator of OnceFormula must be Once"); _finalStateFormulas.Add(formula); _labelsOfKnownFormulas.Add(formula.Label); } }
public void CollectDeepestOnceFormulasWithCompilableOperandWithNestedTwice() { var vistor = new CollectDeepestOnceFormulasWithCompilableOperandVisitor(); var formula = CreateNestedTwice(); vistor.VisitNewTopLevelFormula(formula); Assert.Equal(1, vistor.DeepestOnceFormulasWithCompilableOperand.Count()); }
public void CollectDeepestOnceFormulasWithCompilableOperandWithFinallyConnectedNestedOnce() { var vistor = new CollectDeepestOnceFormulasWithCompilableOperandVisitor(); var formula = CreateFinallyConnectedNestedFormula(); vistor.VisitNewTopLevelFormula(formula); Assert.Equal(2, vistor.DeepestOnceFormulasWithCompilableOperand.Count()); }