public void CaclucatesCorrectlyFromValidSizes()
            {
                IReadOnlyList <PageNumberAndItemNumbers> pages
                    = PageNumberAndItemNumbers.Calculate(20, 119);

                Assert.IsNotNull(pages);
                Assert.AreEqual(6, pages.Count);
                Assert.AreEqual(119, pages[pages.Count - 1].LastItemNumber);

                int lastItemNumber = 0;

                for (int i = PageNumberAndSize.FirstPageNumber; i <= pages.Count; i++)
                {
                    int firstItemNumber           = lastItemNumber + 1;
                    int pageIndex                 = i - 1;
                    PageNumberAndItemNumbers page = pages[pageIndex];

                    Assert.AreEqual(i, page.PageNumber);
                    Assert.AreEqual(firstItemNumber, page.FirstItemNumber);

                    lastItemNumber = page.LastItemNumber;
                }

                Assert.AreEqual(119, lastItemNumber);
                Assert.IsTrue(pages[0].HasValue);
            }
            public void ReturnsOnePageForUnbounded()
            {
                IReadOnlyList <PageNumberAndItemNumbers> pagesUnbounded
                    = PageNumberAndItemNumbers.Calculate(0, 57);

                Assert.IsNotNull(pagesUnbounded);
                Assert.AreEqual(1, pagesUnbounded.Count);
                Assert.AreEqual(1, pagesUnbounded[0].PageNumber);
                Assert.AreEqual(1, pagesUnbounded[0].FirstItemNumber);
                Assert.AreEqual(57, pagesUnbounded[0].LastItemNumber);
            }
            public void ReturnsOnePageForZeroItems()
            {
                IReadOnlyList <PageNumberAndItemNumbers> zeroPagesWithSize
                    = PageNumberAndItemNumbers.Calculate(20, 0);

                Assert.IsNotNull(zeroPagesWithSize);
                Assert.AreEqual(1, zeroPagesWithSize.Count);
                Assert.AreEqual(1, zeroPagesWithSize[0].PageNumber);
                Assert.AreEqual(0, zeroPagesWithSize[0].FirstItemNumber);
                Assert.AreEqual(0, zeroPagesWithSize[0].LastItemNumber);

                IReadOnlyList <PageNumberAndItemNumbers> zeroPagesUnbounded
                    = PageNumberAndItemNumbers.Calculate(0, 0);

                Assert.IsNotNull(zeroPagesUnbounded);
                Assert.AreEqual(1, zeroPagesUnbounded.Count);
                Assert.AreEqual(1, zeroPagesUnbounded[0].PageNumber);
                Assert.AreEqual(0, zeroPagesUnbounded[0].FirstItemNumber);
                Assert.AreEqual(0, zeroPagesUnbounded[0].LastItemNumber);
            }
 public void DoesNotAllowInvalidSizes()
 {
     Assert.Throws <ArgumentOutOfRangeException>(
         () => PageNumberAndItemNumbers.Calculate(0, -1));
 }