public void ShouldHandleClearAfterNoUsage()
        {
            var pool = new ParameterizedObjectPool <int, MyPooledObject>();

            pool.Clear();

            Assert.That(0, Is.EqualTo(pool.KeysInPoolCount));
        }
        public void ShouldChangePoolLimitsIfCorrect()
        {
            var pool = new ParameterizedObjectPool <int, MyPooledObject>();

            Assert.AreEqual(ObjectPool.DefaultPoolMaximumSize, pool.MaximumPoolSize);

            pool.MaximumPoolSize = pool.MaximumPoolSize * 2;
            Assert.AreEqual(ObjectPool.DefaultPoolMaximumSize * 2, pool.MaximumPoolSize);

            pool.MaximumPoolSize = 2;
            Assert.AreEqual(2, pool.MaximumPoolSize);
        }
        public void ShouldHandleClearAfterSomeUsage()
        {
            var pool = new ParameterizedObjectPool <int, MyPooledObject>();

            using (var obj = pool.GetObject(1))
            {
            }

            pool.Clear();

            Assert.That(0, Is.EqualTo(pool.KeysInPoolCount));
        }
        public void ShouldHandleClearAndThenPoolCanBeUsedAgain()
        {
            var pool = new ParameterizedObjectPool <int, MyPooledObject>();

            using (var obj = pool.GetObject(1))
            {
            }

            pool.Clear();

            using (var obj = pool.GetObject(1))
            {
            }

            Assert.That(1, Is.EqualTo(pool.KeysInPoolCount));
        }
        public async Task ShouldSimplyWork(int maxSize)
        {
            const int keyCount    = 4;
            var       pool        = new ParameterizedObjectPool <int, MyPooledObject>(maxSize);
            var       objectCount = maxSize * keyCount;
            var       objects     = new MyPooledObject[objectCount];

            Parallel.For(0, objectCount, i =>
            {
                objects[i] = pool.GetObject(i % keyCount);
            });
            Parallel.For(0, objectCount, i =>
            {
                objects[i].Dispose();
            });

            await Task.Delay(1000);

            Assert.AreEqual(keyCount, pool.KeysInPoolCount);
        }
        public async Task ShouldSimplyWork(int maxSize)
        {
            const int keyCount = 4;
            var pool = new ParameterizedObjectPool<int, MyPooledObject>(0, maxSize);
            var objectCount = maxSize * keyCount;
            var objects = new MyPooledObject[objectCount];
            Parallel.For(0, objectCount, i =>
            {
                objects[i] = pool.GetObject(i % keyCount);
            });
            Parallel.For(0, objectCount, i =>
            {
                objects[i].Dispose();
            });
#if !NET40
            await Task.Delay(1000);
#else
            await TaskEx.Delay(1000);
#endif
            Assert.AreEqual(keyCount, pool.KeysInPoolCount);
        }
        public void ShouldHandleClearAndThenPoolCanBeUsedAgain()
        {
            var pool = new ParameterizedObjectPool<int, MyPooledObject>();

            using (var obj = pool.GetObject(1))
            {
            }

            pool.Clear();

            using (var obj = pool.GetObject(1))
            {
            }

            Assert.That(1, Is.EqualTo(pool.KeysInPoolCount));
        }
        public void ShouldHandleClearAfterSomeUsage()
        {
            var pool = new ParameterizedObjectPool<int, MyPooledObject>();

            using (var obj = pool.GetObject(1))
            {
            }

            pool.Clear();

            Assert.That(0, Is.EqualTo(pool.KeysInPoolCount));
        }
        public void ShouldHandleClearAfterNoUsage()
        {
            var pool = new ParameterizedObjectPool<int, MyPooledObject>();

            pool.Clear();

            Assert.That(0, Is.EqualTo(pool.KeysInPoolCount));
        }
        public void ShouldChangePoolLimitsIfCorrect()
        {
            var pool = new ParameterizedObjectPool<int, MyPooledObject>();
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMinimumSize, pool.MinimumPoolSize);
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMaximumSize, pool.MaximumPoolSize);

            pool.MinimumPoolSize = pool.MaximumPoolSize - 5;
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMaximumSize - 5, pool.MinimumPoolSize);
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMaximumSize, pool.MaximumPoolSize);

            pool.MaximumPoolSize = pool.MaximumPoolSize * 2;
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMaximumSize - 5, pool.MinimumPoolSize);
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMaximumSize * 2, pool.MaximumPoolSize);

            pool.MinimumPoolSize = 1;
            Assert.AreEqual(1, pool.MinimumPoolSize);
            Assert.AreEqual(ObjectPoolConstants.DefaultPoolMaximumSize * 2, pool.MaximumPoolSize);

            pool.MaximumPoolSize = 2;
            Assert.AreEqual(1, pool.MinimumPoolSize);
            Assert.AreEqual(2, pool.MaximumPoolSize);
        }