@Test
  public void whenReadLockAcquiredByOther_thenIncrementSucceedsButCommitFails() {
    long initialValue = 10;
    GammaTxnLong ref = new GammaTxnLong(stm, initialValue);
    long initialVersion = ref.getVersion();

    GammaTxn otherTx = transactionFactory.newTxn();
    ref.getLock().acquire(otherTx, LockMode.Read);

    GammaTxn tx = transactionFactory.newTxn();
    setThreadLocalTxn(tx);

    ref.increment(5);

    try {
      tx.commit();
      fail();
    } catch (ReadWriteConflict expected) {
    }

    assertIsAborted(tx);
    assertVersionAndValue(ref, initialVersion, initialValue);
    assertRefHasReadLock(ref, otherTx);
    assertReadLockCount(ref, 1);
  }