public void CreatePageLimit10RemovalCount1_Request11Pages_FirstPageRemovalRequest(bool isPreloading)
        {
            // Arrange
            var timestampCount    = 0;
            var timestampProvider = Substitute.For <ITimestampProvider>();

            timestampProvider.Now.Returns(_ => DateTime.MinValue + TimeSpan.FromTicks(1) * timestampCount++);
            var requestedRemovals = new List <int>();

            using var pageRequests = new Subject <(int PageKey, int PageIndex)>();

            // Act
            using var subscription = LeastRecentlyUsedPageRemoval
                                     .Create(
                      10,
                      1,
                      isPreloading,
                      timestampProvider)
                                         (pageRequests)
                                     .Subscribe(removals => requestedRemovals.AddRange(removals));
            for (var i = 0; i < 11; i++)
            {
                pageRequests.OnNext((i, 0));
            }

            // Assert
            Assert.Collection(
                requestedRemovals,
                pageKey => Assert.Equal(0, pageKey));
        }
        public void CreatePageLimit10RemovalCount1_Request10PagesAndIterateThemAgain_NeverRequestsRemoval(bool isPreloading)
        {
            // Arrange
            var timestampCount    = 0;
            var timestampProvider = Substitute.For <ITimestampProvider>();

            timestampProvider.Now.Returns(_ => DateTime.MinValue + TimeSpan.FromTicks(1) * timestampCount++);
            var requestedRemovals = new List <int>();

            using var pageRequests = new Subject <(int PageKey, int PageIndex)>();

            // Act
            using var subscription = LeastRecentlyUsedPageRemoval
                                     .Create(
                      10,
                      1,
                      isPreloading,
                      timestampProvider)
                                         (pageRequests)
                                     .Subscribe(removals => requestedRemovals.AddRange(removals));
            for (var i = 0; i < 10; i++)
            {
                pageRequests.OnNext((i, 0));
            }
            for (var i = 9; i >= 0; i--)
            {
                pageRequests.OnNext((i, 0));
            }

            // Assert
            Assert.Empty(requestedRemovals);
        }