Пример #1
0
        public void OnlySequenceSignsSuit()
        {
            foreach (var concept in SystemConcepts.GetAll())
            {
                if (!SequenceSigns.All.Contains(concept))
                {
                    Assert.Throws <InvalidOperationException>(() => { concept.Contradicts(SequenceSigns.SimultaneousWith); });
                    Assert.Throws <InvalidOperationException>(() => { SequenceSigns.SimultaneousWith.Contradicts(concept); });

                    Assert.Throws <InvalidOperationException>(() => { SequenceSigns.Revert(concept); });

                    Assert.Throws <InvalidOperationException>(() => { SequenceSigns.TryToCombineMutualSequences(concept, SequenceSigns.SimultaneousWith); });
                    Assert.Throws <InvalidOperationException>(() => { SequenceSigns.TryToCombineMutualSequences(SequenceSigns.SimultaneousWith, concept); });
                }
            }
        }
Пример #2
0
        private IAnswer ProcessChildAnswers(IQuestionProcessingContext <ProcessesQuestion> context, ICollection <ChildAnswer> childAnswers)
        {
            foreach (var answer in childAnswers)
            {
                var childStatements  = (answer.Answer as StatementsAnswer <ProcessesStatement>)?.Result ?? Array.Empty <ProcessesStatement>();
                var resultStatements = new List <ProcessesStatement>();

                var transitiveStatements = answer.TransitiveStatements.OfType <ProcessesStatement>().ToList();
                var firstChild = childStatements.First();
                var firstTransitive = transitiveStatements.First();
                var intermediateValue = new[] { firstChild.ProcessA, firstChild.ProcessB }.Intersect(new[] { firstTransitive.ProcessA, firstTransitive.ProcessB }).Single();
                for (int i = 0; i < transitiveStatements.Count; i++)
                {
                    if ((firstChild.ProcessA == intermediateValue) == (transitiveStatements[i].ProcessA == intermediateValue))
                    {
                        transitiveStatements[i] = transitiveStatements[i].SwapOperands();
                    }
                }

                foreach (var childStatement in childStatements)
                {
                    foreach (var transitiveStatement in transitiveStatements)
                    {
                        var sign = SequenceSigns.TryToCombineMutualSequences(transitiveStatement.SequenceSign, childStatement.SequenceSign);
                        if (sign != null)
                        {
                            resultStatements.Add(new ProcessesStatement(null, ProcessA,
                                                                        ProcessB,
                                                                        sign));
                        }
                    }
                }

                if (resultStatements.Count > 0)
                {
                    var resultTransitiveStatements = new List <IStatement>(answer.TransitiveStatements);
                    resultTransitiveStatements.AddRange(answer.Answer.Explanation.Statements);

                    return(createAnswer(resultStatements, context, resultTransitiveStatements));
                }
            }

            return(Answer.CreateUnknown());
        }
        protected override Boolean TryToUpdateCombinations(IConcept valueRow, IConcept signRow, IConcept signColumn, IConcept valueColumn)
        {
            var resultSign = SequenceSigns.TryToCombineMutualSequences(signRow, signColumn);

            return(resultSign != null && SetCombinationWithDescendants(valueRow, valueColumn, resultSign));
        }