From 90abbcf5b6ac6b32ec7939610774c93199c0be3b Mon Sep 17 00:00:00 2001 From: Jonathan Ross Date: Mon, 11 May 2015 22:57:30 -0400 Subject: [PATCH] Fix #5 --- .../twitter/SnowflakeEncodingProvider.java | 2 +- .../twitter/SnowflakeDecodingUtilsTest.java | 23 ++++++++++++++++--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/fauxflake-core/src/main/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeEncodingProvider.java b/fauxflake-core/src/main/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeEncodingProvider.java index ad6d283..842fa15 100644 --- a/fauxflake-core/src/main/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeEncodingProvider.java +++ b/fauxflake-core/src/main/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeEncodingProvider.java @@ -65,7 +65,7 @@ public class SnowflakeEncodingProvider implements EncodingProvider { private long shiftedMachineId; public SnowflakeEncodingProvider(long machineId) { - this.shiftedMachineId = ((machineId % MACHINE_CODES) << SHIFT_MACHINE_CODE_BITS); + this.shiftedMachineId = ((Math.abs(machineId) % MACHINE_CODES) << SHIFT_MACHINE_CODE_BITS); } @Override diff --git a/fauxflake-core/src/test/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeDecodingUtilsTest.java b/fauxflake-core/src/test/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeDecodingUtilsTest.java index bed9568..5cda014 100644 --- a/fauxflake-core/src/test/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeDecodingUtilsTest.java +++ b/fauxflake-core/src/test/java/com/github/rholder/fauxflake/provider/twitter/SnowflakeDecodingUtilsTest.java @@ -20,20 +20,37 @@ import com.github.rholder.fauxflake.api.Id; import com.github.rholder.fauxflake.api.IdGenerator; import com.github.rholder.fauxflake.provider.SystemTimeProvider; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; +import java.util.Arrays; +import java.util.Collection; import java.util.Date; +@RunWith(Parameterized.class) public class SnowflakeDecodingUtilsTest extends SnowflakeDecodingUtils { - private static final int TEST_MACHINE_ID = 53; + private final int machineId; private IdGenerator idGenerator; + + @Parameters + public static Collection data() { + Object[][] data = new Object[][] { {53}, {-53} }; + return Arrays.asList(data); + } + + public SnowflakeDecodingUtilsTest(int machineId) { + this.machineId = machineId; + } @Before public void before() { - idGenerator = new DefaultIdGenerator(new SystemTimeProvider(), new SnowflakeEncodingProvider(TEST_MACHINE_ID)); + idGenerator = new DefaultIdGenerator(new SystemTimeProvider(), new SnowflakeEncodingProvider(machineId)); } @Test @@ -55,7 +72,7 @@ public void encodedValueCheck() throws InterruptedException { Date idDate = decodeDate(longId); Assert.assertTrue("Now is greater than generated id", now.getTime() <= idDate.getTime()); - Assert.assertEquals("Unexpected machine id", TEST_MACHINE_ID, decodeMachineId(longId)); + Assert.assertEquals("Unexpected machine id", Math.abs(machineId), decodeMachineId(longId)); Assert.assertEquals("Unexpected number of bytes in id", 8, byteId.length); }