public void Prune_WhenNoSubsumptions_ReturnsSameArray() { // Arrange var fixture = new Fixture().Customize(new AutoMoqCustomization()); var nets = fixture.CreateMany <IComparatorNetwork>(3).ToArray(); var pruner = new Pruner(); // Act var result = pruner.Prune(nets); // Assert Assert.AreEqual(nets.Length, result.Count); }
public IReadOnlyList <IComparatorNetwork> Prune <T>(IReadOnlyList <T> nets) { var pruner = new Pruner(); if (nets.Count == 1) { return(pruner.Prune((IReadOnlyList <IComparatorNetwork>)nets[0])); } var netsAfterPrune = new IReadOnlyList <IComparatorNetwork> [nets.Count]; var tasks = Enumerable.Range(0, nets.Count) .Select(i => Task.Run(() => { var net = nets[i] as List <IComparatorNetwork>; netsAfterPrune[i] = pruner.Prune(net); })).ToArray(); Task.WaitAll(tasks); for (var i = 0; i < nets.Count; i++) { var index = i; var removeTasks = Enumerable.Range(0, nets.Count) .Select(j => Task.Run(() => { var s1 = netsAfterPrune[index]; if (s1 != null && index != j) { var s2 = netsAfterPrune[j]; netsAfterPrune[j] = pruner.Remove(s1, s2); } })).ToArray(); Task.WaitAll(removeTasks); } return(netsAfterPrune .SelectMany(x => x).ToList()); }
public void Prune_When1SubsumptionInSecondElement_Prunes1Element() { // Arrange var fixture = new Fixture().Customize(new AutoMoqCustomization()); var netMocks = fixture.CreateMany <Mock <IComparatorNetwork> >(3).ToArray(); var pruner = new Pruner(); netMocks[1].Setup(x => x.IsSubsumed(netMocks[0].Object)).Returns(true); var nets = netMocks.Select(x => x.Object).ToArray(); // Act var result = pruner.Prune(nets); // Assert Assert.AreEqual(2, result.Count); }
/// <summary> /// Removes unpromising branches from the fast match active list. /// </summary> protected void PruneFastMatchBranches() { PruneTimer.Start(); FastmatchActiveList = Pruner.Prune(FastmatchActiveList); PruneTimer.Stop(); }