public void WhenItemIsRemovedItIsDisposed()
        {
            var lruOfDisposable        = new ConcurrentLru <int, DisposableItem>(1, 6, EqualityComparer <int> .Default);
            var disposableValueFactory = new DisposableValueFactory();

            lruOfDisposable.GetOrAdd(1, disposableValueFactory.Create);
            lruOfDisposable.TryRemove(1);

            disposableValueFactory.Items[1].IsDisposed.Should().BeTrue();
        }
        public void WhenValueExpiresItIsDisposed()
        {
            var lruOfDisposable        = new ConcurrentLru <int, DisposableItem>(1, 6, EqualityComparer <int> .Default);
            var disposableValueFactory = new DisposableValueFactory();

            for (int i = 0; i < 5; i++)
            {
                lruOfDisposable.GetOrAdd(i, disposableValueFactory.Create);
            }

            disposableValueFactory.Items[0].IsDisposed.Should().BeTrue();
            disposableValueFactory.Items[1].IsDisposed.Should().BeFalse();
        }
        public async Task WhenValueExpiresAsyncItIsDisposed()
        {
            var lruOfDisposable        = new ClassicLru <int, DisposableItem>(1, 6, EqualityComparer <int> .Default);
            var disposableValueFactory = new DisposableValueFactory();

            for (int i = 0; i < 7; i++)
            {
                await lruOfDisposable.GetOrAddAsync(i, disposableValueFactory.CreateAsync);
            }

            disposableValueFactory.Items[0].IsDisposed.Should().BeTrue();
            disposableValueFactory.Items[1].IsDisposed.Should().BeFalse();
        }