//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCreateAnUpdaterForMultipleVersionUpdatesNotInOrder()
        public virtual void ShouldCreateAnUpdaterForMultipleVersionUpdatesNotInOrder()
        {
            // given
            long initialVersion = 42;

            when(_store.version()).thenReturn(initialVersion);
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: ConcurrentMapState<?> state = createMapState();
            ConcurrentMapState <object> state = CreateMapState();

            // when
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: EntryUpdater<?> updater;
            EntryUpdater <object> updater;

            long updateVersion = 45;

            updater = state.Updater(updateVersion, @lock);
            updater.Close();

            updateVersion = 43;
            updater       = state.Updater(updateVersion, @lock);
            updater.Close();

            updateVersion = 44;
            updater       = state.Updater(updateVersion, @lock);
            updater.Close();

            // then
            // it does not blow up
            assertNotNull(updater);
            assertEquals(45, state.Version());
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldUseEmptyUpdaterOnVersionLowerOrEqualToTheInitialVersion()
        public virtual void ShouldUseEmptyUpdaterOnVersionLowerOrEqualToTheInitialVersion()
        {
            // given
            long initialVersion = 42;

            when(_store.version()).thenReturn(initialVersion);
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: ConcurrentMapState<?> state = createMapState();
            ConcurrentMapState <object> state = CreateMapState();

            // when
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: EntryUpdater<?> updater = state.updater(initialVersion, lock);
            EntryUpdater <object> updater = state.Updater(initialVersion, @lock);

            // expected
            assertEquals("Empty updater should be used for version less or equal to initial", EntryUpdater.NoUpdates(), updater);
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void doNotMarkVersionAsDirtyOnAnotherKeyUpdate() throws java.io.IOException
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in C#:
        public virtual void DoNotMarkVersionAsDirtyOnAnotherKeyUpdate()
        {
            long updaterVersionTxId = 25;
            long lastClosedTxId     = 20;
            TransactionVersionContextSupplier versionContextSupplier = new TransactionVersionContextSupplier();

            versionContextSupplier.Init(() => lastClosedTxId);
            ConcurrentMapState <string> mapState = CreateMapState(versionContextSupplier);
            VersionContext versionContext        = versionContextSupplier.VersionContext;

            using (EntryUpdater <string> updater = mapState.Updater(updaterVersionTxId, @lock))
            {
                updater.Apply("b", new SimpleValueUpdate(2));
            }

            assertEquals(updaterVersionTxId, mapState.Version());
            versionContext.InitRead();
            mapState.Lookup("a", new EmptyValueSink());
            assertFalse(versionContext.Dirty);
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @Test public void shouldCreateAnUpdaterForAnUnseenVersionUpdateWithAGap()
        public virtual void ShouldCreateAnUpdaterForAnUnseenVersionUpdateWithAGap()
        {
            // given
            long initialVersion = 42;

            when(_store.version()).thenReturn(initialVersion);
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
//ORIGINAL LINE: ConcurrentMapState<?> state = createMapState();
            ConcurrentMapState <object> state = CreateMapState();

            // when
            long updateVersion = 45;
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final EntryUpdater<?> updater = state.updater(updateVersion, lock);
//JAVA TO C# CONVERTER WARNING: Java wildcard generics have no direct equivalent in .NET:
            EntryUpdater <object> updater = state.Updater(updateVersion, @lock);

            updater.Close();

            // then
            // it does not blow up
            assertNotNull(updater);
            assertEquals(updateVersion, state.Version());
        }