Example #1
0
        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);
        }
Example #2
0
        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());
        }
Example #3
0
        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);
        }
Example #4
0
 /// <summary>
 /// Removes unpromising branches from the fast match active list.
 /// </summary>
 protected void PruneFastMatchBranches()
 {
     PruneTimer.Start();
     FastmatchActiveList = Pruner.Prune(FastmatchActiveList);
     PruneTimer.Stop();
 }