diff options
author | Michajlo Matijkiw <michajlo@google.com> | 2016-12-15 17:25:08 +0000 |
---|---|---|
committer | John Cater <jcater@google.com> | 2016-12-15 20:38:55 +0000 |
commit | e3db95e855ac11f161d24d472efd488dc4085dfe (patch) | |
tree | 421e1c652eabd57b6ab0925ba9fa4e7876cfc742 /src/test/java/com/google/devtools/build/lib/util | |
parent | 49757602c4ca9e48081f98850007b2ef17427b46 (diff) |
Streamline Fingerprint implementation
Thread all updates through a CodedOutputStream. This has the benefit of
potentially hashing less data, as many int values can be represented more
compactly, and reducing the churn of hashing strings (generally), since
CodedOutputStream is already heavily optimized for this. While the buffer
size is a little generous, it winds up paying off.
--
PiperOrigin-RevId: 142151062
MOS_MIGRATED_REVID=142151062
Diffstat (limited to 'src/test/java/com/google/devtools/build/lib/util')
-rw-r--r-- | src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java b/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java index 22e9fe79b7..faf974578f 100644 --- a/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java +++ b/src/test/java/com/google/devtools/build/lib/util/FingerprintTest.java @@ -23,6 +23,7 @@ import com.google.devtools.build.lib.vfs.inmemoryfs.InMemoryFileSystem; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.UUID; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; @@ -38,13 +39,13 @@ public class FingerprintTest { Fingerprint f1Latin1 = new Fingerprint(); for (String s : list1) { f1.addString(s); - f1Latin1.addStringLatin1(s); + f1Latin1.addString(s); } Fingerprint f2 = new Fingerprint(); Fingerprint f2Latin1 = new Fingerprint(); for (String s : list2) { f2.addString(s); - f2Latin1.addStringLatin1(s); + f2Latin1.addString(s); } assertThat(f1.hexDigestAndReset()).isNotEqualTo(f2.hexDigestAndReset()); assertThat(f1Latin1.hexDigestAndReset()).isNotEqualTo(f2Latin1.hexDigestAndReset()); @@ -113,10 +114,10 @@ public class FingerprintTest { public void addPath() throws Exception { PathFragment pf = new PathFragment("/etc/pwd"); assertThat(new Fingerprint().addPath(pf).hexDigestAndReset()) - .isEqualTo("01cc3eeea3a2f58e447e824f9f62d3d1"); + .isEqualTo("63ab5c47c117635407a1af6377e216bc"); Path p = new InMemoryFileSystem(BlazeClock.instance()).getPath(pf); assertThat(new Fingerprint().addPath(p).hexDigestAndReset()) - .isEqualTo("01cc3eeea3a2f58e447e824f9f62d3d1"); + .isEqualTo("63ab5c47c117635407a1af6377e216bc"); } @Test @@ -141,4 +142,29 @@ public class FingerprintTest { assertThat(f1).isEqualTo(new Fingerprint().addNullableString(null).hexDigestAndReset()); assertThat(f1).isNotEqualTo(new Fingerprint().addNullableString("").hexDigestAndReset()); } + + @Test + public void testReusableAfterReset() throws Exception { + Fingerprint fp = new Fingerprint(); + String f1 = convolutedFingerprintAndReset(fp); + String f2 = convolutedFingerprintAndReset(fp); + assertThat(f1).isEqualTo(f2); + } + + private static String convolutedFingerprintAndReset(Fingerprint fingerprint) { + return fingerprint + .addBoolean(false) + .addBytes(new byte[10]) + .addBytes(new byte[10], 0, 5) + .addInt(20) + .addLong(30) + .addNullableBoolean(null) + .addNullableInt(null) + .addNullableString(null) + .addPath(new PathFragment("/foo/bar")) + .addPaths(ImmutableList.of(new PathFragment("/foo/bar"))) + .addString("baz") + .addUUID(UUID.fromString("12345678-1234-1234-1234-1234567890ab")) + .hexDigestAndReset(); + } } |