public void Sort_Comparison_WithoutDuplicates(int count)
        {
            PooledList <T> list      = GenericListFactory(count);
            IComparer <T>  iComparer = GetIComparer();

            int comparer(T first, T second)
            {
                return(iComparer.Compare(first, second));
            }

            list.Sort(comparer);
            Assert.All(Enumerable.Range(0, count - 2), i =>
            {
                Assert.True(iComparer.Compare(list[i], list[i + 1]) < 0);
            });
        }
        public void BinarySearch_ForEveryItemWithDuplicates(int count)
        {
            if (count > 0)
            {
                PooledList <T> list = GenericListFactory(count);
                list.Add(list[0]);
                list.Sort();
                PooledList <T> beforeList = list.ToPooledList();

                Assert.All(Enumerable.Range(0, list.Count), index =>
                {
                    Assert.True(list.BinarySearch(beforeList[index]) >= 0);
                    Assert.True(list.BinarySearch(beforeList[index], GetIComparer()) >= 0);
                    Assert.Equal(beforeList[index], list[index]);
                });
                list.Dispose();
            }
        }
        public void Sort_intintIComparer_WithoutDuplicates(int count)
        {
            PooledList <T> unsortedList = GenericListFactory(count);
            IComparer <T>  comparer     = GetIComparer();

            for (int startIndex = 0; startIndex < count - 2; startIndex++)
            {
                for (int sortCount = 1; sortCount < count - startIndex; sortCount++)
                {
                    using (var list = new PooledList <T>(unsortedList))
                    {
                        list.Sort(startIndex, sortCount + 1, comparer);
                        for (int i = startIndex; i < sortCount; i++)
                        {
                            Assert.InRange(comparer.Compare(list[i], list[i + 1]), int.MinValue, 0);
                        }
                    }
                }
            }

            unsortedList.Dispose();
        }
        public void BinarySearch_ForEveryItemWithoutDuplicates(int count)
        {
            PooledList <T> list = GenericListFactory(count);

            foreach (T item in list)
            {
                while (list.Count((value) => value.Equals(item)) > 1)
                {
                    list.Remove(item);
                }
            }
            list.Sort();
            PooledList <T> beforeList = list.ToPooledList();

            Assert.All(Enumerable.Range(0, list.Count), index =>
            {
                Assert.Equal(index, list.BinarySearch(beforeList[index]));
                Assert.Equal(index, list.BinarySearch(beforeList[index], GetIComparer()));
                Assert.Equal(beforeList[index], list[index]);
            });
            list.Dispose();
        }