예제 #1
0
        public void DoRun <T>([PexAssumeNotNull] IEnumerable <T> original)
        {
            var xs = new List <T>();

            original.Run(xs.Add);
            PexAssert.AreElementsEqual(original, xs, (a, b) => object.Equals(a, b));
        }
        public void SameEdges <TVertex, TEdge>([PexAssumeNotNull] IVertexAndEdgeListGraph <TVertex, TEdge> g)
            where TEdge : IEdge <TVertex>
        {
            var ag = GraphExtensions.ToArrayAdjacencyGraph(g);

            PexAssert.AreElementsEqual(g.Edges, ag.Edges, (l, r) => l.Equals(r));
        }
예제 #3
0
        public void Defer <T>([PexAssumeNotNull] IEnumerable <T> source)
        {
            var stateful   = default(StatefulEnumerable <T>);
            var enumerable = EnumerableEx.Defer(() => { stateful = new StatefulEnumerable <T>(source);
                                                        return(stateful); });

            PexAssert.IsNull(stateful);
            var enumerator = enumerable.GetEnumerator();

            PexAssert.IsNotNull(stateful);

            var sourceEnumerator = source.GetEnumerator();

            var expectedState = new List <EnumerableState>()
            {
                EnumerableState.Fresh,
                EnumerableState.CreatingEnumerator,
                EnumerableState.CreatedEnumerator,
                EnumerableState.MovingNext
            };

            if (!sourceEnumerator.MoveNext())
            {
                PexAssert.IsFalse(enumerator.MoveNext());

                expectedState.Add(EnumerableState.AtEnd);
                PexAssert.AreElementsEqual(expectedState, stateful.States, (a, b) => object.Equals(a, b));
            }
            else
            {
                PexAssert.IsTrue(enumerator.MoveNext());

                expectedState.Add(EnumerableState.MovedNext);
                PexAssert.AreElementsEqual(expectedState, stateful.States, (a, b) => object.Equals(a, b));


                expectedState.Add(EnumerableState.GettingCurrent);
                PexAssert.AreEqual(sourceEnumerator.Current, enumerator.Current);
                expectedState.Add(EnumerableState.GotCurrent);
                PexAssert.AreElementsEqual(expectedState, stateful.States, (a, b) => object.Equals(a, b));

                var count = 1;
                while (sourceEnumerator.MoveNext())
                {
                    count++;
                    expectedState.Add(EnumerableState.MovingNext);
                    PexAssert.IsTrue(enumerator.MoveNext());
                    expectedState.Add(EnumerableState.MovedNext);
                    PexAssert.AreElementsEqual(expectedState, stateful.States, (a, b) => object.Equals(a, b));

                    expectedState.Add(EnumerableState.GettingCurrent);
                    PexAssert.AreEqual(sourceEnumerator.Current, enumerator.Current);
                    expectedState.Add(EnumerableState.GotCurrent);
                    PexAssert.AreElementsEqual(expectedState, stateful.States, (a, b) => object.Equals(a, b));

                    PexAssert.AreEqual(count, stateful.EnumerationCount);
                }
                PexAssert.IsFalse(enumerator.MoveNext());
            }
        }
예제 #4
0
        public void MemoizeWithBufferSizeZero()
        {
            var source     = Enumerable.Range(0, 10);
            var x          = new List <int>();
            var enumerable = source.Do(x.Add).Memoize(0);

            var firstEnumerator = enumerable.GetEnumerator();

            for (var i = 0; i < 5; i++)
            {
                PexAssert.IsTrue(firstEnumerator.MoveNext());
                PexAssert.AreEqual(i, firstEnumerator.Current);
            }
            var secondEnumerator = enumerable.GetEnumerator();

            for (var i = 0; i < 5; i++)
            {
                PexAssert.IsTrue(secondEnumerator.MoveNext());
                PexAssert.AreEqual(i + 5, secondEnumerator.Current);
            }
            for (var i = 0; i < 5; i++)
            {
                PexAssert.IsTrue(firstEnumerator.MoveNext());
                PexAssert.AreEqual(i + 5, firstEnumerator.Current);
            }

            PexAssert.AreElementsEqual(x, Enumerable.Range(0, 10), (a, b) => object.Equals(a, b));
            var thirdEnumerator = enumerable.GetEnumerator();

            PexAssert.IsFalse(thirdEnumerator.MoveNext());

            PexAssert.AreElementsEqual(x, source, (a, b) => object.Equals(a, b));
        }
        public void SameOutEdges <TVertex, TEdge>([PexAssumeNotNull] IVertexAndEdgeListGraph <TVertex, TEdge> g)
            where TEdge : IEdge <TVertex>
        {
            var ag = GraphExtensions.ToArrayAdjacencyGraph(g);

            foreach (var v in g.Vertices)
            {
                PexAssert.AreElementsEqual(g.OutEdges(v), ag.OutEdges(v), (l, r) => l.Equals(r));
            }
        }
예제 #6
0
        public void Do <T>([PexAssumeNotNull] IEnumerable <T> original)
        {
            var xs         = new List <T>();
            var ys         = new List <T>();
            var observable = original.Do(xs.Add);

            foreach (var y in observable)
            {
                ys.Add(y);
            }
            PexAssert.AreElementsEqual(original, xs, (a, b) => object.Equals(a, b));
            PexAssert.AreElementsEqual(xs, ys, (a, b) => object.Equals(a, b));
        }
예제 #7
0
 public void Test_Enumeration <T>([PexAssumeNotNull] T[] array)
 {
     PexAssert.AreElementsEqual(array.ToLazyList(), array, (x, y) => EqualityComparer <T> .Default.Equals(x, y));
 }