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));
}
}
}