//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void mustNotThrowOnInterleavedCatchups()
        public virtual void MustNotThrowOnInterleavedCatchups()
        {
            // given
            TripCountingRootCatchup tripCountingRootCatchup = TripCounter;

            // When
            for (int i = 0; i < TripCountingRootCatchup.MaxTripCount * 4; i++)
            {
                tripCountingRootCatchup.CatchupFrom(i % 2);
            }

            // then this should be fine
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void mustReturnRootUsingProvidedSupplier()
        public virtual void MustReturnRootUsingProvidedSupplier()
        {
            // given
            Root expectedRoot = new Root(1, 2);

            System.Func <Root>      rootSupplier            = () => expectedRoot;
            TripCountingRootCatchup tripCountingRootCatchup = new TripCountingRootCatchup(rootSupplier);

            // when
            Root actualRoot = tripCountingRootCatchup.CatchupFrom(10);

            // then
            assertSame(expectedRoot, actualRoot);
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void mustThrowOnConsecutiveCatchupsFromSamePage()
        public virtual void MustThrowOnConsecutiveCatchupsFromSamePage()
        {
            // Given
            TripCountingRootCatchup tripCountingRootCatchup = TripCounter;

            // When
            try
            {
                for (int i = 0; i < TripCountingRootCatchup.MaxTripCount; i++)
                {
                    tripCountingRootCatchup.CatchupFrom(10);
                }
                fail("Expected to throw");
            }
            catch (TreeInconsistencyException)
            {
                // Then good
            }
        }