@Test public void shouldSkipReservedIdWhenGettingBatches() { // GIVEN int batchSize = 10; BatchingIdSequence idSequence = new BatchingIdSequence( IdGeneratorImpl.INTEGER_MINUS_ONE - batchSize - batchSize / 2 ); // WHEN IdRange range1 = idSequence.nextIdBatch( batchSize ); IdRange range2 = idSequence.nextIdBatch( batchSize ); // THEN assertNoReservedId( range1 ); assertNoReservedId( range2 ); }
Generator<R> generator = generatorSupplier.get(); int recordSize = format.getRecordSize( new IntStoreHeader( DATA_SIZE ) ); BatchingIdSequence idSequence = new BatchingIdSequence( random.nextBoolean() ? idSureToBeOnTheNextPage( PAGE_SIZE, recordSize ) : 10 );
@Test public void resetShouldSetDefault() { BatchingIdSequence idSequence = new BatchingIdSequence(); idSequence.set( 99L ); assertEquals( 99L, idSequence.peek() ); assertEquals( 99L, idSequence.nextId() ); assertEquals( 100L, idSequence.peek() ); idSequence.reset(); assertEquals( 0L, idSequence.peek() ); assertEquals( 0L, idSequence.nextId() ); assertEquals( 1L, idSequence.peek() ); }
@Test public void ShouldSkipNullId() { BatchingIdSequence idSequence = new BatchingIdSequence(); idSequence.set( IdGeneratorImpl.INTEGER_MINUS_ONE - 1 ); assertEquals( IdGeneratorImpl.INTEGER_MINUS_ONE - 1, idSequence.peek() ); // The 'NULL Id' should be skipped, and never be visible anywhere. // Peek should always return what nextId will return assertEquals( IdGeneratorImpl.INTEGER_MINUS_ONE - 1, idSequence.nextId() ); assertEquals( IdGeneratorImpl.INTEGER_MINUS_ONE + 1, idSequence.peek() ); assertEquals( IdGeneratorImpl.INTEGER_MINUS_ONE + 1, idSequence.nextId() ); // And what if someone were to set it directly to the NULL id idSequence.set( IdGeneratorImpl.INTEGER_MINUS_ONE ); assertEquals( IdGeneratorImpl.INTEGER_MINUS_ONE + 1, idSequence.peek() ); assertEquals( IdGeneratorImpl.INTEGER_MINUS_ONE + 1, idSequence.nextId() ); }