示例#1
0
        public void OnlyDisposesOnce()
        {
            var disposable = new ReferenceCounted();

            disposable.Dispose();
            disposable.Dispose();
            Assert.IsTrue(disposable.IsDisposed);
        }
示例#2
0
        public void ActuallyDisposesWithOnlyOneReference()
        {
            var disposable = new ReferenceCounted();

            disposable.Dispose();
            Assert.IsTrue(disposable.IsDisposed);
        }
示例#3
0
        public void DoesNotDisposeUntilCountReachesZero()
        {
            var disposable = new ReferenceCounted();

            for (int cnt = 0; cnt < 100; cnt++)
            {
                disposable.AddReference();
            }

            for (int cnt = 0; cnt < 100; cnt++)
            {
                disposable.Dispose();
                Assert.IsFalse(disposable.IsDisposed);
            }

            disposable.Dispose();
            Assert.IsTrue(disposable.IsDisposed);
        }
示例#4
0
        public void DisposeTokenDisposesWhenCountReachesZero()
        {
            var disposable = new ReferenceCounted();
            var token      = disposable.CreateReferenceToken();

            disposable.Dispose();

            Assert.IsFalse(disposable.IsDisposed);
            token.Dispose();
            Assert.IsTrue(disposable.IsDisposed);
        }
示例#5
0
        public void DisposeTokenDoesntDecrementCountMuiltipleTimes()
        {
            var disposable = new ReferenceCounted();
            var token      = disposable.CreateReferenceToken();

            token.Dispose();
            Assert.IsFalse(disposable.IsDisposed);
            token.Dispose();
            Assert.IsFalse(disposable.IsDisposed);
            token.Dispose();
            Assert.IsFalse(disposable.IsDisposed);
            token.Dispose();
            Assert.IsFalse(disposable.IsDisposed);

            disposable.Dispose();
            Assert.IsTrue(disposable.IsDisposed);
        }