@Test public void testRecoveredPooledOptimizerUsage() { final SourceMock sequence = new SourceMock( 1, 3 ); final Optimizer optimizer = buildPooledOptimizer( 1, 3 ); assertEquals( 0, sequence.getTimesCalled() ); assertEquals( -1, sequence.getCurrentValue() ); Long next = ( Long ) optimizer.generate( sequence ); assertEquals( 1, next.intValue() ); assertEquals( 2, sequence.getTimesCalled() ); assertEquals( 4, sequence.getCurrentValue() ); // app ends, and starts back up (we should "lose" only 2 and 3 as id values) final Optimizer optimizer2 = buildPooledOptimizer( 1, 3 ); next = ( Long ) optimizer2.generate( sequence ); assertEquals( 5, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() ); assertEquals( 7, sequence.getCurrentValue() ); } @Test
@Test public void testBasicPooledOptimizerUsage() { Long next; // test historic sequence behavior, where the initial values start at 1... SourceMock sequence = new SourceMock( 1, 10 ); Optimizer optimizer = buildPooledOptimizer( -1, 10 ); for ( int i = 1; i <= 11; i++ ) { next = ( Long ) optimizer.generate( sequence ); assertEquals( i, next.intValue() ); } assertEquals( 2, sequence.getTimesCalled() ); // twice to initialize state assertEquals( 11, sequence.getCurrentValue() ); // force a "clock over" next = ( Long ) optimizer.generate( sequence ); assertEquals( 12, next.intValue() ); assertEquals( 3, sequence.getTimesCalled() ); assertEquals( 21, sequence.getCurrentValue() ); }
@Test public void testSubsequentPooledOptimizerUsage() { // test the pooled optimizer in situation where the sequence is already beyond its initial value on init. // cheat by telling the sequence to start with 1000 final SourceMock sequence = new SourceMock( 1001, 3, 5 ); // but tell the optimizer the start-with is 1 final Optimizer optimizer = buildPooledOptimizer( 1, 3 ); assertEquals( 5, sequence.getTimesCalled() ); assertEquals( 1001, sequence.getCurrentValue() ); Long next = (Long) optimizer.generate( sequence ); assertEquals( 1001 +1 , next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = (Long) optimizer.generate( sequence ); assertEquals( (1001+2), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); next = (Long) optimizer.generate( sequence ); assertEquals( (1001+3), next.intValue() ); assertEquals( (5+1), sequence.getTimesCalled() ); assertEquals( (1001+3), sequence.getCurrentValue() ); // force a "clock over" next = (Long) optimizer.generate( sequence ); assertEquals( (1001+4), next.intValue() ); assertEquals( (5+2), sequence.getTimesCalled() ); assertEquals( (1001+6), sequence.getCurrentValue() ); }