public void IdPropertyShouldNotChangeUsageAfterUsage()
        {
            // First usage.
            int id;

            using (var pms = _memoryStreamPool.GetObject())
            {
                id = pms.PooledObjectInfo.Id;
                id.ShouldNotBe(0);
            }

            // Second usage is the same, pool uses a sort of stack, not a proper queue.
            using (var pms = _memoryStreamPool.GetObject())
            {
                pms.PooledObjectInfo.Id.ShouldBe(id);
            }
        }
Beispiel #2
0
        public void ShouldReturnToPoolWhenStreamIsSmall(string text)
        {
            string result;

            using (var pms = _memoryStreamPool.GetObject())
            {
#pragma warning disable CC0022 // Should dispose object
                var sw = new StreamWriter(pms.MemoryStream);
                sw.Write(text);
                sw.Flush();

                pms.MemoryStream.Position = 0L;

                var sr = new StreamReader(pms.MemoryStream);
                result = sr.ReadToEnd();
#pragma warning restore CC0022 // Should dispose object

                pms.MemoryStream.Capacity.ShouldBeLessThanOrEqualTo(_memoryStreamPool.MaximumMemoryStreamCapacity);
            }

            result.ShouldBe(text);

            _memoryStreamPool.ObjectsInPoolCount.ShouldBe(1);
            _memoryStreamPool.Diagnostics.ReturnedToPoolCount.ShouldBe(1);
            _memoryStreamPool.Diagnostics.ObjectResetFailedCount.ShouldBe(0);
        }