This is an automated email from the ASF dual-hosted git repository. adrian pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/incubator-tuweni.git
The following commit(s) were added to refs/heads/main by this push: new 8177722 Add optimised update(MessageDigest) implementation for ConcatenatedBytes. 8177722 is described below commit 8177722757671cc627fc69594eb8b6c32d73e56a Author: Adrian Sutton <adrian.sut...@consensys.net> AuthorDate: Tue Jan 4 09:44:32 2022 +1000 Add optimised update(MessageDigest) implementation for ConcatenatedBytes. Avoids the need to copy the concatenated values into a temporary array. --- bytes/build.gradle | 1 + .../org/apache/tuweni/bytes/ConcatenatedBytes.java | 9 +++++++++ .../apache/tuweni/bytes/ConcatenatedBytesTest.java | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/bytes/build.gradle b/bytes/build.gradle index 55515f9..d0887e2 100644 --- a/bytes/build.gradle +++ b/bytes/build.gradle @@ -21,6 +21,7 @@ dependencies { testImplementation 'io.vertx:vertx-core' testImplementation 'org.junit.jupiter:junit-jupiter-api' testImplementation 'org.junit.jupiter:junit-jupiter-params' + testImplementation 'org.mockito:mockito-junit-jupiter' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' } diff --git a/bytes/src/main/java/org/apache/tuweni/bytes/ConcatenatedBytes.java b/bytes/src/main/java/org/apache/tuweni/bytes/ConcatenatedBytes.java index f964b08..d2dc260 100644 --- a/bytes/src/main/java/org/apache/tuweni/bytes/ConcatenatedBytes.java +++ b/bytes/src/main/java/org/apache/tuweni/bytes/ConcatenatedBytes.java @@ -16,6 +16,8 @@ package org.apache.tuweni.bytes; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkElementIndex; +import java.security.MessageDigest; + final class ConcatenatedBytes extends AbstractBytes { private final Bytes[] values; @@ -184,6 +186,13 @@ final class ConcatenatedBytes extends AbstractBytes { } @Override + public void update(MessageDigest digest) { + for (Bytes value : values) { + value.update(digest); + } + } + + @Override public byte[] toArray() { if (size == 0) { return new byte[0]; diff --git a/bytes/src/test/java/org/apache/tuweni/bytes/ConcatenatedBytesTest.java b/bytes/src/test/java/org/apache/tuweni/bytes/ConcatenatedBytesTest.java index cd95cd6..f2f83b2 100644 --- a/bytes/src/test/java/org/apache/tuweni/bytes/ConcatenatedBytesTest.java +++ b/bytes/src/test/java/org/apache/tuweni/bytes/ConcatenatedBytesTest.java @@ -17,7 +17,10 @@ import static org.apache.tuweni.bytes.Bytes.wrap; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import java.security.MessageDigest; import java.util.Arrays; import java.util.stream.Stream; @@ -25,6 +28,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.InOrder; class ConcatenatedBytesTest { @@ -123,4 +127,19 @@ class ConcatenatedBytesTest { dest.set(1, (byte) 123); assertNotEquals(hashCode, bytes.hashCode()); } + + @Test + void shouldUpdateMessageDigest() { + Bytes value1 = fromHexString("0x01234567"); + Bytes value2 = fromHexString("0x89ABCDEF"); + Bytes value3 = fromHexString("0x01234567"); + Bytes bytes = wrap(value1, value2, value3); + MessageDigest digest = mock(MessageDigest.class); + bytes.update(digest); + + final InOrder inOrder = inOrder(digest); + inOrder.verify(digest).update(value1.toArrayUnsafe(), 0, 4); + inOrder.verify(digest).update(value2.toArrayUnsafe(), 0, 4); + inOrder.verify(digest).update(value3.toArrayUnsafe(), 0, 4); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@tuweni.apache.org For additional commands, e-mail: commits-h...@tuweni.apache.org