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 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(); } }
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(); }
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(); }
public void CanUseContainsToFindElement() { var list = new ChunkedList <int>(); for (int i = 0; i < 10; i++) { list.Add(i); } list.Contains(5).ShouldBeTrue(); }
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); }
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); }
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>(); }
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); }
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++; } }
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); }
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); } }
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); }
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); } }
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); } }
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(); }
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(); } }
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)); } } }