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