public void Add_DuplicatedValues_ShoulBeInAscendingOrder()
        {
            var heap = new HeapOverList <int>();
            var data = new[] { 5, 8, 6, 3, 1, 5, 8, 6, 9, 9, 2 }.ToList();

            data.ForEach(item => heap.Add(item));

            heap._storage.Should().BeInAscendingOrder();
        }
        public void RemoveBy_Odd_OnlyEvenShouldStay()
        {
            var heap = new HeapOverList <int>();

            heap.AddRange(new[] { 5, 8, 6, 3, 1, 5, 8, 6, 9, 9, 2 });

            var initCount = heap.Count;

            var removedCount = heap.RemoveBy(item => item % 2 == 1);

            removedCount.Should().Be(initCount - heap.Count);
            heap._storage.Should().BeInAscendingOrder();
            heap._storage.Should().Contain(item => item % 2 == 0);
        }
        public void RemoveMin_ShouldReturnMinElement_DecreaseAmountByOne()
        {
            var heap = new HeapOverList <int>();

            heap.AddRange(new[] { 5, 8, 6, 3, 1, 5, 8, 6, 9, 9, 2 });

            var initMin   = heap.Min;
            var initCount = heap.Count;

            var removedMin = heap.RemoveMin();

            initMin.Should().Be(removedMin);
            heap.Count.Should().Be(initCount - 1);
            initMin.Should().BeLessOrEqualTo(heap.Min);
            heap._storage.Should().BeInAscendingOrder();
        }
        public void Add_NullValues_ShoulBeInAscendingOrder()
        {
            var heap = new HeapOverList <TestDataType>();
            var data = new[] { 5, 8, 6, 3, 1, 5, 8, 6, 9, 9, 2 }
            .Select((n, idx) => idx % 4 == 0
                                                                                ? default(TestDataType)
                                                                                : new TestDataType {
                Value = n
            })
            .ToList();

            data.ForEach(item => heap.Add(item));

            heap._storage.Where(item => item != null)
            .Should().BeInAscendingOrder(item => item.Value);
        }
        public void RemoveAtMiddle_ShouldReturnMiddleElement_DecreaseAmountByOne()
        {
            var heap = new HeapOverList <int>();

            heap.AddRange(new[] { 5, 8, 6, 3, 1, 5, 8, 6, 9, 9, 2 });

            var initMin   = heap.Min;
            var initCount = heap.Count;

            var removedItem = heap.RemoveAt(heap.Count / 2);

            Console.WriteLine($"removed item {removedItem}");

            initMin.Should().Be(heap.Min);
            heap.Count.Should().Be(initCount - 1);
            heap._storage.Should().BeInAscendingOrder();
        }