Skip to content

Commit

Permalink
Fix Incremental long crc32c (#1010)
Browse files Browse the repository at this point in the history
  • Loading branch information
sijie authored and merlimat committed Jan 2, 2018
1 parent 87b9d4a commit 1358200
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
Expand Up @@ -35,9 +35,13 @@ final class ReflectedLongCrc extends AbstractLongCrc {
} }
} }


@Override
protected long initial() {
return reflect(super.initial());
}

@Override @Override
protected long resumeRaw(long crc, byte[] input, int index, int length) { protected long resumeRaw(long crc, byte[] input, int index, int length) {
crc = reflect(crc);
for (int i = 0; i < length; ++i) for (int i = 0; i < length; ++i)
crc = table[(int) (crc ^ input[index + i]) & 0xff] ^ (crc >>> 8); crc = table[(int) (crc ^ input[index + i]) & 0xff] ^ (crc >>> 8);
return crc; return crc;
Expand Down
Expand Up @@ -26,6 +26,7 @@
import static com.scurrilous.circe.params.CrcParameters.CRC64_XZ; import static com.scurrilous.circe.params.CrcParameters.CRC64_XZ;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;


import com.scurrilous.circe.IncrementalLongHash;
import java.nio.charset.Charset; import java.nio.charset.Charset;


import org.testng.annotations.Test; import org.testng.annotations.Test;
Expand Down Expand Up @@ -163,12 +164,12 @@ public void testCRC64_XZ() {
} }


@Test @Test
public void testCRC32CIncremental() { public void testCRC32CIncrementalInt() {
// reflected // reflected
testIncremental(PROVIDER.getIncrementalInt(CRC32C)); testIncrementalInt(PROVIDER.getIncrementalInt(CRC32C));
} }


private void testIncremental(IncrementalIntHash hash) { private void testIncrementalInt(IncrementalIntHash hash) {
final String data = "data"; final String data = "data";
final String combined = data + data; final String combined = data + data;


Expand All @@ -177,4 +178,20 @@ private void testIncremental(IncrementalIntHash hash) {
final int incrementalChecksum = hash.resume(dataChecksum, data.getBytes(ASCII)); final int incrementalChecksum = hash.resume(dataChecksum, data.getBytes(ASCII));
assertEquals(combinedChecksum, incrementalChecksum); assertEquals(combinedChecksum, incrementalChecksum);
} }

@Test
public void testCRC32CIncrementalLong() {
// reflected
testIncrementalLong(PROVIDER.getIncrementalLong(CRC32C));
}

private void testIncrementalLong(IncrementalLongHash hash) {
final String data = "data";
final String combined = data + data;

final long dataChecksum = hash.calculate(data.getBytes(ASCII));
final long combinedChecksum = hash.calculate(combined.getBytes(ASCII));
final long incrementalChecksum = hash.resume(dataChecksum, data.getBytes(ASCII));
assertEquals(combinedChecksum, incrementalChecksum);
}
} }

0 comments on commit 1358200

Please sign in to comment.