package cc.blynk.utils;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.infra.BenchmarkParams;
import java.util.concurrent.TimeUnit;
/**
* The Blynk Project.
* Created by Dmitriy Dumanskiy.
* Created on 16.01.16.
*/
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@State(Scope.Thread)
@Fork(1)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
public class StringUtilPerfTest {
/*
* Should your benchmark require returning multiple results, you have to
* consider two options (detailed below).
*
* NOTE: If you are only producing a single result, it is more readable to
* use the implicit return, as in JMHSample_08_DeadCode. Do not make your benchmark
* code less readable with explicit Blackholes!
*/
public String vw_1;
public String aw_1_2;
public String vw_99_900;
public String vw_99_22222;
public String aw_100_900;
public String aw_10_long_text;
@Setup
public void setup(BenchmarkParams params) {
vw_1 = "vw 1".replaceAll(" ", "\0");
aw_1_2 = "aw 1 2".replaceAll(" ", "\0");
vw_99_900 = "vw 99 900".replaceAll(" ", "\0");
vw_99_22222 = "vw 99 22222.32".replaceAll(" ", "\0");
aw_100_900 = "aw 100 200".replaceAll(" ", "\0");
aw_10_long_text = "aw 10 dsfdsfdsfdsfdsfdsfdsfdsfd gfdsgdfg dfg dfg dfsgdf gdfs gdfsg dfsg dfsg dfs".replaceAll(" ", "\0");
}
@Benchmark
public String[] split3_vw_1() {
return vw_1.split("\0", 3);
}
@Benchmark
public String[] customSplit3_vw_1() {
return StringUtils.split3(vw_1);
}
@Benchmark
public String[] split3_aw_1_2() {
return aw_1_2.split("\0", 3);
}
@Benchmark
public String[] customSplit3_aw_1_2() {
return StringUtils.split3(aw_1_2);
}
@Benchmark
public String[] split3_vw_99_900() {
return vw_99_900.split("\0", 3);
}
@Benchmark
public String[] customSplit3_vw_99_900() {
return StringUtils.split3(vw_99_900);
}
@Benchmark
public String[] split3_vw_99_22222() {
return vw_99_22222.split("\0", 3);
}
@Benchmark
public String[] customSplit3_vw_99_22222() {
return StringUtils.split3(vw_99_22222);
}
@Benchmark
public String[] split3_aw_100_900() {
return aw_100_900.split("\0", 3);
}
@Benchmark
public String[] customSplit3_aw_100_900() {
return StringUtils.split3(aw_100_900);
}
@Benchmark
public String[] split3_aw_10_long_text() {
return aw_10_long_text.split("\0", 3);
}
@Benchmark
public String[] customSplit3_aw_10_long_text() {
return StringUtils.split3(aw_10_long_text);
}
}