Path: blob/master/test/micro/org/openjdk/bench/java/util/ArraysMismatch.java
41161 views
/*1* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/22package org.openjdk.bench.java.util;2324import java.security.InvalidAlgorithmParameterException;25import java.security.InvalidKeyException;26import java.security.NoSuchAlgorithmException;27import java.security.spec.InvalidParameterSpecException;28import java.util.Arrays;29import java.util.concurrent.TimeUnit;30import javax.crypto.BadPaddingException;31import javax.crypto.IllegalBlockSizeException;32import javax.crypto.NoSuchPaddingException;33import org.openjdk.jmh.annotations.Benchmark;34import org.openjdk.jmh.annotations.BenchmarkMode;35import org.openjdk.jmh.annotations.Measurement;36import org.openjdk.jmh.annotations.Mode;37import org.openjdk.jmh.annotations.OutputTimeUnit;38import org.openjdk.jmh.annotations.Param;39import org.openjdk.jmh.annotations.Scope;40import org.openjdk.jmh.annotations.Setup;41import org.openjdk.jmh.annotations.State;42import org.openjdk.jmh.annotations.Warmup;4344@BenchmarkMode(Mode.AverageTime)45@OutputTimeUnit(TimeUnit.NANOSECONDS)46@State(Scope.Thread)47public abstract class ArraysMismatch {4849@Param({"90", "800"})50private static int size;5152static final byte fill = 99;53static final byte mismatch = -1;5455int leftStartRange;56int leftEndRange;57int rightStartRange;58int rightEndRange;5960@Setup61public void setup() {62leftStartRange = size / 4;63leftEndRange = size - size / 4;64rightStartRange = size / 4 + 10;65rightEndRange = size - size / 4 + 10;66specificSetup();67}6869abstract void specificSetup();7071public static class Byte extends ArraysMismatch {7273byte[] left;74byte[] right_startMismatch;75byte[] right_midMismatch;76byte[] right_endMismatch;77byte[] right_matches;7879public void specificSetup() {80left = new byte[size];81Arrays.fill(left, (byte) fill);82right_startMismatch = Arrays.copyOf(left, left.length);83right_startMismatch[2] = (byte) mismatch;84right_midMismatch = Arrays.copyOf(left, left.length);85right_midMismatch[size / 2] = (byte) mismatch;86right_endMismatch = Arrays.copyOf(left, left.length);87right_endMismatch[size - 5] = (byte) mismatch;88right_matches = Arrays.copyOf(left, left.length);89}9091@Benchmark92@Warmup(iterations = 3)93@Measurement(iterations = 3)94public int matches() {95return Arrays.mismatch(left, right_matches);96}9798@Benchmark99@Warmup(iterations = 3)100@Measurement(iterations = 3)101public int differentSubrangeMatches() {102return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);103}104105@Benchmark106@Warmup(iterations = 3)107@Measurement(iterations = 3)108public int mismatchEnd() {109return Arrays.mismatch(left, right_endMismatch);110}111112@Benchmark113@Warmup(iterations = 3)114@Measurement(iterations = 3)115public int mismatchMid() {116return Arrays.mismatch(left, right_midMismatch);117}118119@Benchmark120@Warmup(iterations = 3)121@Measurement(iterations = 3)122public int mismatchStart() {123return Arrays.mismatch(left, right_startMismatch);124}125}126127public static class Char extends ArraysMismatch {128129char[] left;130char[] right_startMismatch;131char[] right_midMismatch;132char[] right_endMismatch;133char[] right_matches;134135public void specificSetup() {136left = new char[size];137Arrays.fill(left, (char) fill);138right_startMismatch = Arrays.copyOf(left, left.length);139right_startMismatch[2] = (char) mismatch;140right_midMismatch = Arrays.copyOf(left, left.length);141right_midMismatch[size / 2] = (char) mismatch;142right_endMismatch = Arrays.copyOf(left, left.length);143right_endMismatch[size - 5] = (char) mismatch;144right_matches = Arrays.copyOf(left, left.length);145}146147@Benchmark148@Warmup(iterations = 3)149@Measurement(iterations = 3)150public int matches() {151return Arrays.mismatch(left, right_matches);152}153154@Benchmark155@Warmup(iterations = 3)156@Measurement(iterations = 3)157public int differentSubrangeMatches() {158return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);159}160161@Benchmark162@Warmup(iterations = 3)163@Measurement(iterations = 3)164public int mismatchEnd() {165return Arrays.mismatch(left, right_endMismatch);166}167168@Benchmark169@Warmup(iterations = 3)170@Measurement(iterations = 3)171public int mismatchMid() {172return Arrays.mismatch(left, right_midMismatch);173}174175@Benchmark176@Warmup(iterations = 3)177@Measurement(iterations = 3)178public int mismatchStart() {179return Arrays.mismatch(left, right_startMismatch);180}181}182183public static class Short extends ArraysMismatch {184185short[] left;186short[] right_startMismatch;187short[] right_midMismatch;188short[] right_endMismatch;189short[] right_matches;190191public void specificSetup() {192left = new short[size];193Arrays.fill(left, (short) fill);194right_startMismatch = Arrays.copyOf(left, left.length);195right_startMismatch[2] = (short) mismatch;196right_midMismatch = Arrays.copyOf(left, left.length);197right_midMismatch[size / 2] = (short) mismatch;198right_endMismatch = Arrays.copyOf(left, left.length);199right_endMismatch[size - 5] = (short) mismatch;200right_matches = Arrays.copyOf(left, left.length);201}202203@Benchmark204@Warmup(iterations = 3)205@Measurement(iterations = 3)206public int matches() {207return Arrays.mismatch(left, right_matches);208}209210@Benchmark211@Warmup(iterations = 3)212@Measurement(iterations = 3)213public int differentSubrangeMatches() {214return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);215}216217@Benchmark218@Warmup(iterations = 3)219@Measurement(iterations = 3)220public int mismatchEnd() {221return Arrays.mismatch(left, right_endMismatch);222}223224@Benchmark225@Warmup(iterations = 3)226@Measurement(iterations = 3)227public int mismatchMid() {228return Arrays.mismatch(left, right_midMismatch);229}230231@Benchmark232@Warmup(iterations = 3)233@Measurement(iterations = 3)234public int mismatchStart() {235return Arrays.mismatch(left, right_startMismatch);236}237}238239public static class Int extends ArraysMismatch {240241int[] left;242int[] right_startMismatch;243int[] right_midMismatch;244int[] right_endMismatch;245int[] right_matches;246247public void specificSetup() {248left = new int[size];249Arrays.fill(left, (int) fill);250right_startMismatch = Arrays.copyOf(left, left.length);251right_startMismatch[2] = (int) mismatch;252right_midMismatch = Arrays.copyOf(left, left.length);253right_midMismatch[size / 2] = (int) mismatch;254right_endMismatch = Arrays.copyOf(left, left.length);255right_endMismatch[size - 5] = (int) mismatch;256right_matches = Arrays.copyOf(left, left.length);257}258259@Benchmark260@Warmup(iterations = 3)261@Measurement(iterations = 3)262public int matches() {263return Arrays.mismatch(left, right_matches);264}265266@Benchmark267@Warmup(iterations = 3)268@Measurement(iterations = 3)269public int differentSubrangeMatches() {270return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);271}272273@Benchmark274@Warmup(iterations = 3)275@Measurement(iterations = 3)276public int mismatchEnd() {277return Arrays.mismatch(left, right_endMismatch);278}279280@Benchmark281@Warmup(iterations = 3)282@Measurement(iterations = 3)283public int mismatchMid() {284return Arrays.mismatch(left, right_midMismatch);285}286287@Benchmark288@Warmup(iterations = 3)289@Measurement(iterations = 3)290public int mismatchStart() {291return Arrays.mismatch(left, right_startMismatch);292}293}294295public static class Long extends ArraysMismatch {296297long[] left;298long[] right_startMismatch;299long[] right_midMismatch;300long[] right_endMismatch;301long[] right_matches;302303public void specificSetup() {304left = new long[size];305Arrays.fill(left, (long) fill);306right_startMismatch = Arrays.copyOf(left, left.length);307right_startMismatch[2] = (long) mismatch;308right_midMismatch = Arrays.copyOf(left, left.length);309right_midMismatch[size / 2] = (long) mismatch;310right_endMismatch = Arrays.copyOf(left, left.length);311right_endMismatch[size - 5] = (long) mismatch;312right_matches = Arrays.copyOf(left, left.length);313}314315@Benchmark316@Warmup(iterations = 3)317@Measurement(iterations = 3)318public int matches() {319return Arrays.mismatch(left, right_matches);320}321322@Benchmark323@Warmup(iterations = 3)324@Measurement(iterations = 3)325public int differentSubrangeMatches() {326return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);327}328329@Benchmark330@Warmup(iterations = 3)331@Measurement(iterations = 3)332public int mismatchEnd() {333return Arrays.mismatch(left, right_endMismatch);334}335336@Benchmark337@Warmup(iterations = 3)338@Measurement(iterations = 3)339public int mismatchMid() {340return Arrays.mismatch(left, right_midMismatch);341}342343@Benchmark344@Warmup(iterations = 3)345@Measurement(iterations = 3)346public int mismatchStart() {347return Arrays.mismatch(left, right_startMismatch);348}349}350351public static class Float extends ArraysMismatch {352353float[] left;354float[] right_startMismatch;355float[] right_midMismatch;356float[] right_endMismatch;357float[] right_matches;358359public void specificSetup() {360left = new float[size];361Arrays.fill(left, (float) fill);362right_startMismatch = Arrays.copyOf(left, left.length);363right_startMismatch[2] = (float) mismatch;364right_midMismatch = Arrays.copyOf(left, left.length);365right_midMismatch[size / 2] = (float) mismatch;366right_endMismatch = Arrays.copyOf(left, left.length);367right_endMismatch[size - 5] = (float) mismatch;368right_matches = Arrays.copyOf(left, left.length);369}370371@Benchmark372@Warmup(iterations = 3)373@Measurement(iterations = 3)374public int matches() {375return Arrays.mismatch(left, right_matches);376}377378@Benchmark379@Warmup(iterations = 3)380@Measurement(iterations = 3)381public int differentSubrangeMatches() {382return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);383}384385@Benchmark386@Warmup(iterations = 3)387@Measurement(iterations = 3)388public int mismatchEnd() {389return Arrays.mismatch(left, right_endMismatch);390}391392@Benchmark393@Warmup(iterations = 3)394@Measurement(iterations = 3)395public int mismatchMid() {396return Arrays.mismatch(left, right_midMismatch);397}398399@Benchmark400@Warmup(iterations = 3)401@Measurement(iterations = 3)402public int mismatchStart() {403return Arrays.mismatch(left, right_startMismatch);404}405}406407public static class Double extends ArraysMismatch {408409double[] left;410double[] right_startMismatch;411double[] right_midMismatch;412double[] right_endMismatch;413double[] right_matches;414415public void specificSetup() {416left = new double[size];417Arrays.fill(left, (double) fill);418right_startMismatch = Arrays.copyOf(left, left.length);419right_startMismatch[2] = (double) mismatch;420right_midMismatch = Arrays.copyOf(left, left.length);421right_midMismatch[size / 2] = (double) mismatch;422right_endMismatch = Arrays.copyOf(left, left.length);423right_endMismatch[size - 5] = (double) mismatch;424right_matches = Arrays.copyOf(left, left.length);425}426427@Benchmark428@Warmup(iterations = 3)429@Measurement(iterations = 3)430public int matches() {431return Arrays.mismatch(left, right_matches);432}433434@Benchmark435@Warmup(iterations = 3)436@Measurement(iterations = 3)437public int differentSubrangeMatches() {438return Arrays.mismatch(left, leftStartRange, leftEndRange, right_matches, rightStartRange, rightEndRange);439}440441@Benchmark442@Warmup(iterations = 3)443@Measurement(iterations = 3)444public int mismatchEnd() {445return Arrays.mismatch(left, right_endMismatch);446}447448@Benchmark449@Warmup(iterations = 3)450@Measurement(iterations = 3)451public int mismatchMid() {452return Arrays.mismatch(left, right_midMismatch);453}454455@Benchmark456@Warmup(iterations = 3)457@Measurement(iterations = 3)458public int mismatchStart() {459return Arrays.mismatch(left, right_startMismatch);460}461}462463}464465466