Esempio n. 1
0
        private IAnswer ProcessChildAnswers(IQuestionProcessingContext <ComparisonQuestion> context, ICollection <ChildAnswer> childAnswers)
        {
            foreach (var answer in childAnswers)
            {
                var childStatement = (answer.Answer as StatementAnswer)?.Result as ComparisonStatement;
                if (childStatement != null)
                {
                    var transitiveStatement = (ComparisonStatement)answer.TransitiveStatements.Single();
                    var intermediateValue = new[] { childStatement.LeftValue, childStatement.RightValue }.Intersect(new[] { transitiveStatement.LeftValue, transitiveStatement.RightValue }).Single();
                    if ((childStatement.LeftValue == intermediateValue) == (transitiveStatement.LeftValue == intermediateValue))
                    {
                        transitiveStatement = transitiveStatement.SwapOperands();
                    }

                    var resultSign = ComparisonSigns.CompareThreeValues(childStatement.ComparisonSign, transitiveStatement.ComparisonSign);
                    if (resultSign != null)
                    {
                        var transitiveStatements = new List <IStatement>(answer.TransitiveStatements);
                        transitiveStatements.AddRange(answer.Answer.Explanation.Statements);

                        return(createAnswer(
                                   new ComparisonStatement(null, LeftValue, RightValue, resultSign),
                                   context,
                                   transitiveStatements));
                    }
                }
            }

            return(Answer.CreateUnknown());
        }
Esempio n. 2
0
        public void OnlyComparisonSignsSuit()
        {
            foreach (var concept in SystemConcepts.GetAll())
            {
                if (!ComparisonSigns.All.Contains(concept))
                {
                    Assert.Throws <InvalidOperationException>(() => { concept.Contradicts(ComparisonSigns.IsEqualTo); });
                    Assert.Throws <InvalidOperationException>(() => { ComparisonSigns.IsEqualTo.Contradicts(concept); });

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

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

                    Assert.Throws <InvalidOperationException>(() => { ComparisonSigns.CompareThreeValues(concept, ComparisonSigns.IsEqualTo); });
                    Assert.Throws <InvalidOperationException>(() => { ComparisonSigns.CompareThreeValues(ComparisonSigns.IsEqualTo, concept); });
                }
            }
        }
        protected override Boolean TryToUpdateCombinations(IConcept valueRow, IConcept signRow, IConcept signColumn, IConcept valueColumn)
        {
            var resultSign = ComparisonSigns.CompareThreeValues(signRow, signColumn);

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