Esempio n. 1
0
        public IEnumerable <IEnumerable <TEdge> > HoffmanPavleyRankedShortestPath <TVertex, TEdge>(
            [PexAssumeNotNull] IBidirectionalGraph <TVertex, TEdge> g,
            [PexAssumeNotNull] Dictionary <TEdge, double> edgeWeights,
            TVertex rootVertex,
            TVertex goalVertex,
            int pathCount
            )
            where TEdge : IEdge <TVertex>
        {
            //GraphConsoleSerializer.DisplayGraph((IEdgeListGraph<TVertex, TEdge>)g);

            PexAssert.TrueForAll(g.Edges, edgeWeights.ContainsKey);

            var target = new HoffmanPavleyRankedShortestPathAlgorithm <TVertex, TEdge>(g, e => edgeWeights[e]);

            target.ShortestPathCount = pathCount;
            target.Compute(rootVertex, goalVertex);

            double lastWeight = double.MinValue;

            foreach (var path in target.ComputedShortestPaths)
            {
                TestConsole.WriteLine("path: {0}", Enumerable.Sum(path, e => edgeWeights[e]));
                double weight = Enumerable.Sum(path, e => edgeWeights[e]);
                Assert.IsTrue(lastWeight <= weight, "{0} <= {1}", lastWeight, weight);
                Assert.AreEqual(rootVertex, Enumerable.First(path).Source);
                Assert.AreEqual(goalVertex, Enumerable.Last(path).Target);
                Assert.IsTrue(EdgeExtensions.IsPathWithoutCycles <TVertex, TEdge>(path));

                lastWeight = weight;
            }

            return(target.ComputedShortestPaths);
        }
 public void Test_ReplaceSingleElement<T>([PexAssumeNotNull] T[] array, T newValue, int i) {
     var vector = Vector.New(array);
     PexAssume.IsTrue(i >= 0);
     var vector2 = vector.SetAt(i, newValue);
     Assert.True(vector2.Count >= vector.Count);
     Assert.Equal(newValue, vector2[i]);
     PexAssert.TrueForAll(0, vector2.Count, j => j == i || Equals(vector2[j], vector[j]));
 } // ReplaceSingleElement(i, j)
 public void Test_ExtractAll<T>([PexAssumeNotNull] T[] array, T item) where T : IComparable<T> {
     var seq = OrderedSequence.FromEnumerable(array);
     var split = seq.ExtractAll(item);
     Assert2.SequenceEqual(seq, split.Item1.Concat(split.Item2).Concat(split.Item3));
     PexAssert.TrueForAll(split.Item1, t => t.CompareTo(item) < 0);
     PexAssert.TrueForAll(split.Item2, t => t.CompareTo(item) == 0);
     PexAssert.TrueForAll(split.Item3, t => t.CompareTo(item) > 0);
     Assert2.SequenceEqual(split.Item1, seq.LessThan(item));
     Assert2.SequenceEqual(split.Item1.Concat(split.Item2), seq.AtMost(item));
     Assert2.SequenceEqual(split.Item2.Concat(split.Item3), seq.AtLeast(item));
     Assert2.SequenceEqual(split.Item3, seq.GreaterThan(item));
 }
Esempio n. 4
0
        public void InsertAndEnumerate <TPriority, TValue>(
            [PexAssumeUnderTest] BinaryHeap <TPriority, TValue> target,
            [PexAssumeNotNull] KeyValuePair <TPriority, TValue>[] kvs)
        {
            var dic = new Dictionary <TPriority, TValue>();

            foreach (var kv in kvs)
            {
                target.Add(kv.Key, kv.Value);
                dic[kv.Key] = kv.Value;
            }
            PexAssert.TrueForAll(target, kv => dic.ContainsKey(kv.Key));
        }
 public void Test_Split<T>([PexAssumeNotNull] T[] array, T item, bool equalGoLeft) where T : IComparable<T> {
     var seq = OrderedSequence.FromEnumerable(array);
     var split = seq.Split(item, equalGoLeft);
     Assert2.SequenceEqual(seq, split.Item1 + split.Item2);
     if (equalGoLeft) {
         PexAssert.TrueForAll(split.Item1, t => t.CompareTo(item) <= 0);
         PexAssert.TrueForAll(split.Item2, t => t.CompareTo(item) > 0);
     }
     else {
         PexAssert.TrueForAll(split.Item1, t => t.CompareTo(item) < 0);
         PexAssert.TrueForAll(split.Item2, t => t.CompareTo(item) >= 0);                
     }
 }
Esempio n. 6
0
        public void ReplaceTextSpans_ArbitraryTextSpans_NoCrash()
        {
            var tree1       = BBCodeTestUtil.GetAnyTree();
            var chosenTexts = new List <string>();
            var tree2       = BBCode.ReplaceTextSpans(tree1, txt =>
            {
                var count   = PexChoose.ValueFromRange("count", 0, 3);
                var indexes = PexChoose.Array <int>("indexes", count);
                PexAssume.TrueForAll(0, count, i => indexes[i] >= 0 && indexes[i] <= txt.Length && (i == 0 || indexes[i - 1] < indexes[i]));
                return
                (Enumerable.Range(0, count)
                 .Select(i =>
                {
                    var maxIndex = i == count - 1 ? txt.Length : indexes[i + 1];
                    var text = PexChoose.ValueNotNull <string>("text");
                    chosenTexts.Add(text);
                    return new TextSpanReplaceInfo(indexes[i], PexChoose.ValueFromRange("count", 0, indexes[i] - maxIndex + 1), new TextNode(text));
                })
                 .ToArray());
            }, null);
            var bbCode = tree2.ToBBCode();

            PexAssert.TrueForAll(chosenTexts, s => bbCode.Contains(s));
        }