This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-io.git


The following commit(s) were added to refs/heads/master by this push:
     new 4a79cda  Add benchmarks for IOUtils.contentEquals(Reader, Reader).
4a79cda is described below

commit 4a79cda5698d8c9695990efe68bdc7fd11104c4c
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Jan 25 10:34:59 2021 -0500

    Add benchmarks for IOUtils.contentEquals(Reader, Reader).
    
    This is a follow up regarding the work in PR 118 by XenoAmess.
---
 .../IOUtilsContentEqualsInputStreamsBenchmark.java |  69 +++++++------
 ...a => IOUtilsContentEqualsReadersBenchmark.java} | 111 +++++++++++----------
 2 files changed, 90 insertions(+), 90 deletions(-)

diff --git 
a/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
 
b/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
index 971ca37..6823e84 100644
--- 
a/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
+++ 
b/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
@@ -42,9 +42,8 @@ import org.openjdk.jmh.infra.Blackhole;
 
 /**
  * Test different implementations of {@link IOUtils#contentEquals(InputStream, 
InputStream)}.
- * 
+ *
  * <pre>
- * Benchmark                                                          Mode  
Cnt            Score            Error  Units
  * IOUtilsContentEqualsInputStreamsBenchmark.testFileCurrent          avgt    
5      1518342.821 ▒     201890.705  ns/op
  * IOUtilsContentEqualsInputStreamsBenchmark.testFilePr118            avgt    
5      1578606.938 ▒      66980.718  ns/op
  * IOUtilsContentEqualsInputStreamsBenchmark.testFileRelease_2_8_0    avgt    
5      2439163.068 ▒     265765.294  ns/op
@@ -148,17 +147,17 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     @Benchmark
     public boolean[] testFileCurrent() throws IOException {
         final boolean[] res = new boolean[3];
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_B)) {
-            res[0] = IOUtils.contentEquals(inputStream1, inputStream1);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_B)) {
+            res[0] = IOUtils.contentEquals(input1, input1);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_A);) {
-            res[1] = IOUtils.contentEquals(inputStream1, inputStream2);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_A);) 
{
+            res[1] = IOUtils.contentEquals(input1, input2);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
-            res[2] = IOUtils.contentEquals(inputStream1, inputStream2);
+        try (InputStream input1 = 
getClass().getResourceAsStream(TEST_PATH_16K_A);
+            InputStream input2 = 
getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
+            res[2] = IOUtils.contentEquals(input1, input2);
         }
         return res;
     }
@@ -166,17 +165,17 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     @Benchmark
     public boolean[] testFilePr118() throws IOException {
         final boolean[] res = new boolean[3];
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_B)) {
-            res[0] = contentEqualsPr118(inputStream1, inputStream1);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_B)) {
+            res[0] = contentEqualsPr118(input1, input1);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_A);) {
-            res[1] = contentEqualsPr118(inputStream1, inputStream2);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_A)) {
+            res[1] = contentEqualsPr118(input1, input2);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
-            res[2] = contentEqualsPr118(inputStream1, inputStream2);
+        try (InputStream input1 = 
getClass().getResourceAsStream(TEST_PATH_16K_A);
+            InputStream input2 = 
getClass().getResourceAsStream(TEST_PATH_16K_A_COPY)) {
+            res[2] = contentEqualsPr118(input1, input2);
         }
         return res;
     }
@@ -184,17 +183,17 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     @Benchmark
     public boolean[] testFileRelease_2_8_0() throws IOException {
         final boolean[] res = new boolean[3];
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_B)) {
-            res[0] = contentEquals_release_2_8_0(inputStream1, inputStream1);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_B)) {
+            res[0] = contentEquals_release_2_8_0(input1, input1);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_A);) {
-            res[1] = contentEquals_release_2_8_0(inputStream1, inputStream2);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_A);) 
{
+            res[1] = contentEquals_release_2_8_0(input1, input2);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
-            res[2] = contentEquals_release_2_8_0(inputStream1, inputStream2);
+        try (InputStream input1 = 
getClass().getResourceAsStream(TEST_PATH_16K_A);
+            InputStream input2 = 
getClass().getResourceAsStream(TEST_PATH_16K_A_COPY)) {
+            res[2] = contentEquals_release_2_8_0(input1, input2);
         }
         return res;
     }
@@ -215,9 +214,9 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     public void testStringPr118(final Blackhole blackhole) throws IOException {
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < 5; j++) {
-                try (InputStream inputStream1 = 
IOUtils.toInputStream(STRINGS[i], DEFAULT_CHARSET);
-                    InputStream inputStream2 = 
IOUtils.toInputStream(STRINGS[j], DEFAULT_CHARSET)) {
-                    blackhole.consume(contentEqualsPr118(inputStream1, 
inputStream2));
+                try (InputStream input1 = IOUtils.toInputStream(STRINGS[i], 
DEFAULT_CHARSET);
+                    InputStream input2 = IOUtils.toInputStream(STRINGS[j], 
DEFAULT_CHARSET)) {
+                    blackhole.consume(contentEqualsPr118(input1, input2));
                 }
             }
         }
@@ -227,9 +226,9 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     public void testStringRelease_2_8_0(final Blackhole blackhole) throws 
IOException {
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < 5; j++) {
-                try (InputStream inputStream1 = 
IOUtils.toInputStream(STRINGS[i], DEFAULT_CHARSET);
-                    InputStream inputStream2 = 
IOUtils.toInputStream(STRINGS[j], DEFAULT_CHARSET)) {
-                    
blackhole.consume(contentEquals_release_2_8_0(inputStream1, inputStream2));
+                try (InputStream input1 = IOUtils.toInputStream(STRINGS[i], 
DEFAULT_CHARSET);
+                    InputStream input2 = IOUtils.toInputStream(STRINGS[j], 
DEFAULT_CHARSET)) {
+                    blackhole.consume(contentEquals_release_2_8_0(input1, 
input2));
                 }
             }
         }
diff --git 
a/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
 
b/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsReadersBenchmark.java
similarity index 56%
copy from 
src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
copy to 
src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsReadersBenchmark.java
index 971ca37..c49e3b0 100644
--- 
a/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsInputStreamsBenchmark.java
+++ 
b/src/test/java/org/apache/commons/io/jmh/IOUtilsContentEqualsReadersBenchmark.java
@@ -19,11 +19,13 @@ package org.apache.commons.io.jmh;
 
 import static org.apache.commons.io.IOUtils.DEFAULT_BUFFER_SIZE;
 import static org.apache.commons.io.IOUtils.EOF;
-import static org.apache.commons.io.IOUtils.buffer;
 
-import java.io.BufferedInputStream;
+import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
 import java.nio.charset.Charset;
 import java.util.concurrent.TimeUnit;
 
@@ -42,15 +44,14 @@ import org.openjdk.jmh.infra.Blackhole;
 
 /**
  * Test different implementations of {@link IOUtils#contentEquals(InputStream, 
InputStream)}.
- * 
+ *
  * <pre>
- * Benchmark                                                          Mode  
Cnt            Score            Error  Units
- * IOUtilsContentEqualsInputStreamsBenchmark.testFileCurrent          avgt    
5      1518342.821 ▒     201890.705  ns/op
- * IOUtilsContentEqualsInputStreamsBenchmark.testFilePr118            avgt    
5      1578606.938 ▒      66980.718  ns/op
- * IOUtilsContentEqualsInputStreamsBenchmark.testFileRelease_2_8_0    avgt    
5      2439163.068 ▒     265765.294  ns/op
- * IOUtilsContentEqualsInputStreamsBenchmark.testStringCurrent        avgt    
5  10389834700.000 ▒  330301175.219  ns/op
- * IOUtilsContentEqualsInputStreamsBenchmark.testStringPr118          avgt    
5  10890915400.000 ▒ 3251289634.067  ns/op
- * IOUtilsContentEqualsInputStreamsBenchmark.testStringRelease_2_8_0  avgt    
5  12522802960.000 ▒  111147669.527  ns/op
+ * IOUtilsContentEqualsReadersBenchmark.testFileCurrent               avgt    
5      1788514.748 ▒     725103.413  ns/op
+ * IOUtilsContentEqualsReadersBenchmark.testFilePr118                 avgt    
5      1786345.992 ▒     636923.719  ns/op
+ * IOUtilsContentEqualsReadersBenchmark.testFileRelease_2_8_0         avgt    
5      2113268.805 ▒     670263.275  ns/op
+ * IOUtilsContentEqualsReadersBenchmark.testStringCurrent             avgt    
5   4773229733.333 ▒  198489493.236  ns/op
+ * IOUtilsContentEqualsReadersBenchmark.testStringPr118               avgt    
5   1158805764.444 ▒   49390259.195  ns/op
+ * IOUtilsContentEqualsReadersBenchmark.testStringRelease_2_8_0       avgt    
5   4692235120.000 ▒  315543521.826  ns/op
  * </pre>
  */
 @BenchmarkMode(Mode.AverageTime)
@@ -59,7 +60,7 @@ import org.openjdk.jmh.infra.Blackhole;
 @Warmup(iterations = 5, time = 10, timeUnit = TimeUnit.SECONDS)
 @Measurement(iterations = 5, time = 10, timeUnit = TimeUnit.SECONDS)
 @Fork(value = 1, jvmArgs = {"-server"})
-public class IOUtilsContentEqualsInputStreamsBenchmark {
+public class IOUtilsContentEqualsReadersBenchmark {
 
     private static final String TEST_PATH_A = 
"/org/apache/commons/io/testfileBOM.xml";
     private static final String TEST_PATH_16K_A = 
"/org/apache/commons/io/abitmorethan16k.txt";
@@ -80,16 +81,16 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     static String SPECIAL_CASE_STRING_1 = 
StringUtils.repeat(StringUtils.repeat("cd", 1 << 24) + '\n', 2);
 
     @SuppressWarnings("resource")
-    public static boolean contentEquals_release_2_8_0(final InputStream 
input1, final InputStream input2)
-        throws IOException {
+    public static boolean contentEquals_release_2_8_0(final Reader input1, 
final Reader input2) throws IOException {
         if (input1 == input2) {
             return true;
         }
         if (input1 == null ^ input2 == null) {
             return false;
         }
-        final BufferedInputStream bufferedInput1 = buffer(input1);
-        final BufferedInputStream bufferedInput2 = buffer(input2);
+        final BufferedReader bufferedInput1 = IOUtils.toBufferedReader(input1);
+        final BufferedReader bufferedInput2 = IOUtils.toBufferedReader(input2);
+
         int ch = bufferedInput1.read();
         while (EOF != ch) {
             final int ch2 = bufferedInput2.read();
@@ -98,11 +99,11 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
             }
             ch = bufferedInput1.read();
         }
-        return bufferedInput2.read() == EOF;
 
+        return bufferedInput2.read() == EOF;
     }
 
-    public static boolean contentEqualsPr118(final InputStream input1, final 
InputStream input2) throws IOException {
+    public static boolean contentEqualsPr118(final Reader input1, final Reader 
input2) throws IOException {
         if (input1 == input2) {
             return true;
         }
@@ -110,8 +111,8 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
             return false;
         }
 
-        final byte[] array1 = new byte[DEFAULT_BUFFER_SIZE];
-        final byte[] array2 = new byte[DEFAULT_BUFFER_SIZE];
+        final char[] array1 = new char[DEFAULT_BUFFER_SIZE];
+        final char[] array2 = new char[DEFAULT_BUFFER_SIZE];
         int pos1;
         int pos2;
         int count1;
@@ -148,17 +149,17 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     @Benchmark
     public boolean[] testFileCurrent() throws IOException {
         final boolean[] res = new boolean[3];
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_B)) {
-            res[0] = IOUtils.contentEquals(inputStream1, inputStream1);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_B)) {
+            res[0] = IOUtils.contentEquals(input1, input1);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_A);) {
-            res[1] = IOUtils.contentEquals(inputStream1, inputStream2);
+        try (InputStream input1 = getClass().getResourceAsStream(TEST_PATH_A);
+            InputStream input2 = getClass().getResourceAsStream(TEST_PATH_A)) {
+            res[1] = IOUtils.contentEquals(input1, input2);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
-            res[2] = IOUtils.contentEquals(inputStream1, inputStream2);
+        try (InputStream input1 = 
getClass().getResourceAsStream(TEST_PATH_16K_A);
+            InputStream input2 = 
getClass().getResourceAsStream(TEST_PATH_16K_A_COPY)) {
+            res[2] = IOUtils.contentEquals(input1, input2);
         }
         return res;
     }
@@ -166,17 +167,17 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     @Benchmark
     public boolean[] testFilePr118() throws IOException {
         final boolean[] res = new boolean[3];
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_B)) {
-            res[0] = contentEqualsPr118(inputStream1, inputStream1);
+        try (Reader input1 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_A));
+            Reader input2 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_B))) {
+            res[0] = contentEqualsPr118(input1, input1);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_A);) {
-            res[1] = contentEqualsPr118(inputStream1, inputStream2);
+        try (Reader input1 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_A));
+            Reader input2 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_A))) {
+            res[1] = contentEqualsPr118(input1, input2);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
-            res[2] = contentEqualsPr118(inputStream1, inputStream2);
+        try (Reader input1 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_16K_A));
+            Reader input2 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_16K_A_COPY))) {
+            res[2] = contentEqualsPr118(input1, input2);
         }
         return res;
     }
@@ -184,17 +185,17 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     @Benchmark
     public boolean[] testFileRelease_2_8_0() throws IOException {
         final boolean[] res = new boolean[3];
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_B)) {
-            res[0] = contentEquals_release_2_8_0(inputStream1, inputStream1);
+        try (Reader input1 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_A));
+            Reader input2 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_B))) {
+            res[0] = contentEquals_release_2_8_0(input1, input1);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_A);) {
-            res[1] = contentEquals_release_2_8_0(inputStream1, inputStream2);
+        try (Reader input1 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_A));
+            Reader input2 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_A))) {
+            res[1] = contentEquals_release_2_8_0(input1, input2);
         }
-        try (InputStream inputStream1 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A);
-            InputStream inputStream2 = 
this.getClass().getResourceAsStream(TEST_PATH_16K_A_COPY);) {
-            res[2] = contentEquals_release_2_8_0(inputStream1, inputStream2);
+        try (Reader input1 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_16K_A));
+            Reader input2 = new 
InputStreamReader(getClass().getResourceAsStream(TEST_PATH_16K_A_COPY))) {
+            res[2] = contentEquals_release_2_8_0(input1, input2);
         }
         return res;
     }
@@ -203,9 +204,9 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     public void testStringCurrent(final Blackhole blackhole) throws 
IOException {
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < 5; j++) {
-                try (InputStream inputReader1 = 
IOUtils.toInputStream(STRINGS[i], DEFAULT_CHARSET);
-                    InputStream inputReader2 = 
IOUtils.toInputStream(STRINGS[j], DEFAULT_CHARSET)) {
-                    blackhole.consume(IOUtils.contentEquals(inputReader1, 
inputReader2));
+                try (StringReader input1 = new StringReader(STRINGS[i]);
+                    StringReader input2 = new StringReader(STRINGS[j])) {
+                    blackhole.consume(IOUtils.contentEquals(input1, input2));
                 }
             }
         }
@@ -215,9 +216,9 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     public void testStringPr118(final Blackhole blackhole) throws IOException {
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < 5; j++) {
-                try (InputStream inputStream1 = 
IOUtils.toInputStream(STRINGS[i], DEFAULT_CHARSET);
-                    InputStream inputStream2 = 
IOUtils.toInputStream(STRINGS[j], DEFAULT_CHARSET)) {
-                    blackhole.consume(contentEqualsPr118(inputStream1, 
inputStream2));
+                try (StringReader input1 = new StringReader(STRINGS[i]);
+                    StringReader input2 = new StringReader(STRINGS[j])) {
+                    blackhole.consume(contentEqualsPr118(input1, input2));
                 }
             }
         }
@@ -227,9 +228,9 @@ public class IOUtilsContentEqualsInputStreamsBenchmark {
     public void testStringRelease_2_8_0(final Blackhole blackhole) throws 
IOException {
         for (int i = 0; i < 5; i++) {
             for (int j = 0; j < 5; j++) {
-                try (InputStream inputStream1 = 
IOUtils.toInputStream(STRINGS[i], DEFAULT_CHARSET);
-                    InputStream inputStream2 = 
IOUtils.toInputStream(STRINGS[j], DEFAULT_CHARSET)) {
-                    
blackhole.consume(contentEquals_release_2_8_0(inputStream1, inputStream2));
+                try (StringReader input1 = new StringReader(STRINGS[i]);
+                    StringReader input2 = new StringReader(STRINGS[j])) {
+                    blackhole.consume(contentEquals_release_2_8_0(input1, 
input2));
                 }
             }
         }

Reply via email to