parent
							
								
									1deb79b52e
								
							
						
					
					
						commit
						3929965fe9
					
				| 
						 | 
				
			
			@ -28,7 +28,7 @@ Add these lines to your `pom.xml`.
 | 
			
		|||
<dependency>
 | 
			
		||||
  <groupId>com.github.f4b6a3</groupId>
 | 
			
		||||
  <artifactId>ulid-creator</artifactId>
 | 
			
		||||
  <version>2.0.0</version>
 | 
			
		||||
  <version>2.0.1</version>
 | 
			
		||||
</dependency>
 | 
			
		||||
```
 | 
			
		||||
See more options in [maven.org](https://search.maven.org/artifact/com.github.f4b6a3/ulid-creator).
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,8 +47,8 @@ public class UlidSpecCreator {
 | 
			
		|||
	protected long random1 = 0;
 | 
			
		||||
	protected long random2 = 0;
 | 
			
		||||
 | 
			
		||||
	protected long randomMax2;
 | 
			
		||||
	protected long randomMax1;
 | 
			
		||||
	protected long randomMax2;
 | 
			
		||||
 | 
			
		||||
	protected static final long HALF_RANDOM_COMPONENT = 0x000000ffffffffffL;
 | 
			
		||||
	protected static final long INCREMENT_MAX = 0x0000010000000000L;
 | 
			
		||||
| 
						 | 
				
			
			@ -63,7 +63,6 @@ public class UlidSpecCreator {
 | 
			
		|||
	public UlidSpecCreator() {
 | 
			
		||||
		this.timestampStrategy = new DefaultTimestampStrategy();
 | 
			
		||||
		this.randomStrategy = new DefaultRandomStrategy();
 | 
			
		||||
		this.reset();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
| 
						 | 
				
			
			@ -181,6 +180,7 @@ public class UlidSpecCreator {
 | 
			
		|||
		this.randomStrategy.nextBytes(bytes);
 | 
			
		||||
		this.random1 = UlidUtil.toNumber(bytes, 0, 5);
 | 
			
		||||
		this.random2 = UlidUtil.toNumber(bytes, 5, 10);
 | 
			
		||||
 | 
			
		||||
		// Save the random values
 | 
			
		||||
		this.randomMax1 = this.random1 | INCREMENT_MAX;
 | 
			
		||||
		this.randomMax2 = this.random2 | INCREMENT_MAX;
 | 
			
		||||
| 
						 | 
				
			
			@ -194,11 +194,13 @@ public class UlidSpecCreator {
 | 
			
		|||
	 * 
 | 
			
		||||
	 * @throws UlidCreatorException if an overrun happens.
 | 
			
		||||
	 */
 | 
			
		||||
 | 
			
		||||
	protected synchronized void increment() {
 | 
			
		||||
		if ((++this.random2 > this.randomMax2) && (++this.random1 > this.randomMax1)) {
 | 
			
		||||
			this.reset();
 | 
			
		||||
			throw new UlidCreatorException(OVERRUN_MESSAGE);
 | 
			
		||||
		if (++this.random2 >= this.randomMax2) {
 | 
			
		||||
			this.random2 = this.random2 & HALF_RANDOM_COMPONENT;
 | 
			
		||||
			if ((++this.random1 >= this.randomMax1)) {
 | 
			
		||||
				this.reset();
 | 
			
		||||
				throw new UlidCreatorException(OVERRUN_MESSAGE);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,13 +4,9 @@ import com.github.f4b6a3.ulid.creator.UlidSpecCreator;
 | 
			
		|||
 | 
			
		||||
class UlidSpecCreatorMock extends UlidSpecCreator {
 | 
			
		||||
 | 
			
		||||
	public UlidSpecCreatorMock(long previousTimestamp) {
 | 
			
		||||
		super();
 | 
			
		||||
		this.previousTimestamp = previousTimestamp;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public UlidSpecCreatorMock(long random1, long random2, long randomMax1, long randomMax2, long previousTimestamp) {
 | 
			
		||||
 | 
			
		||||
		super();
 | 
			
		||||
		
 | 
			
		||||
		this.random1 = random1;
 | 
			
		||||
		this.random2 = random2;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
	@Test
 | 
			
		||||
	public void testRandomMostSignificantBits() {
 | 
			
		||||
 | 
			
		||||
		UlidSpecCreatorMock creator = new UlidSpecCreatorMock(TIMESTAMP);
 | 
			
		||||
		UlidSpecCreator creator = new UlidSpecCreator();
 | 
			
		||||
		creator.withTimestampStrategy(new FixedTimestampStretegy(TIMESTAMP));
 | 
			
		||||
 | 
			
		||||
		UUID uuid = creator.create();
 | 
			
		||||
| 
						 | 
				
			
			@ -61,7 +61,7 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
	@Test
 | 
			
		||||
	public void testRandomLeastSignificantBits() {
 | 
			
		||||
 | 
			
		||||
		UlidSpecCreatorMock creator = new UlidSpecCreatorMock(TIMESTAMP);
 | 
			
		||||
		UlidSpecCreator creator = new UlidSpecCreator();
 | 
			
		||||
		creator.withTimestampStrategy(new FixedTimestampStretegy(TIMESTAMP));
 | 
			
		||||
 | 
			
		||||
		UUID uuid = creator.create();
 | 
			
		||||
| 
						 | 
				
			
			@ -84,10 +84,11 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
	@Test
 | 
			
		||||
	public void testIncrementOfRandomLeastSignificantBits() {
 | 
			
		||||
 | 
			
		||||
		UlidSpecCreatorMock creator = new UlidSpecCreatorMock(TIMESTAMP);
 | 
			
		||||
		UlidSpecCreator creator = new UlidSpecCreator();
 | 
			
		||||
		creator.withTimestampStrategy(new FixedTimestampStretegy(TIMESTAMP));
 | 
			
		||||
 | 
			
		||||
		long random2 = creator.getRandom2();
 | 
			
		||||
		creator.create();
 | 
			
		||||
		long random2 = creator.random2;
 | 
			
		||||
 | 
			
		||||
		UUID uuid = new UUID(0, 0);
 | 
			
		||||
		for (int i = 0; i < DEFAULT_LOOP_MAX; i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -95,7 +96,7 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		long expected2 = random2 + DEFAULT_LOOP_MAX;
 | 
			
		||||
		long rand2 = creator.getRandom2();
 | 
			
		||||
		long rand2 = creator.random2;
 | 
			
		||||
		assertEquals("Wrong low random after loop.", expected2, rand2);
 | 
			
		||||
 | 
			
		||||
		rand2 = creator.extractRandom2(uuid);
 | 
			
		||||
| 
						 | 
				
			
			@ -105,10 +106,11 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
	@Test
 | 
			
		||||
	public void testIncrementOfRandomMostSignificantBits() {
 | 
			
		||||
 | 
			
		||||
		UlidSpecCreatorMock creator = new UlidSpecCreatorMock(TIMESTAMP);
 | 
			
		||||
		UlidSpecCreator creator = new UlidSpecCreator();
 | 
			
		||||
		creator.withTimestampStrategy(new FixedTimestampStretegy(TIMESTAMP));
 | 
			
		||||
 | 
			
		||||
		long random1 = creator.getRandom1();
 | 
			
		||||
		creator.create();
 | 
			
		||||
		long random1 = creator.random1;
 | 
			
		||||
 | 
			
		||||
		UUID uuid = new UUID(0, 0);
 | 
			
		||||
		for (int i = 0; i < DEFAULT_LOOP_MAX; i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -116,7 +118,7 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
		}
 | 
			
		||||
 | 
			
		||||
		long expected1 = random1;
 | 
			
		||||
		long rand1 = creator.getRandom1();
 | 
			
		||||
		long rand1 = creator.random1;
 | 
			
		||||
		assertEquals("Wrong high random after loop.", expected1, rand1);
 | 
			
		||||
 | 
			
		||||
		rand1 = creator.extractRandom1(uuid);
 | 
			
		||||
| 
						 | 
				
			
			@ -135,6 +137,8 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
		random1 = max1;
 | 
			
		||||
		random2 = max2 - DEFAULT_LOOP_MAX;
 | 
			
		||||
 | 
			
		||||
		random2--; // Adjust
 | 
			
		||||
 | 
			
		||||
		UlidSpecCreatorMock creator = new UlidSpecCreatorMock(random1, random2, max1, max2, TIMESTAMP);
 | 
			
		||||
		creator.withTimestampStrategy(new FixedTimestampStretegy(TIMESTAMP));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -173,6 +177,8 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
		random1 = max1;
 | 
			
		||||
		random2 = max2 - DEFAULT_LOOP_MAX;
 | 
			
		||||
 | 
			
		||||
		random2--; // Adjust
 | 
			
		||||
 | 
			
		||||
		UlidSpecCreatorMock creator = new UlidSpecCreatorMock(random1, random2, max1, max2, TIMESTAMP);
 | 
			
		||||
		creator.withTimestampStrategy(new FixedTimestampStretegy(TIMESTAMP));
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -186,7 +192,7 @@ public class UlidSpecCreatorTest {
 | 
			
		|||
		assertEquals("Incorrect high random after loop.", expected1, rand1);
 | 
			
		||||
 | 
			
		||||
		long rand2 = creator.extractRandom2(uuid);
 | 
			
		||||
		long expected2 = (max2 & UlidSpecCreatorMock.HALF_RANDOM_COMPONENT);
 | 
			
		||||
		long expected2 = (max2 & UlidSpecCreatorMock.HALF_RANDOM_COMPONENT) - 1;
 | 
			
		||||
		assertEquals("Incorrect low random after loop.", expected2, rand2);
 | 
			
		||||
 | 
			
		||||
		long hi1 = random1 & UlidSpecCreatorMock.HALF_RANDOM_COMPONENT;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue