public void RelationSymmetricTest() { var r = new SymmetricRelation <int>(); r.Add(new Tuple2 <int, int>(1, 2)); Assert.IsTrue(r.Contains(new Tuple2 <int, int>(2, 1))); }
public void RelationSymmetricEquality2Test() { var r1 = new SymmetricRelation <int>(); r1.Add(new TupleElement <int>(1).SetElement()); var r2 = new SymmetricRelation <int>(); r2.Add(new TupleElement <int>(1).SetElement()); Assert.IsTrue(r1.Equals(r2)); }
public void RelationSymmetricEqualityTest() { var r1 = new SymmetricRelation <int>(); r1.Add(new Tuple2 <int, int>(1, 2)); var r2 = new SymmetricRelation <int>(); r2.Add(new Tuple2 <int, int>(2, 1)); Assert.IsTrue(r1.Equals(r2)); }
public void AddContainsRemove() { var relation = new SymmetricRelation <int>(); Assert.IsTrue(relation.Add(7, 42)); Assert.IsTrue(relation.Add(10, 20)); Assert.IsTrue(relation.Contains(7, 42)); Assert.IsTrue(relation.Contains(42, 7)); Assert.IsFalse(relation.Add(7, 42)); Assert.IsFalse(relation.Add(42, 7)); Assert.IsTrue(relation.Contains(20, 10)); Assert.IsTrue(relation.Remove(20, 10)); Assert.IsFalse(relation.Contains(20, 10)); Assert.IsFalse(relation.Contains(10, 20)); }
/// <inheritdoc/> public InterferenceGraph Analyze(FlowGraph graph) { var interference = new SymmetricRelation <ValueTag>(); var liveness = graph.GetAnalysisResult <ValueLiveness>(); foreach (var block in graph.BasicBlocks) { foreach (var group in liveness.GetLiveness(block.Tag).GetLiveValuesByIndex().Values) { foreach (var first in group) { foreach (var second in group) { interference.Add(first, second); } } } } return(new InterferenceGraph(interference)); }
/// <inheritdoc/> public RelatedValues Analyze(FlowGraph graph) { var relation = new SymmetricRelation <ValueTag>(); // Examine direct copies. foreach (var selection in graph.NamedInstructions) { var instruction = selection.Instruction; var prototype = instruction.Prototype as CopyPrototype; if (prototype != null) { relation.Add( selection.Tag, prototype.GetCopiedValue(instruction)); } } // Examine copies produced by branches. foreach (var block in graph.BasicBlocks) { foreach (var branch in block.Flow.Branches) { var parameters = graph.GetBasicBlock(branch.Target).Parameters; foreach (var pair in branch.Arguments.Zip(parameters, Tuple.Create)) { if (pair.Item1.IsValue) { relation.Add( pair.Item1.ValueOrNull, pair.Item2.Tag); } } } } return(new RelatedValues(relation)); }
internal RelatedValues(SymmetricRelation <ValueTag> relation) { this.relation = relation; }
internal InterferenceGraph( SymmetricRelation <ValueTag> interferingValues) { this.interferingValues = interferingValues; }