public void When_pool_is_created_Then_instances_up_to_capacity_should_be_created()
 {
     int capacity = 32;
     var pool = new RequestReturnPool<Item>(capacity);
     Assert.That(pool.UnusedCount, Is.EqualTo(capacity));
     Assert.That(pool.Count(), Is.EqualTo(capacity));
 }
        public void When_item_is_requested_Then_it_is_provided_and_pool_count_is_decreased()
        {
            int capacity = 32;
            var pool = new RequestReturnPool<Item>(capacity);
            var item = pool.Request();

            Assert.That(item, Is.Not.Null);
            Assert.That(pool.UnusedCount, Is.EqualTo(capacity - 1));
        }
        public void When_pool_capacity_is_exhausted_Then_new_items_are_allocated()
        {
            int capacity = 32;
            var pool = new RequestReturnPool<Item>(capacity);
            for (int i = 0; i < capacity; i++) {
                pool.Request();
            }

            Assert.That(pool.UnusedCount, Is.Zero);

            var item = pool.Request();
            Assert.That(item, Is.Not.Null);
            Assert.That(pool.UnusedCount, Is.Zero);
        }
        public void When_items_are_returned_to_pool_Then_they_are_available_for_request()
        {
            var requested = new List<Item>();
            int capacity = 32;
            var pool = new RequestReturnPool<Item>(capacity);
            for (int i = 0; i < capacity; i++) {
                requested.Add(pool.Request());
            }

            foreach (var requestedItem in requested) {
                pool.Return(requestedItem);
            }

            Assert.That(pool.UnusedCount, Is.EqualTo(capacity));

            int index = capacity - 1;
            foreach (var item in pool) {
                Assert.That(item, Is.EqualTo(requested[index--]));
            }
        }