Example #1
0
        public void Cull_ReducesObjectCount()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            int count             = 9;
            int reduced           = count - 1;
            List <TestClass> list = new List <TestClass>();

            for (int i = 0; i < count; i++)
            {
                list.Add(PPocoPool.Get <TestClass>());
            }
            for (int i = 0; i < count; i++)
            {
                PPocoPool.Put(list[0]);
            }
            list.Clear();

            //  act
            PPocoPool.SetLimit <TestClass>(poolSize: reduced);
            int available = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.AreEqual(reduced, available, "Available objects does not match expected count");
        }
Example #2
0
        public void GetAvailable_IndicatesUnusedQuantity()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            int count = 3;

            TestClass[] gos = new TestClass[count];

            //  act
            for (int i = 0; i < count; i++)
            {
                gos[i] = PPocoPool.Get <TestClass>();
            }
            int resultForEmpty = PPocoPool.GetAvailable <TestClass>();

            for (int i = 0; i < count; i++)
            {
                PPocoPool.Put(gos[i]);
            }
            int resultForReclaimed = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.AreEqual(0, resultForEmpty, "Pool not empty");
            Assert.AreEqual(count, resultForReclaimed, "Pool missing reclaimed objects");
        }
Example #3
0
        public void Clear_DestroysAllObjects()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            int count = 9;

            //  act
            PPocoPool.Prewarm <TestClass>(count);
            PPocoPool.Clear <TestClass>();
            int total = PPocoPool.GetAvailable <TestClass>() + PPocoPool.GetInUse <TestClass>();

            //  assert
            Assert.AreEqual(0, total, "Pool contains objects");
        }
Example #4
0
        public void Put_ReturnsObjectToPool()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            TestClass instance  = PPocoPool.Get <TestClass>();
            int       available = PPocoPool.GetAvailable <TestClass>();

            //  act
            bool putResult = PPocoPool.Put(instance);
            int  result    = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.IsTrue(putResult, "Pool indicated object was not reclaimed");
            Assert.AreEqual(available + 1, result, "Available object count incorrect");
        }
Example #5
0
        public void SetNoStaleDuration_RemovesTimestamps()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            float duration = 1;    //  seconds

            PPocoPool.SetLimit <TestClass>(staleDuration: duration);
            int count = 9;

            //  act
            PPocoPool.Prewarm <TestClass>(count);
            PPocoPool.SetLimit <TestClass>(staleDuration: PPocoPool.UNLIMITED);
            Delay(duration + 0.1f);
            int available = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.AreEqual(count, available, "Wrong number available");
        }
Example #6
0
        public void SetLimit_AssignsPersistenceLimit()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            float duration = 0f;

            PPocoPool.SetLimit <TestClass>(staleDuration: duration);

            //  act
            TestClass instance = PPocoPool.Get <TestClass>();

            PPocoPool.Put(instance);
            //  Using a duration of '0' should trigger the time-based culling.
            int available = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.AreEqual(0, available, "Pool kept objects past expiration");
        }
Example #7
0
        public void Prewarm_CreatesObjects()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            int   count    = 9;
            float duration = 7; //  seconds

            //  act
            PPocoPool.Prewarm <TestClass>(count, duration);
            Delay(duration * 0.5f);
            int initial = PPocoPool.GetAvailable <TestClass>();

            Delay(duration);
            int complete = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.IsTrue(initial < count, "Partial generaton contains too many objects");
            Assert.AreEqual(count, complete, "Complete generation contains wrong number of objects");
        }
Example #8
0
        public void Expire_ReducesObjectCount()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            float longStale  = 9;
            float shortStale = 1;
            int   count      = 7;

            PPocoPool.SetLimit <TestClass>(staleDuration: longStale);
            PPocoPool.Prewarm <TestClass>(count, duration: 0);

            //  act
            PPocoPool.SetLimit <TestClass>(staleDuration: shortStale);
            Delay(shortStale + 0.1f);
            PPocoPool.Expire <TestClass>();
            int available = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.AreEqual(0, available, "Pool did not expire unused objects");
        }
Example #9
0
        public void SetNoQuantityLimit_RemovesLimit()
        {
            //  setup
            PPocoPool.Clear <TestClass>();

            //  arrange
            int count             = 9;
            int limit             = count - 1;
            List <TestClass> list = new List <TestClass>();

            //  act
            PPocoPool.SetLimit <TestClass>(poolSize: limit);
            PPocoPool.Prewarm <TestClass>(count);
            int countWhileLimited = PPocoPool.GetAvailable <TestClass>();

            PPocoPool.SetLimit <TestClass>(poolSize: PPool.UNLIMITED);
            PPocoPool.Prewarm <TestClass>(count);
            int countUnlimited = PPocoPool.GetAvailable <TestClass>();

            //  assert
            Assert.AreEqual(limit, countWhileLimited, "Object creation not correctly limited");
            Assert.AreEqual(count, countUnlimited, "Unlimited object creation count incorrect");
        }