public void Dispose()
        {
            var d = new IDisposable[1];

            var cs = new CompletableSubject();

            var source = cs.Cache(c => d[0] = c);

            Assert.IsNull(d[0]);
            Assert.IsFalse(cs.HasObserver());

            var to1 = source.Test();

            Assert.IsNotNull(d[0]);
            Assert.IsTrue(cs.HasObserver());

            source.Test(true).AssertEmpty();

            d[0].Dispose();

            Assert.IsFalse(cs.HasObserver());

            to1.AssertFailure(typeof(OperationCanceledException));

            source.Test().AssertFailure(typeof(OperationCanceledException));
        }