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);
        }
Ejemplo n.º 2
0
        public void CanCreateMoreBuckets()
        {
            var list = new ChunkedList <int>(20);            // 5 of Int32

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            for (int i = 0; i < 10; i++)
            {
                list[i].ShouldEqual(i);
            }

            list.BucketCount.ShouldEqual(2);
            list.IsEmpty.ShouldBeFalse();
            list.Count.ShouldEqual(10);

            var buckets = list.Buckets;

            buckets.ShouldNotBeNull();
            buckets.Count.ShouldEqual(2);

            foreach (var bucket in buckets)
            {
                bucket.Buffer.ShouldNotBeNull();
                bucket.Buffer.Length.ShouldEqual(5);
                bucket.FreeSpace.ShouldEqual(0);
                bucket.Index.ShouldEqual(5);
                bucket.IsEmpty.ShouldBeFalse();
            }
        }
Ejemplo n.º 3
0
        public void CanAddElements()
        {
            var list = new ChunkedList <int>(40);            // 10 of Int32

            for (int i = 0; i < 5; i++)
            {
                list.Add(i);
            }

            for (int i = 0; i < 5; i++)
            {
                list[i].ShouldEqual(i);
            }

            list.BucketCount.ShouldEqual(1);
            list.IsEmpty.ShouldBeFalse();
            list.Count.ShouldEqual(5);

            var buckets = list.Buckets;

            buckets.ShouldNotBeNull();
            buckets.Count.ShouldEqual(1);

            var bucket = buckets[0];

            bucket.Buffer.ShouldNotBeNull();
            bucket.Buffer.Length.ShouldEqual(10);
            bucket.FreeSpace.ShouldEqual(5);
            bucket.Index.ShouldEqual(5);
            bucket.IsEmpty.ShouldBeFalse();
        }
        public void CanGetEnumeratorOfEnumerator()
        {
            var list = new ChunkedList <int>();
            var en   = list.GetEnumerator();
            var en2  = en.GetEnumerator();

            ReferenceEquals(en, en2).ShouldBeTrue();
        }
Ejemplo n.º 5
0
        public void CantRemoveElements()
        {
            var list = new ChunkedList <int>();

            list.Add(42);

            Trap.Exception(() => list.Remove(42)).ShouldBeInstanceOf <NotSupportedException>();
        }
        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();
        }
Ejemplo n.º 8
0
        public void CanUseContainsToFindElement()
        {
            var list = new ChunkedList <int>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            list.Contains(5).ShouldBeTrue();
        }
Ejemplo n.º 9
0
        public void CanGetLastItem()
        {
            var list = new ChunkedList <int>(20);            // 5 of Int32

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            list.Last.ShouldEqual(9);
        }
Ejemplo n.º 10
0
        public void CanGetFirstItem()
        {
            var list = new ChunkedList <int>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            list.First.ShouldEqual(0);
        }
        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 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 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 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);
        }
Ejemplo n.º 15
0
        public void CantCopyToArrayOfSmallerSize()
        {
            var list = new ChunkedList <int>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            var arr = new int[5];

            Trap.Exception(() => list.CopyTo(arr, 0)).ShouldBeInstanceOf <ArgumentOutOfRangeException>();
        }
Ejemplo n.º 16
0
        public void CanSetValueByIndex()
        {
            var list = new ChunkedList <int>(20);            // 5 of Int32

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            list[5] = 42;
            list[5].ShouldEqual(42);
            list.Buckets[1][0].ShouldEqual(42);
        }
Ejemplo n.º 17
0
        public void CanRaiseListUpdatedForMultipleItem()
        {
            var evt  = new ManualResetEventSlim();
            var list = new ChunkedList <int>();

            list.ListUpdated += (sender, args) =>
            {
                args.Count.ShouldEqual(10);
                evt.Set();
            };
            Task.Run(() => list.AddRange(Enumerable.Range(0, 10).ToArray()));

            evt.Wait();
        }
        public void CanEnumerateItemsInMultipleBuckets()
        {
            var list = new ChunkedList <int>(20);

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

            int idx = 0;

            foreach (var item in list)
            {
                item.ShouldEqual(idx);
                idx++;
            }
        }
Ejemplo n.º 19
0
        public void CanRaiseListUpdatedForSingleItem()
        {
            var evt  = new ManualResetEventSlim();
            var list = new ChunkedList <int>();

            list.ListUpdated += (sender, args) =>
            {
                args.Count.ShouldEqual(1);
                evt.Set();
            };
            Task.Run(() => list.Add(42));

            evt.Wait();
        }
        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);
        }
Ejemplo n.º 21
0
        public void Test1()
        {
            for (var chunkSize = 1; chunkSize <= 100; chunkSize++)
            {
                for (var itemSize = 1; itemSize <= 1000; itemSize++)
                {
                    var expectedNrOfChunks = (int)Math.Ceiling((float)itemSize / (float)chunkSize);
                    var seq = Enumerable.Range(0, itemSize);

                    var chunkIndex = 1;
                    IChunkedList<int> chunk = new ChunkedList<int>(seq, chunkSize);
                    do
                    {
                        try
                        {
                            var expectedChunkSize = chunkSize;
                            if (chunkIndex == expectedNrOfChunks)
                            {
                                expectedChunkSize = itemSize % chunkSize;
                                if (expectedChunkSize == 0)
                                {
                                    expectedChunkSize = chunkSize;
                                }
                            }

                            var expectedItems = Enumerable.Range((chunkIndex - 1) * chunkSize, expectedChunkSize);

                            Assert.IsTrue(chunk.CurrentChunk
                                               .SequenceEqual(expectedItems));

                            if (chunk.HasMoreChunks)
                            {
                                chunk = chunk.GetNextChunk();
                            }
                            else
                            {
                                break;
                            }
                        }
                        finally
                        {
                            ++chunkIndex;
                        }
                    } while (true);

                    Assert.AreEqual(expectedNrOfChunks, chunkIndex - 1);
                }
            }
        }
        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 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);
            }
        }
Ejemplo n.º 25
0
        public void CanClearList()
        {
            var list = new ChunkedList <int>(20);

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            list.Buckets.Count.ShouldEqual(2);

            list.Clear();

            list.Buckets.Count.ShouldEqual(0);
            list.Count.ShouldEqual(0);
            list.IsEmpty.ShouldBeTrue();
        }
        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);
        }
Ejemplo n.º 27
0
        public void CanCopyToArray()
        {
            var list = new ChunkedList <int>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            var arr = new int[10];

            list.CopyTo(arr, 0);

            for (int i = 0; i < 10; i++)
            {
                arr[i].ShouldEqual(i);
            }
        }
Ejemplo n.º 28
0
        public void CanCopyToArrayFromIndex()
        {
            var list = new ChunkedList <int>();

            for (int i = 0; i < 10; i++)
            {
                list.Add(i);
            }

            var arr = new int[20];

            list.CopyTo(arr, 10);

            for (int i = 10; i < 20; i++)
            {
                arr[i].ShouldEqual(i - 10);
            }
        }
        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);
            }
        }
Ejemplo n.º 30
0
        public void CanAddRangeWithOneBucket()
        {
            var list = new ChunkedList <int>(40);            // 10 of Int32

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

            list.BucketCount.ShouldEqual(1);
            list.IsEmpty.ShouldBeFalse();
            list.Count.ShouldEqual(10);

            var buckets = list.Buckets;

            buckets.ShouldNotBeNull();
            buckets.Count.ShouldEqual(1);

            var bucket = list.Buckets[0];

            bucket.Buffer.ShouldNotBeNull();
            bucket.Buffer.Length.ShouldEqual(10);
            bucket.FreeSpace.ShouldEqual(0);
            bucket.Index.ShouldEqual(10);
            bucket.IsEmpty.ShouldBeFalse();
        }
Ejemplo n.º 31
0
        public void CanAddRange()
        {
            var list = new ChunkedList <int>(20);            // 5 of Int32

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

            list.BucketCount.ShouldEqual(2);
            list.IsEmpty.ShouldBeFalse();
            list.Count.ShouldEqual(10);

            var buckets = list.Buckets;

            buckets.ShouldNotBeNull();
            buckets.Count.ShouldEqual(2);

            foreach (var bucket in buckets)
            {
                bucket.Buffer.ShouldNotBeNull();
                bucket.Buffer.Length.ShouldEqual(5);
                bucket.FreeSpace.ShouldEqual(0);
                bucket.Index.ShouldEqual(5);
                bucket.IsEmpty.ShouldBeFalse();
            }
        }
Ejemplo n.º 32
0
        public void TestFlatten2()
        {
            for (var chunkSize = 1; chunkSize <= 100; chunkSize++)
            {
                for (var itemSize = 1; itemSize <= 1000; itemSize++)
                {
                    var seq = Enumerable.Range(0, itemSize).Cast<object>();
                    var chunkedList = new ChunkedList(seq, chunkSize);
                    var flattenList = chunkedList.Flatten();

                    Assert.True(flattenList.SequenceEqual(seq));
                }
            }
        }