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()); }
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)); }