aboutsummaryrefslogtreecommitdiffstats
path: root/guava-tests/benchmark/com/google/common/base/JoinerBenchmark.java
diff options
context:
space:
mode:
Diffstat (limited to 'guava-tests/benchmark/com/google/common/base/JoinerBenchmark.java')
-rw-r--r--guava-tests/benchmark/com/google/common/base/JoinerBenchmark.java179
1 files changed, 0 insertions, 179 deletions
diff --git a/guava-tests/benchmark/com/google/common/base/JoinerBenchmark.java b/guava-tests/benchmark/com/google/common/base/JoinerBenchmark.java
deleted file mode 100644
index 1e50408..0000000
--- a/guava-tests/benchmark/com/google/common/base/JoinerBenchmark.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2012 The Guava Authors
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.google.common.base;
-
-import com.google.caliper.Param;
-import com.google.caliper.Runner;
-import com.google.caliper.SimpleBenchmark;
-
-import java.util.Arrays;
-import java.util.Iterator;
-
-/**
- * Benchmarks {@link Joiner} against some common implementations of delimiter-based
- * string joining.
- *
- * @author Adomas Paltanavicius
- */
-public class JoinerBenchmark extends SimpleBenchmark {
-
- private static final String DELIMITER_STRING = ",";
- private static final char DELIMITER_CHARACTER = ',';
-
- private static final Joiner JOINER_ON_STRING = Joiner.on(DELIMITER_STRING);
- private static final Joiner JOINER_ON_CHARACTER = Joiner.on(DELIMITER_CHARACTER);
-
- @Param({"3", "30", "300"}) int count;
- @Param({"0", "1", "16", "32", "100"}) int componentLength;
-
- private Iterable<String> components;
-
- @Override
- protected void setUp() {
- String component = Strings.repeat("a", componentLength);
- String[] raw = new String[count];
- Arrays.fill(raw, component);
- components = Arrays.asList(raw);
- }
-
- /**
- * {@link Joiner} with a string delimiter.
- */
- public int timeJoinerWithStringDelimiter(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- dummy ^= JOINER_ON_STRING.join(components).length();
- }
- return dummy;
- }
-
- /**
- * {@link Joiner} with a character delimiter.
- */
- public int timeJoinerWithCharacterDelimiter(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- dummy ^= JOINER_ON_CHARACTER.join(components).length();
- }
- return dummy;
- }
-
- /**
- * Mimics what the {@link Joiner} class does internally when no extra options like
- * ignoring {@code null} values are used.
- */
- public int timeJoinerInlined(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- StringBuilder sb = new StringBuilder();
- Iterator<String> iterator = components.iterator();
- if (iterator.hasNext()) {
- sb.append(iterator.next().toString());
- while (iterator.hasNext()) {
- sb.append(DELIMITER_STRING);
- sb.append(iterator.next());
- }
- }
- dummy ^= sb.toString().length();
- }
- return dummy;
- }
-
- /**
- * Only appends delimiter if the accumulated string is non-empty.
- * Note: this isn't a candidate implementation for Joiner since it fails on leading
- * empty components.
- */
- public int timeStringBuilderIsEmpty(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- StringBuilder sb = new StringBuilder();
- for (String comp : components) {
- if (sb.length() > 0) {
- sb.append(DELIMITER_STRING);
- }
- sb.append(comp);
- }
- dummy ^= sb.toString().length();
- }
- return dummy;
- }
-
- /**
- * Similar to the above, but keeps a boolean flag rather than checking for the string
- * accumulated so far being empty. As a result, it does not have the above-mentioned bug.
- */
- public int timeBooleanIfFirst(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- StringBuilder sb = new StringBuilder();
- boolean append = false;
- for (String comp : components) {
- if (append) {
- sb.append(DELIMITER_STRING);
- }
- sb.append(comp);
- append = true;
- }
- dummy ^= sb.toString().length();
- }
- return dummy;
- }
-
- /**
- * Starts with an empty delimiter and changes to the desired value at the end of the
- * iteration.
- */
- public int timeAssignDelimiter(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- StringBuilder sb = new StringBuilder();
- String delim = "";
- for (String comp : components) {
- sb.append(delim);
- sb.append(comp);
- delim = DELIMITER_STRING;
- }
- dummy ^= sb.toString().length();
- }
- return dummy;
- }
-
- /**
- * Always append the delimiter after the component, and in the very end shortens the buffer
- * to get rid of the extra trailing delimiter.
- */
- public int timeAlwaysAppendThenBackUp(int reps) {
- int dummy = 0;
- for (int i = 0; i < reps; i++) {
- StringBuilder sb = new StringBuilder();
- for (String comp : components) {
- sb.append(comp);
- sb.append(DELIMITER_STRING);
- }
- if (sb.length() > 0) {
- sb.setLength(sb.length() - DELIMITER_STRING.length());
- }
- dummy ^= sb.toString().length();
- }
- return dummy;
- }
-
- public static void main(String[] args) {
- Runner.main(JoinerBenchmark.class, args);
- }
-}