public void CanComparePositions()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en  = list.GetEnumerator();
            var en2 = list.GetEnumerator();

            en.MoveNext().ShouldBeTrue();
            en2.MoveNext().ShouldBeTrue();

            en.AsComparable().IsPositionEqual(en2.AsComparable()).ShouldBeTrue();
            en2.MoveNext().ShouldBeTrue();
            en.AsComparable().IsPositionEqual(en2.AsComparable()).ShouldBeFalse();
        }
        public void CanGetPosition()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(0, 10).ToArray());

            var en = list.GetEnumerator();

            en.Position.ShouldEqual(-1);

            for (int i = 0; i < 5; i++)
            {
                en.MoveNext().ShouldBeTrue();
            }

            en.Position.ShouldEqual(4);

            for (int i = 0; i < 4; i++)
            {
                en.MoveNext().ShouldBeTrue();
            }

            en.Position.ShouldEqual(8);

            while (en.MoveNext())
            {
                ;
            }

            en.Position.ShouldEqual(9);
        }
        public void CanGetEnumeratorOfEnumerator()
        {
            var list = new ChunkedList <int>();
            var en   = list.GetEnumerator();
            var en2  = en.GetEnumerator();

            ReferenceEquals(en, en2).ShouldBeTrue();
        }
        public void CanGetCount()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            en.Count.ShouldEqual(10);
        }
        public void CanStartFromIndexPastEnd()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(0, 10).ToArray());
            var en = list.GetEnumerator();

            en.FromIndex(10).ShouldBeTrue();
            en.Current.ShouldEqual(9);
            en.MoveNext().ShouldBeFalse();
        }
        public void CantUseWhenListEmpty()
        {
            var list = new ChunkedList <int>();
            var en   = list.GetEnumerator();

            en.Count.ShouldEqual(0);
            en.MovePrev().ShouldBeFalse();
            en.MoveNext().ShouldBeFalse();

            Trap.Exception(() => en.FromFirst()).ShouldBeInstanceOf <InvalidOperationException>();
            Trap.Exception(() => en.FromLast()).ShouldBeInstanceOf <InvalidOperationException>();
        }
        public void CantStartFromNegativeIndex()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            en.MoveNext().ShouldBeTrue();
            en.Current.ShouldEqual(1);
            en.FromIndex(-1).ShouldBeFalse();
            en.Current.ShouldEqual(1);
        }
        public void CanStartFromIndexInBeginningOfBucket()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(0, 10).ToArray());
            var en = list.GetEnumerator();

            en.FromIndex(6).ShouldBeTrue();
            en.Current.ShouldEqual(5);
            en.MoveNext().ShouldBeTrue();
            en.Current.ShouldEqual(6);
        }
        public void CanSetToLast()
        {
            var list = new ChunkedList <int>();

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            en.FromLast();
            en.HasMore.ShouldBeFalse();
            en.MovePrev().ShouldBeTrue();
            en.Current.ShouldEqual(10);
        }
        public void CanReset()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            en.MoveNext().ShouldBeTrue();
            en.Current.ShouldEqual(1);
            en.Reset();
            en.Current.ShouldEqual(0);
            en.MoveNext().ShouldBeTrue();
            en.Current.ShouldEqual(1);
        }
        public void CanIterateBackwardsUntilNoMoreItems()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            en.FromLast();
            int idx = 10;

            while (en.MovePrev())
            {
                en.Current.ShouldEqual(idx);
                idx--;
            }
        }
        public void CanEnumerateBackwards()
        {
            var list = new ChunkedList <int>();

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            en.FromLast();
            en.HasMore.ShouldBeFalse();

            for (int i = 10; i > 0; i--)
            {
                en.MovePrev().ShouldBeTrue();
                en.Current.ShouldEqual(i);
            }
        }
        public void CanSetToFirst()
        {
            var list = new ChunkedList <int>();

            list.AddRange(Enumerable.Range(1, 10).ToArray());
            var en = list.GetEnumerator();

            while (en.HasMore)
            {
                en.MoveNext();
            }

            en.FromFirst();
            en.HasMore.ShouldBeTrue();
            en.MoveNext().ShouldBeTrue();
            en.Current.ShouldEqual(1);
        }
        public void CanCloneEnumerator()
        {
            var list = new ChunkedList <int>(20);

            list.AddRange(Enumerable.Range(0, 10).ToArray());

            var en = list.GetEnumerator();

            for (int i = 0; i < 5; i++)
            {
                en.MoveNext().ShouldBeTrue();
                en.Current.ShouldEqual(i);
            }

            en = en.Clone();
            for (int i = 5; i < 10; i++)
            {
                en.MoveNext().ShouldBeTrue();
                en.Current.ShouldEqual(i);
            }
        }