@Test public void shouldKeepHighestDuringConcurrentOfferings() throws Throwable { // GIVEN final HighestTransactionId highest = new HighestTransactionId( -1, -1, -1 ); Race race = new Race(); int updaters = max( 2, getRuntime().availableProcessors() ); final AtomicInteger accepted = new AtomicInteger(); for ( int i = 0; i < updaters; i++ ) { final long id = i + 1; race.addContestant( () -> { if ( highest.offer( id, id, id ) ) { accepted.incrementAndGet(); } } ); } // WHEN race.go(); // THEN assertTrue( accepted.get() > 0 ); assertEquals( updaters, highest.get().transactionId() ); }
@Test public void shouldHardSetHighest() { // GIVEN HighestTransactionId highest = new HighestTransactionId( 10, 10, 10 ); // WHEN highest.set( 8, 1299128, 42 ); // THEN assertEquals( new TransactionId( 8, 1299128, 42 ), highest.get() ); }
@Test public void shouldOnlyKeepTheHighestOffered() { // GIVEN HighestTransactionId highest = new HighestTransactionId( -1, -1, -1 ); // WHEN/THEN assertAccepted( highest, 2 ); assertAccepted( highest, 5 ); assertRejected( highest, 3 ); assertRejected( highest, 4 ); assertAccepted( highest, 10 ); }