@Test public void test_equals() { RollingFileHashes a = RollingFileHashes.create(FileHashes.create(new String[] {md5Hex("line0"), md5Hex("line1"), md5Hex("line2")}), 1); RollingFileHashes b = RollingFileHashes.create(FileHashes.create(new String[] {md5Hex("line0"), md5Hex("line1"), md5Hex("line2"), md5Hex("line3")}), 1); assertThat(a.getHash(1) == b.getHash(1)).isTrue(); assertThat(a.getHash(2) == b.getHash(2)).isTrue(); assertThat(a.getHash(3) == b.getHash(3)).isFalse(); RollingFileHashes c = RollingFileHashes.create(FileHashes.create(new String[] {md5Hex("line-1"), md5Hex("line0"), md5Hex("line1"), md5Hex("line2"), md5Hex("line3")}), 1); assertThat(a.getHash(1) == c.getHash(2)).isFalse(); assertThat(a.getHash(2) == c.getHash(3)).isTrue(); }
public static RollingFileHashes create(FileHashes hashes, int halfBlockSize) { int size = hashes.length(); int[] rollingHashes = new int[size]; RollingHashCalculator hashCalulator = new RollingHashCalculator(halfBlockSize * 2 + 1); for (int i = 1; i <= Math.min(size, halfBlockSize + 1); i++) { hashCalulator.add(hashes.getHash(i).hashCode()); } for (int i = 1; i <= size; i++) { rollingHashes[i - 1] = hashCalulator.getHash(); if (i - halfBlockSize > 0) { hashCalulator.remove(hashes.getHash(i - halfBlockSize).hashCode()); } if (i + 1 + halfBlockSize <= size) { hashCalulator.add(hashes.getHash(i + 1 + halfBlockSize).hashCode()); } else { hashCalulator.add(0); } } return new RollingFileHashes(rollingHashes); }
public static RollingFileHashes create(FileHashes hashes, int halfBlockSize) { int size = hashes.length(); int[] rollingHashes = new int[size]; RollingHashCalculator hashCalulator = new RollingHashCalculator(halfBlockSize * 2 + 1); for (int i = 1; i <= Math.min(size, halfBlockSize + 1); i++) { hashCalulator.add(hashes.getHash(i).hashCode()); } for (int i = 1; i <= size; i++) { rollingHashes[i - 1] = hashCalulator.getHash(); if (i - halfBlockSize > 0) { hashCalulator.remove(hashes.getHash(i - halfBlockSize).hashCode()); } if (i + 1 + halfBlockSize <= size) { hashCalulator.add(hashes.getHash(i + 1 + halfBlockSize).hashCode()); } else { hashCalulator.add(0); } } return new RollingFileHashes(rollingHashes); }