public void Release_ResetsValue()
        {
            var cache = new LinkedListNodeCache <string>();
            var node  = cache.Acquire(null);

            Assert.IsNull(node.Value);
            node.Value = "TestString";
            cache.Release(node);
            Assert.IsNull(node.Value);
        }
        public void WhenDelegateRemoved_DelegateIsNotInvoked()
        {
            var             cache   = new LinkedListNodeCache <Action <string> >();
            var             delList = new DelegateList <string>(cache.Acquire, cache.Release);
            bool            called  = false;
            Action <string> del     = s => { called = true; };

            delList.Add(del);
            delList.Remove(del);
            delList.Invoke(null);
            Assert.IsFalse(called);
            Assert.AreEqual(cache.CreatedNodeCount, cache.CreatedNodeCount);
        }
        LinkedListNodeCache <T> CreateCache <T>(int count)
        {
            var cache = new LinkedListNodeCache <T>();
            var temp  = new List <LinkedListNode <T> >();

            for (int i = 0; i < count; i++)
            {
                temp.Add(cache.Acquire(default(T)));
            }
            Assert.AreEqual(count, cache.CreatedNodeCount);
            foreach (var t in temp)
            {
                cache.Release(t);
            }
            Assert.AreEqual(count, cache.CachedNodeCount);
            return(cache);
        }
        DelegateList <T> CreateDelegateList <T>()
        {
            var cache = new LinkedListNodeCache <Action <T> >();

            return(new DelegateList <T>(cache.Acquire, cache.Release));
        }