예제 #1
0
        public void AddRange_adds_all_items()
        {
            int[] expectedValues       = Enumerable.Range(0, 10).ToArray();
            int   expectedItem0        = s_fixture.Create <int>();
            int   expectedItem1        = s_fixture.Create <int>();
            int   expectedItem2        = s_fixture.Create <int>();
            int   expectedItemAtTheEnd = s_fixture.Create <int>();
            int   expectedCount        = expectedValues.Length + 4;

            using var sut = new ValueListPool <int>(20);
            sut.Add(expectedItem0);
            sut.Add(expectedItem1);
            sut.Add(expectedItem2);

            sut.AddRange(expectedValues);
            sut.Add(expectedItemAtTheEnd);

            Assert.Equal(expectedCount, sut.Count);
            Assert.Equal(expectedItem0, sut[0]);
            Assert.Equal(expectedItem1, sut[1]);
            Assert.Equal(expectedItem2, sut[2]);
            foreach (int expectedValue in expectedValues)
            {
                Assert.True(sut.Contains(expectedValue));
            }

            Assert.Equal(expectedItemAtTheEnd, sut[13]);
        }
예제 #2
0
        public override void Count_property_is_for_items_Added_count_not_capacity_of_buffer()
        {
            const int listCapacity       = 10;
            const int expectedItemsCount = 3;

            using var sut = new ValueListPool <int>(listCapacity);
            sut.Add(1);
            sut.Add(2);
            sut.Add(3);

            Assert.Equal(expectedItemsCount, sut.Count);
        }
예제 #3
0
        public override void Insert_at_the_end_add_new_item()
        {
            int expectedAt3 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(4);
            sut.Add(s_fixture.Create <int>());
            sut.Add(s_fixture.Create <int>());
            sut.Add(s_fixture.Create <int>());

            sut.Insert(3, expectedAt3);

            Assert.Equal(4, sut.Count);
            Assert.Equal(expectedAt3, sut[3]);
        }
예제 #4
0
        public int ValueListPool()
        {
            int count = 0;

            using ValueListPool <int> list = N <= 1024
                ? new ValueListPool <int>(stackalloc int[N], ValueListPool <int> .SourceType.UseAsInitialBuffer)
                : new ValueListPool <int>(N);

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

            foreach (int item in list)
            {
                count += item;
            }

            return(count);
        }
        public int ValueListPool()
        {
            int count = 0;

            using ValueListPool <int> list = new ValueListPool <int>(0);

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

            foreach (int item in list)
            {
                count += item;
            }

            return(count);
        }
예제 #6
0
        public override void IndexOf_returns_index_of_item()
        {
            int expectedAt0 = s_fixture.Create <int>();
            int expectedAt1 = s_fixture.Create <int>();
            int expectedAt2 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(expectedAt0);
            sut.Add(expectedAt1);
            sut.Add(expectedAt2);

            Assert.Equal(0, sut.IndexOf(expectedAt0));
            Assert.Equal(1, sut.IndexOf(expectedAt1));
            Assert.Equal(2, sut.IndexOf(expectedAt2));
        }
예제 #7
0
        public override void Set_at_existing_index_update_item()
        {
            const int expectedItemsCount = 3;
            int       expectedItem       = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(s_fixture.Create <int>());
            sut.Add(s_fixture.Create <int>());
            sut.Add(s_fixture.Create <int>());

            sut[2] = expectedItem;

            Assert.Equal(expectedItemsCount, sut.Count);
            Assert.Equal(expectedItem, sut[2]);
        }
예제 #8
0
        public override void Create_list_and_add_values()
        {
            int expectedAt0 = s_fixture.Create <int>();
            int expectedAt1 = s_fixture.Create <int>();
            int expectedAt2 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(expectedAt0);
            sut.Add(expectedAt1);
            sut.Add(expectedAt2);

            Assert.Equal(expectedAt0, sut[0]);
            Assert.Equal(expectedAt1, sut[1]);
            Assert.Equal(expectedAt2, sut[2]);
        }
예제 #9
0
        public override void RemoveAt_when_item_exists_remove_item_and_decrease_itemsCount()
        {
            const int expectedCountAfterRemove = 2;
            int       expectedAt1 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(s_fixture.Create <int>());
            sut.Add(expectedAt1);
            sut.Add(s_fixture.Create <int>());

            sut.RemoveAt(1);

            Assert.False(sut.Contains(expectedAt1));
            Assert.Equal(expectedCountAfterRemove, sut.Count);
        }
예제 #10
0
        public override void Contains_return_true_when_item_exists()
        {
            int expectedAt0 = s_fixture.Create <int>();
            int expectedAt1 = s_fixture.Create <int>();
            int expectedAt2 = s_fixture.Create <int>();
            int unexpected  = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(expectedAt0);
            sut.Add(expectedAt1);
            sut.Add(expectedAt2);

            Assert.True(sut.Contains(expectedAt0));
            Assert.True(sut.Contains(expectedAt1));
            Assert.True(sut.Contains(expectedAt2));
            Assert.False(sut.Contains(unexpected));
        }
예제 #11
0
        public void Create_ValueListPool_from_small_InitialBuffer_and_when_it_grows_it_use_minimum_capacity()
        {
            Span <int> emptyBuffer     = stackalloc int[1];
            int        expectedItemAt0 = s_fixture.Create <int>();
            int        expectedItemAt1 = s_fixture.Create <int>();
            int        expectedItemAt2 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(emptyBuffer, ValueListPool <int> .SourceType.UseAsInitialBuffer);
            sut.Add(expectedItemAt0);
            sut.Add(expectedItemAt1);
            sut.Add(expectedItemAt2);

            Assert.Equal(16, sut.Capacity);
            Assert.Equal(3, sut.Count);
            Assert.Equal(expectedItemAt0, sut[0]);
            Assert.Equal(expectedItemAt1, sut[1]);
            Assert.Equal(expectedItemAt2, sut[2]);
        }
예제 #12
0
        public override void Create_list_and_add_values_after_clear()
        {
            int expectedAt0 = s_fixture.Create <int>();
            int expectedAt1 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(s_fixture.Create <int>());
            sut.Add(s_fixture.Create <int>());
            sut.Add(s_fixture.Create <int>());

            sut.Clear();
            Assert.Equal(0, sut.Count);
            sut.Add(expectedAt0);
            sut.Add(expectedAt1);

            Assert.Equal(2, sut.Count);
            Assert.Equal(expectedAt0, sut[0]);
            Assert.Equal(expectedAt1, sut[1]);
        }
예제 #13
0
        public override void CopyTo_copy_all_elements_to_target_array()
        {
            int expectedAt0 = s_fixture.Create <int>();
            int expectedAt1 = s_fixture.Create <int>();
            int expectedAt2 = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(3);
            sut.Add(expectedAt0);
            sut.Add(expectedAt1);
            sut.Add(expectedAt2);
            int[] array = new int[3];

            sut.CopyTo(array);

            Assert.Equal(sut.Count, array.Length);
            Assert.Contains(expectedAt0, array);
            Assert.Contains(expectedAt1, array);
            Assert.Contains(expectedAt2, array);
        }
예제 #14
0
        public override void Remove_item_that_doesnt_exists_return_false()
        {
            string item = s_fixture.Create <string>();

            using var sut = new ValueListPool <string>(10);
            sut.Add(s_fixture.Create <string>());

            Assert.False(sut.Remove(item));
            Assert.Equal(1, sut.Count);
        }
예제 #15
0
        public void Create_ValueListPool_from_empty_InitialBuffer_and_add_new_value_it_grows_using_minimum_capacity()
        {
            Span <int> emptyBuffer  = stackalloc int[0];
            int        expectedItem = s_fixture.Create <int>();

            using var sut = new ValueListPool <int>(emptyBuffer, ValueListPool <int> .SourceType.UseAsInitialBuffer);

            sut.Add(expectedItem);

            Assert.Equal(16, sut.Capacity);
            Assert.Equal(1, sut.Count);
            Assert.Equal(expectedItem, sut[0]);
        }
예제 #16
0
        public override void Add_items_when_capacity_is_full_then_buffer_autogrow()
        {
            using var sut = new ValueListPool <int>(128);
            var expectedItems = s_fixture.CreateMany <int>(sut.Capacity * 2).ToList();

            foreach (int expectedItem in expectedItems)
            {
                sut.Add(expectedItem);
            }

            Assert.Equal(expectedItems.Count, sut.Count);
            foreach (int expectedItem in expectedItems)
            {
                Assert.True(sut.Contains(expectedItem));
            }
        }
예제 #17
0
        public override void Get_item_with_index_above_itemsCount_throws_IndexOutOfRangeException()
        {
            bool      indexOutOfRangeExceptionThrown = false;
            const int index = 2;

            using var sut = new ValueListPool <int>(10);
            sut.Add(s_fixture.Create <int>());
            try
            {
                _ = sut[index];
            }
            catch (IndexOutOfRangeException)
            {
                indexOutOfRangeExceptionThrown = true;
            }

            Assert.True(indexOutOfRangeExceptionThrown);
        }
예제 #18
0
        public override void Insert_item_with_index_above_itemsCount_throws_IndexOutOfRangeException()
        {
            bool      argumentOutOfRangeException = false;
            const int index = 2;

            using var sut = new ValueListPool <int>(10);
            sut.Add(s_fixture.Create <int>());
            int item = s_fixture.Create <int>();

            try
            {
                sut.Insert(index, item);
            }
            catch (ArgumentOutOfRangeException)
            {
                argumentOutOfRangeException = true;
            }

            Assert.True(argumentOutOfRangeException);
        }