jdk-24/test/jdk/java/lang/StringBuffer/ECoreIndexOf.java
2024-11-22 14:48:39 +00:00

1382 lines
54 KiB
Java

/*
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/* @test
* @bug 8320448
* @summary Test indexOf and lastIndexOf
* @run main/othervm -Xbatch -XX:-TieredCompilation -XX:CompileCommand=dontinline,ECoreIndexOf.indexOfKernel ECoreIndexOf
* @run main/othervm -Xbatch -XX:CompileCommand=dontinline,ECoreIndexOf.indexOfKernel ECoreIndexOf
* @key randomness
*/
/* @test
* @bug 8320448
* @summary Test indexOf and lastIndexOf
* @requires vm.cpu.features ~= ".*avx2.*"
* @requires vm.compiler2.enabled
* @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+EnableX86ECoreOpts -XX:-CheckJNICalls -XX:UseAVX=2 -Xbatch -XX:-TieredCompilation -XX:CompileCommand=dontinline,ECoreIndexOf.indexOfKernel ECoreIndexOf
* @key randomness
*/
import java.nio.charset.StandardCharsets;
import java.util.Random;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.nio.charset.Charset;
import java.lang.Math;
// @ECoreIndexOf(singleThreaded=true)
public class ECoreIndexOf {
static Random generator;
private static boolean failure = false;
static char[] haystack = new char[128];
static char[] haystack_16 = new char[128];
static boolean verbose = false;
static boolean success = true;
static Map<Charset, String> titles = new HashMap<Charset, String>();
static Random rng = new Random(1999);
public static void main(String[] args) throws Exception {
int foo = 0;
String testName = "ECoreIndexOf";
generator = new Random();
long seed = generator.nextLong();
generator.setSeed(seed);
System.out.println("Seed set to "+ seed);
/////////////////////////// WARM-UP //////////////////////////
for (int i = 0; i < 20000; i++) {
char c = 65;
char c16 = 0x1ed;
StringBuffer sb = new StringBuffer("a");
StringBuffer sb16 = new StringBuffer("\u01fe");
foo += indexOfKernel("\u01fe", "a");
foo += indexOfKernel("\u01fe", "a", 0);
foo += indexOfKernel("\u01fe", "\u01ff");
foo += indexOfKernel("\u01fe", "\u01ff", 0);
foo += indexOfKernel("a", "a");
foo += indexOfKernel("a", "a", 0);
foo += indexOfKernel("a", "\u01ff");
foo += indexOfKernel("a", "\u01ff", 0);
foo += indexOfKernel("\u01fe", c);
foo += indexOfKernel("\u01fe", c, 0);
foo += indexOfKernel("\u01fe", c16);
foo += indexOfKernel("\u01fe", c16, 0);
foo += indexOfKernel("a", c);
foo += indexOfKernel("a", c, 0);
foo += indexOfKernel("a", c16);
foo += indexOfKernel("a", c16, 0);
foo += indexOfKernel(sb16, c);
foo += indexOfKernel(sb16, c, 0);
foo += indexOfKernel(sb16, c16);
foo += indexOfKernel(sb16, c16, 0);
foo += indexOfKernel(sb, c);
foo += indexOfKernel(sb, c, 0);
foo += indexOfKernel(sb, c16);
foo += indexOfKernel(sb, c16, 0);
}
///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
String[] decorators = {"", " (same char)"};
Charset[] charSets = {StandardCharsets.ISO_8859_1, StandardCharsets.UTF_16};
boolean[] truefalse = {true, false};
titles.put(StandardCharsets.ISO_8859_1, "L");
titles.put(StandardCharsets.UTF_16, "U");
for (int xxy = 0; xxy < 2; xxy++) { // Run at least twice to ensure stub called
for (int i = 0; i < 128; i++) {
haystack[i] = (char) i;
}
haystack_16[0] = '\u0000'; // (char) (23 + 256);
for (int i = 1; i < 128; i++) {
haystack_16[i] = (char) (i);
}
simpleTest();
compareIndexOfLastIndexOf();
compareStringStringBuffer();
StringIndexof();
StringIndexofChar();
StringIndexofHuge();
for (String decorator : decorators) {
for (Charset csHaystack : charSets) {
for (Charset csNeedle : charSets) {
System.out.println("Testing " + titles.get(csHaystack) + titles.get(csNeedle) + decorator);
for (boolean useOffset : truefalse) {
for (boolean useBuffer : truefalse) {
exhaustive(useOffset, useBuffer, csHaystack, csNeedle);
}
}
}
}
for (int i = 0; i < 128; i++) {
haystack[i] = (char) 'a';
}
for (int i = 0; i < 128; i++) {
haystack_16[i] = (char) ('a' + 256);
}
}
}
System.out.println(testName + " complete.");
if (failure)
throw new RuntimeException("One or more failures.");
}
private static void report(String testName, int failCount) {
System.err.println(testName + ": " +
(failCount == 0 ? "Passed" : "Failed(" + failCount + ")"));
if (failCount > 0)
failure = true;
}
private static String generateTestString(int min, int max) {
StringBuffer aNewString = new StringBuffer(120);
int aNewLength = getRandomIndex(min, max);
for (int y = 0; y < aNewLength; y++) {
int achar = generator.nextInt(30) + 30;
char test = (char) (achar);
aNewString.append(test);
}
return aNewString.toString();
}
private static String makeRndString(boolean isUtf16, int length) {
StringBuilder sb = new StringBuilder(length);
if (length > 0) {
sb.append(isUtf16 ? '\u2026' : 'b'); // ...
for (int i = 1; i < length - 1; i++) {
sb.append((char) ('b' + rng.nextInt(26)));
}
sb.append(rng.nextInt(3) >= 1 ? 'a' : 'b');// 66.6% of time 'a' is in string
}
return sb.toString();
}
private static int indexOfKernel(String haystack, String needle) {
return haystack.indexOf(needle);
}
private static int indexOfKernel(String haystack, String needle, int offset) {
return haystack.indexOf(needle, offset);
}
private static int indexOfKernel(StringBuffer haystack, String needle) {
return haystack.indexOf(needle);
}
private static int indexOfKernel(StringBuffer haystack, char cneedle) {
String needle = String.valueOf(cneedle);
return haystack.indexOf(needle);
}
private static int indexOfKernel(StringBuffer haystack, String needle, int offset) {
return haystack.indexOf(needle, offset);
}
private static int indexOfKernel(StringBuffer haystack, char cneedle, int offset) {
String needle = String.valueOf(cneedle);
return haystack.indexOf(needle, offset);
}
private static int indexOfKernel(String haystack, char needle) {
return haystack.indexOf(needle);
}
private static int indexOfKernel(String haystack, char needle, int offset) {
return haystack.indexOf(needle, offset);
}
private static void printStringBytes(byte[] bytes) {
System.err.println(" bytes.len=" + bytes.length);
for (byte b : bytes) {
System.err.print(String.format("0x%02x ", b));
}
System.err.println("");
}
private static int getRandomIndex(int constraint1, int constraint2) {
int range = constraint2 - constraint1;
int x = generator.nextInt(range);
return constraint1 + x;
}
private static int naiveFind(String haystack, String needle) {
return naiveFind(haystack, needle, 0);
}
private static int naiveFind(String haystack, char needle) {
return naiveFind(haystack, needle, 0);
}
private static int naiveFind(String haystack, String needle, int offset) {
int x = offset;
int len = haystack.length() - offset;
if (needle.length() == 0)
return offset;
if (needle.length() > len)
return -1;
int hsndx = 0;
int nndx = 0;
for (int xx = 0; xx < offset; xx++) {
hsndx += Character.charCount(haystack.codePointAt(hsndx));
}
for (x = offset; x < haystack.length() - needle.length() + 1; x++) {
if (haystack.codePointAt(hsndx) == needle.codePointAt(0)) {
nndx = Character.charCount(needle.codePointAt(0));
int hsndx_tmp = hsndx + Character.charCount(haystack.codePointAt(hsndx));
while (nndx < needle.length()) {
if (haystack.codePointAt(hsndx_tmp) != needle.codePointAt(nndx)) {
break;
}
hsndx_tmp += Character.charCount(haystack.codePointAt(hsndx_tmp));
nndx += Character.charCount(needle.codePointAt(nndx));
}
if (nndx == needle.length()) {
return x;
}
}
hsndx += Character.charCount(haystack.codePointAt(hsndx));
}
return -1;
}
private static int naiveFind(String haystack, char cneedle, int offset) {
int x = offset;
int len = haystack.length() - offset;
String needle = String.valueOf(cneedle);
if (len == 0)
return -1;
int hsndx = 0;
for (int xx = 0; xx < offset; xx++) {
hsndx += Character.charCount(haystack.codePointAt(hsndx));
}
for (x = offset; x < haystack.length(); x++) {
if (haystack.codePointAt(hsndx) == needle.codePointAt(0)) {
return x;
}
hsndx += Character.charCount(haystack.codePointAt(hsndx));
}
return -1;
}
private static void exhaustive(boolean useOffset, boolean useStringBuffer, Charset hs_charset,
Charset needleCharset) {
int result = 0;
int midresult = 0;
int endresult = 0;
int l_offset = 0;
int failCount = 0;
String thisTest = titles.get(hs_charset) + titles.get(needleCharset) + (useOffset ? " w/offset" : "") + (useStringBuffer ? " StringBuffer" : "");
for (int needleSize = 0; needleSize < 128; needleSize++) {
for (int haystackSize = 0; haystackSize < 128; haystackSize++) {
for (l_offset = 0; l_offset <= haystackSize; l_offset++) {
String needle = new String(Arrays.copyOfRange(
(needleCharset == StandardCharsets.UTF_16) ? haystack_16 : haystack, l_offset, l_offset + needleSize));
int hsSize = (haystackSize - l_offset) >= 0 ? haystackSize - l_offset : 0;
int midStart = Math.max((hsSize / 2) - (needleSize / 2), 0);
int endStart = (hsSize > needleSize) ? hsSize - needleSize : 0;
String midNeedle = new String(
Arrays.copyOfRange((needleCharset == StandardCharsets.UTF_16) ? haystack_16 : haystack,
midStart + l_offset, midStart + needleSize + l_offset));
String endNeedle = new String(
Arrays.copyOfRange((needleCharset == StandardCharsets.UTF_16) ? haystack_16 : haystack,
endStart + l_offset, endStart + needleSize + l_offset));
String shs = new String(
Arrays.copyOfRange((hs_charset == StandardCharsets.UTF_16) ? haystack_16 : haystack, 0, haystackSize));
// Truncate needles to correct lengths
if (l_offset + needleSize > haystack.length + 1) {
needle = needle.substring(0, needleSize);
midNeedle = midNeedle.substring(0, needleSize);
endNeedle = endNeedle.substring(0, needleSize);
}
if (!success && needleSize > 1) {
needle = needle.substring(0, needle.length() - 1) + (char) ((int) (needle.charAt(needle.length() - 2) + 1));
midNeedle = midNeedle.substring(0, midNeedle.length() - 1)
+ (char) ((int) (midNeedle.charAt(midNeedle.length() - 2) + 1));
endNeedle = endNeedle.substring(0, endNeedle.length() - 1)
+ (char) ((int) (endNeedle.charAt(endNeedle.length() - 2) + 1));
}
StringBuffer hs = new StringBuffer(shs.length());
hs.append(shs);
if (!shs.equals(hs.toString()))
throw new RuntimeException("Initial equality failure");
if (useStringBuffer) {
result = indexOfKernel(hs, needle, l_offset);
midresult = indexOfKernel(hs, midNeedle, l_offset);
endresult = indexOfKernel(hs, endNeedle, l_offset);
} else {
result = indexOfKernel(shs, needle, l_offset);
midresult = indexOfKernel(shs, midNeedle, l_offset);
endresult = indexOfKernel(shs, endNeedle, l_offset);
}
int nResult = naiveFind(hs.toString(), needle, l_offset);
int midnResult = naiveFind(hs.toString(), midNeedle, l_offset);
int endnResult = naiveFind(hs.toString(), endNeedle, l_offset);
if (result != nResult) {
failCount++;
System.err.println("useOffset=" + useOffset + ", useStringBuffer=" + useStringBuffer);
System.err.print("Haystack=");
printStringBytes(shs.getBytes(hs_charset));
System.err.print("Needle=");
printStringBytes(needle.getBytes(needleCharset));
System.err.println("l_offset=" + l_offset);
System.err.println("haystackLen=" + haystackSize + " needleLen=" + needleSize +
" result=" + result + " nResult=" + nResult);
System.err.println("");
}
// badResults = success ? ((midnResult == -1) || (midresult == -1)) :
// ((midnResult != -1) || (midresult != -1));
if ((midresult != midnResult)) {
failCount++;
System.err.println("useOffset=" + useOffset + ", useStringBuffer=" + useStringBuffer);
System.err.print("Haystack=");
printStringBytes(shs.getBytes(hs_charset));
System.err.print("Needle=");
printStringBytes(midNeedle.getBytes(needleCharset));
System.err.println("l_offset=" + l_offset);
System.err.println("haystackLen=" + haystackSize + " needleLen=" + needleSize +
" midresult=" + midresult + " midnResult=" + midnResult);
System.err.println("");
}
// badResults = success ? ((endnResult == -1) || (endresult == -1)) :
// ((endnResult != -1) || (endresult != -1));
if ((endresult != endnResult)) {
failCount++;
System.err.println("useOffset=" + useOffset + ", useStringBuffer=" + useStringBuffer);
System.err.print("Haystack=");
printStringBytes(shs.getBytes(hs_charset));
System.err.print("Needle=");
printStringBytes(endNeedle.getBytes(needleCharset));
System.err.println("l_offset=" + l_offset);
System.err.println("haystackLen=" + haystackSize + " needleLen=" + needleSize +
" endresult=" + endresult + " endnResult=" + endnResult);
System.err.println("");
}
if (!useOffset)
l_offset = haystackSize + 100;
}
}
}
report("Exhaustive " + thisTest, failCount);
}
private static void PrintError(int kernel, int naive, int num, String prefix, String hs, char needle) {
PrintError(kernel, naive, num, prefix, hs, String.valueOf(needle));
}
private static void PrintError(int kernel, int naive, int num, String prefix, String hs, String needle) {
if (!verbose)
return;
System.err.println(prefix + ": (" + num + "): kernel=" + kernel + ", naive=" + naive);
System.err.print("Haystack=");
printStringBytes(hs.getBytes());
System.err.print("Needle=");
printStringBytes(needle.getBytes());
System.err.println("");
}
private static void simpleTest() {
int failCount = 0;
String sourceString;
StringBuffer sourceBuffer;
String targetString;
String emptyString = "";
String allAs = new String("aaaaaaaaaaaaaaaaaaaaaaaaa");
StringBuffer allAsBuffer = new StringBuffer(allAs);
for (int i = 0; i < 10000; i++) {
do {
sourceString = generateTestString(99, 100);
sourceBuffer = new StringBuffer(sourceString);
targetString = generateTestString(10, 11);
} while (indexOfKernel(sourceString, targetString) != -1);
int index1 = generator.nextInt(90) + 5;
sourceBuffer = sourceBuffer.replace(index1, index1, targetString);
if ((indexOfKernel(sourceBuffer, targetString) != index1) ||
(index1 != naiveFind(sourceBuffer.toString(), targetString, 0))) {
System.err.println("sourceBuffer.indexOf(targetString) fragment '" + targetString + "' ("
+ targetString.length() + ") String = "
+ sourceBuffer.toString() + " len Buffer = " + sourceBuffer.toString().length());
System.err.println(" naive = " + naiveFind(sourceBuffer.toString(), targetString, 0) + ", IndexOf = "
+ indexOfKernel(sourceBuffer, targetString));
failCount++;
}
if ((indexOfKernel(sourceBuffer, targetString, 5) != index1) ||
(index1 != naiveFind(sourceBuffer.toString(), targetString, 0))) {
System.err.println("sourceBuffer.indexOf(targetString, 5) fragment '" + targetString + "' ("
+ targetString.length() + ") String = "
+ sourceBuffer.toString() + " len Buffer = " + sourceBuffer.toString().length());
System.err.println(" naive = " + naiveFind(sourceBuffer.toString(), targetString, 0) + ", IndexOf = "
+ indexOfKernel(sourceBuffer, targetString, 5));
failCount++;
}
if ((indexOfKernel(sourceBuffer, targetString, 99) == index1) ||
(index1 != naiveFind(sourceBuffer.toString(), targetString, 0))) {
System.err.println("sourceBuffer.indexOf(targetString, 99) fragment '" + targetString + "' ("
+ targetString.length() + ") String = "
+ sourceBuffer.toString() + " len Buffer = " + sourceBuffer.toString().length());
System.err.println(" naive = " + naiveFind(sourceBuffer.toString(), targetString, 0) + ", IndexOf = "
+ indexOfKernel(sourceBuffer, targetString, 99));
failCount++;
}
if ((indexOfKernel(sourceBuffer, emptyString, 99) != 99) ||
(99 != naiveFind(sourceBuffer.toString(), emptyString, 99))) {
System.err.println("sourceBuffer.indexOf(emptyString, 99) fragment '" + emptyString + "' ("
+ emptyString.length() + ") String = "
+ sourceBuffer.toString() + " len Buffer = " + sourceBuffer.toString().length());
System.err.println(" naive = " + naiveFind(sourceBuffer.toString(), emptyString, 99) + ", IndexOf = "
+ indexOfKernel(sourceBuffer, emptyString, 99));
failCount++;
}
if ((indexOfKernel(allAsBuffer.substring(1, 3), allAsBuffer.substring(5, 12)) != -1) ||
(-1 != naiveFind(allAsBuffer.substring(1, 3).toString(), allAsBuffer.substring(5, 12), 0))) {
System.err.println("allAsBuffer.substring(1, 3).indexOf(allAsBuffer.substring(5, 12)) fragment '"
+ allAsBuffer.substring(5, 12) + "' ("
+ allAsBuffer.substring(5, 12).length() + ") String = "
+ allAsBuffer.substring(1, 3) + " len Buffer = " + allAsBuffer.substring(1, 3).length());
System.err.println(
" naive = " + naiveFind(allAsBuffer.substring(1, 3).toString(), allAsBuffer.substring(5, 12), 0)
+ ", IndexOf = " + indexOfKernel(allAsBuffer.substring(1, 3), allAsBuffer.substring(5, 12)));
failCount++;
}
}
report("Basic Test ", failCount);
}
// Note: it is possible although highly improbable that failCount will
// be > 0 even if everthing is working ok
private static void compareIndexOfLastIndexOf() {
int failCount = 0;
String sourceString;
StringBuffer sourceBuffer;
String targetString;
for (int i = 0; i < 10000; i++) {
do {
sourceString = generateTestString(99, 100);
sourceBuffer = new StringBuffer(sourceString);
targetString = generateTestString(10, 11);
} while (indexOfKernel(sourceString, targetString) != -1);
int index1 = generator.nextInt(100);
sourceBuffer = sourceBuffer.replace(index1, index1, targetString);
// extremely remote possibility of > 1 match
int matches = 0;
int index2 = -1;
while ((index2 = indexOfKernel(sourceBuffer, targetString, index2 + 1)) != -1)
matches++;
if (matches > 1)
continue;
if (indexOfKernel(sourceBuffer, targetString) != sourceBuffer.lastIndexOf(targetString))
failCount++;
sourceString = sourceBuffer.toString();
if (indexOfKernel(sourceString, targetString) != sourceString.lastIndexOf(targetString))
failCount++;
}
report("IndexOf vs LastIndexOf ", failCount);
}
private static void compareStringStringBuffer() {
int failCount = 0;
boolean make_new = true;
String fragment = null;
StringBuffer testBuffer = null;
String testString = null;
int testIndex = 0;
failCount = indexOfKernel("", "");
for (int x = 0; x < 1000000; x++) {
if (make_new) {
testString = generateTestString(1, 100);
int len = testString.length();
testBuffer = new StringBuffer(len);
testBuffer.append(testString);
if (!testString.equals(testBuffer.toString()))
throw new RuntimeException("Initial equality failure");
int x1 = 0;
int x2 = 1000;
while (x2 > testString.length()) {
x1 = generator.nextInt(len);
x2 = generator.nextInt(100);
x2 = x1 + x2;
}
fragment = testString.substring(x1, x2);
}
int sAnswer = indexOfKernel(testString, fragment);
int sbAnswer = indexOfKernel(testBuffer, fragment);
if (sAnswer != sbAnswer) {
System.err.println("(1) IndexOf fragment '" + fragment + "' (" + fragment.length() + ") len String = "
+ testString.length() + " len Buffer = " + testBuffer.length());
System.err.println(" sAnswer = " + sAnswer + ", sbAnswer = " + sbAnswer);
System.err.println(" testString = '" + testString + "'");
System.err.println(" testBuffer = '" + testBuffer + "'");
failCount++;
sAnswer = indexOfKernel(testString, fragment);
sbAnswer = indexOfKernel(testBuffer, fragment);
} else {
if (sAnswer > testString.length()) {
System.err.println(
"IndexOf returned value out of range; return: " + sAnswer + " length max: " + testBuffer.length());
}
}
if ((fragment == "0#:02/62;+-\"\"0$25-5$#)1263") && (testBuffer.length() == 94)) {
String xx = "abc";
String yy = "abcdefg";
int sA = indexOfKernel(xx, yy);
}
if (make_new)
testIndex = getRandomIndex(-100, 100);
sAnswer = indexOfKernel(testString, fragment, testIndex);
sbAnswer = indexOfKernel(testBuffer, fragment, testIndex);
if (sAnswer != sbAnswer) {
System.err.println("(2) IndexOf fragment '" + fragment + "' (" + fragment.length() + ") index = " + testIndex
+ " len String = " + testString.length() + " len Buffer = " + testBuffer.length());
System.err.println(" sAnswer = " + sAnswer + ", sbAnswer = " + sbAnswer);
System.err.println(" testString = '" + testString + "'");
System.err.println(" testBuffer = '" + testBuffer + "'");
failCount++;
make_new = true;
sAnswer = indexOfKernel(testString, fragment, testIndex);
sbAnswer = indexOfKernel(testBuffer, fragment, testIndex);
} else {
if ((sAnswer > testString.length()) || ((sAnswer != -1) && (sAnswer < testIndex) && (fragment.length() != 0))) {
System.err.println("IndexOf returned value out of range; return: " + sAnswer + " length max: "
+ testString.length() + " index: " + testIndex);
System.err.println("(3) IndexOf fragment '" + fragment + "' (" + fragment.length() + ") index = " + testIndex
+ " len String = " + testString.length() + " len Buffer = " + testBuffer.length());
}
}
sAnswer = testString.lastIndexOf(fragment);
sbAnswer = testBuffer.lastIndexOf(fragment);
if (sAnswer != sbAnswer) {
System.err.println("(1) lastIndexOf fragment '" + fragment + "' len String = " + testString.length()
+ " len Buffer = " + testBuffer.length());
System.err.println(" sAnswer = " + sAnswer + ", sbAnswer = " + sbAnswer);
failCount++;
sAnswer = testString.lastIndexOf(fragment);
sbAnswer = testBuffer.lastIndexOf(fragment);
}
if (make_new)
testIndex = getRandomIndex(-100, 100);
sAnswer = testString.lastIndexOf(fragment, testIndex);
sbAnswer = testBuffer.lastIndexOf(fragment, testIndex);
if (sAnswer != sbAnswer) {
System.err.println("(2) lastIndexOf fragment '" + fragment + "' index = " + testIndex + " len String = "
+ testString.length() + " len Buffer = " + testBuffer.length());
failCount++;
}
}
report("String vs StringBuffer ", failCount);
}
//////////////////////////////////////////////////////////////////////
// Test routines used in benchmarks
//
// From StringIndexofHuge
private static void StringIndexofHuge() {
int stubResult = 0;
int failCount = 0;
for (int xx = 0; xx < 2; xx++) {
int num = 1;
String dataString = "ngdflsoscargfdgf";
String dataString16 = "ngdfilso\u01facargfd\u01eef";
String dataStringHuge = (("A".repeat(32) + "B".repeat(32)).repeat(16) + "X").repeat(2) + "bB";
String dataStringHuge16 = "\u01de" + (("A".repeat(32) + "B".repeat(32)).repeat(16) + "\u01fe").repeat(2)
+ "\u01eeB";
String earlyMatchString = dataStringHuge.substring(0, 34);
String earlyMatchString16 = dataStringHuge16.substring(0, 34);
String midMatchString = dataStringHuge.substring(dataStringHuge.length() / 2 - 16,
dataStringHuge.length() / 2 + 32);
String midMatchString16 = dataStringHuge16.substring(dataStringHuge16.length() / 2 - 16,
dataStringHuge16.length() / 2 + 32);
String lateMatchString = dataStringHuge.substring(dataStringHuge.length() - 31);
String lateMatchString16 = dataStringHuge16.substring(dataStringHuge16.length() - 31);
String searchString = "oscar";
String searchString16 = "o\u01facar";
String searchStringSmall = "dgf";
String searchStringSmall16 = "d\u01eef";
String searchStringHuge = "capaapapapasdkajdlkajskldjaslkajdlkajskldjaslkjdlkasjdsalk";
String searchStringHuge16 = "capaapapapasdkajdlka\u01feskldjaslkajdlkajskldjaslkjdlkasjdsalk";
String searchNoMatch = "XYXyxYxy".repeat(22);
String searchNoMatch16 = "\u01ab\u01ba\u01cb\u01bc\u01de\u01ed\u01fa\u01af".repeat(22);
stubResult = indexOfKernel(dataStringHuge16, earlyMatchString);
int nResult = naiveFind(dataStringHuge16, earlyMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, earlyMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, earlyMatchString);
nResult = naiveFind(dataStringHuge, earlyMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge, earlyMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, midMatchString);
nResult = naiveFind(dataStringHuge, midMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge, midMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, lateMatchString);
nResult = naiveFind(dataStringHuge, lateMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge, lateMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, searchNoMatch);
nResult = naiveFind(dataStringHuge, searchNoMatch);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge, searchNoMatch);
failCount++;
}
num++;
stubResult = indexOfKernel(searchString, searchString);
nResult = naiveFind(searchString, searchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", searchString, searchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString, searchString);
nResult = naiveFind(dataString, searchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataString, searchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString, searchStringSmall);
nResult = naiveFind(dataString, searchStringSmall);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataString, searchStringSmall);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, "B".repeat(30) + "X" + "A".repeat(30), 74);
nResult = naiveFind(dataStringHuge, "B".repeat(30) + "X" + "A".repeat(30), 74);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge,
"B".repeat(30) + "X" + "A".repeat(30));
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, "A".repeat(32) + "F" + "B".repeat(32), 64);
nResult = naiveFind(dataStringHuge, "A".repeat(32) + "F" + "B".repeat(32), 64);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge,
"A".repeat(32) + "F" + "B".repeat(32));
failCount++;
}
num++;
stubResult = indexOfKernel(midMatchString, dataStringHuge, 3);
nResult = naiveFind(midMatchString, dataStringHuge, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", midMatchString, dataStringHuge);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge, "A".repeat(32) + "B".repeat(30) + "bB");
nResult = naiveFind(dataStringHuge, "A".repeat(32) + "B".repeat(30) + "bB");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge,
"A".repeat(32) + "B".repeat(30) + "bB");
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, earlyMatchString);
nResult = naiveFind(dataStringHuge16, earlyMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, earlyMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, midMatchString);
nResult = naiveFind(dataStringHuge16, midMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, midMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, lateMatchString);
nResult = naiveFind(dataStringHuge16, lateMatchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, lateMatchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, searchNoMatch);
nResult = naiveFind(dataStringHuge16, searchNoMatch);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, searchNoMatch);
failCount++;
}
num++;
stubResult = indexOfKernel(searchString16, searchString);
nResult = naiveFind(searchString16, searchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", searchString16, searchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString16, searchString);
nResult = naiveFind(dataString16, searchString);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataString16, searchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString16, searchStringSmall);
nResult = naiveFind(dataString16, searchStringSmall);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataString16, searchStringSmall);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, "B".repeat(30) + "X" + "A".repeat(30), 74);
nResult = naiveFind(dataStringHuge16, "B".repeat(30) + "X" + "A".repeat(30), 74);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16,
"B".repeat(30) + "X" + "A".repeat(30));
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, "A".repeat(32) + "F" + "B".repeat(32), 64);
nResult = naiveFind(dataStringHuge16, "A".repeat(32) + "F" + "B".repeat(32), 64);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16,
"A".repeat(32) + "F" + "B".repeat(32));
failCount++;
}
num++;
stubResult = indexOfKernel(midMatchString16, dataStringHuge, 3);
nResult = naiveFind(midMatchString16, dataStringHuge, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", midMatchString16, dataStringHuge);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, "A".repeat(32) + "B".repeat(30) + "bB");
nResult = naiveFind(dataStringHuge16, "A".repeat(32) + "B".repeat(30) + "bB");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16,
"A".repeat(32) + "B".repeat(30) + "bB");
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, earlyMatchString16);
nResult = naiveFind(dataStringHuge16, earlyMatchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, earlyMatchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, midMatchString16);
nResult = naiveFind(dataStringHuge16, midMatchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, midMatchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, lateMatchString16);
nResult = naiveFind(dataStringHuge16, lateMatchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, lateMatchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, searchNoMatch16);
nResult = naiveFind(dataStringHuge16, searchNoMatch16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16, searchNoMatch16);
failCount++;
}
num++;
stubResult = indexOfKernel(searchString16, searchString16);
nResult = naiveFind(searchString16, searchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", searchString16, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString16, searchString16);
nResult = naiveFind(dataString16, searchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataString16, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString16, searchStringSmall16);
nResult = naiveFind(dataString16, searchStringSmall16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataString16, searchStringSmall16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, "B".repeat(30) + "X" + "A".repeat(30), 74);
nResult = naiveFind(dataStringHuge16, "B".repeat(30) + "X" + "A".repeat(30), 74);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16,
"B".repeat(30) + "X" + "A".repeat(30));
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, "A".repeat(32) + "\u01ef" + "B".repeat(32), 64);
nResult = naiveFind(dataStringHuge16, "A".repeat(32) + "\u01ef" + "B".repeat(32), 64);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16,
"A".repeat(32) + "\u01ef" + "B".repeat(32));
failCount++;
}
num++;
stubResult = indexOfKernel(midMatchString16, dataStringHuge16, 3);
nResult = naiveFind(midMatchString16, dataStringHuge16, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", midMatchString16, dataStringHuge16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringHuge16, "A".repeat(32) + "B".repeat(30) + "\u01eeB");
nResult = naiveFind(dataStringHuge16, "A".repeat(32) + "B".repeat(30) + "\u01eeB");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofHuge", dataStringHuge16,
"A".repeat(32) + "B".repeat(30) + "\u01eeB");
failCount++;
}
num++;
}
report("StringIndexofHuge ", failCount);
}
/////////////////////////////////////////////////////////////////////
//
// From StringIndexof
private static void StringIndexof() {
int stubResult = 0;
int failCount = 0;
for (int xx = 0; xx < 2; xx++) {
int num = 1;
String dataString = "ngdfilsoscargfdgf";
String searchString = "oscar";
String dataStringBig = "2937489745890797905764956790452976742965790437698498409583479067ngdcapaapapapasdkajdlkajskldjaslkjdlkasjdsalkjas";
String searchStringBig = "capaapapapasdkajdlkajskldjaslkjdlkasjdsalk";
String data = "0000100101010010110101010010101110101001110110101010010101010010000010111010101010101010100010010101110111010101101010100010010100001010111111100001010101001010100001010101001010101010111010010101010101010101010101010";
String sub = "10101010";
String shortSub1 = "1";
String data2 = "00001001010100a10110101010010101110101001110110101010010101010010000010111010101010101010a100010010101110111010101101010100010010a100a0010101111111000010101010010101000010101010010101010101110a10010101010101010101010101010";
String shortSub2 = "a";
char searchChar = 's';
String string16Short = "scar\u01fe1";
String string16Medium = "capaapapapasdkajdlkajskldjaslkjdlkasjdsalksca1r\u01fescar";
String string16Long = "2937489745890797905764956790452976742965790437698498409583479067ngdcapaapapapasdkajdlkajskldjaslkjdlkasjdsalkja1sscar\u01fescar";
char searchChar16 = 0x1fe;
String searchString16 = "\u01fe";
stubResult = indexOfKernel(dataStringBig, searchChar);
int nResult = naiveFind(dataStringBig, searchChar);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", dataStringBig, searchChar);
failCount++;
}
num++;
stubResult = indexOfKernel(searchStringBig, searchChar);
nResult = naiveFind(searchStringBig, searchChar);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", searchStringBig, searchChar);
failCount++;
}
num++;
stubResult = indexOfKernel(searchString, searchChar);
nResult = naiveFind(searchString, searchChar);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", searchString, searchChar);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, searchChar16);
nResult = naiveFind(string16Long, searchChar16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, searchChar16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Medium, searchChar16);
nResult = naiveFind(string16Medium, searchChar16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Medium, searchChar16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Short, searchChar16);
nResult = naiveFind(string16Short, searchChar16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Short, searchChar16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringBig, searchChar, 3);
nResult = naiveFind(dataStringBig, searchChar, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", dataStringBig, searchChar);
failCount++;
}
num++;
stubResult = indexOfKernel(searchStringBig, searchChar, 3);
nResult = naiveFind(searchStringBig, searchChar, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", searchStringBig, searchChar);
failCount++;
}
num++;
stubResult = indexOfKernel(searchString, searchChar, 1);
nResult = naiveFind(searchString, searchChar, 1);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", searchString, searchChar);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, searchChar16, 3);
nResult = naiveFind(string16Long, searchChar16, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, searchChar16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Medium, searchChar16, 3);
nResult = naiveFind(string16Medium, searchChar16, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Medium, searchChar16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Short, searchChar16, 2);
nResult = naiveFind(string16Short, searchChar16, 2);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Short, searchChar16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, shortSub1);
nResult = naiveFind(string16Long, shortSub1);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, shortSub1);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Medium, shortSub1);
nResult = naiveFind(string16Medium, shortSub1);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Medium, shortSub1);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, shortSub2);
nResult = naiveFind(string16Long, shortSub2);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, shortSub2);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, shortSub1, 3);
nResult = naiveFind(string16Long, shortSub1, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, shortSub1);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Medium, shortSub1, 3);
nResult = naiveFind(string16Medium, shortSub1, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Medium, shortSub1);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Short, shortSub2, 1);
nResult = naiveFind(string16Short, shortSub2, 1);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Short, shortSub2);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, searchString16, 3);
nResult = naiveFind(string16Long, searchString16, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Medium, searchString16, 3);
nResult = naiveFind(string16Medium, searchString16, 3);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Medium, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Short, searchString16, 2);
nResult = naiveFind(string16Short, searchString16, 2);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Short, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Long, searchString16);
nResult = naiveFind(string16Long, searchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Long, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Medium, searchString16);
nResult = naiveFind(string16Medium, searchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Medium, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(string16Short, searchString16);
nResult = naiveFind(string16Short, searchString16);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", string16Short, searchString16);
failCount++;
}
num++;
stubResult = indexOfKernel(dataString, searchString, 2);
nResult = naiveFind(dataString, searchString, 2);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", dataString, searchString);
failCount++;
}
num++;
stubResult = indexOfKernel(dataStringBig, searchStringBig, 2);
nResult = naiveFind(dataStringBig, searchStringBig, 2);
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexof", dataStringBig, searchStringBig);
}
{
int index = 0;
int dummy = 0;
while ((index = indexOfKernel(data, sub, index)) > -1) {
nResult = naiveFind(data, sub, index);
if (index != nResult) {
PrintError(stubResult, nResult, num, "StringIndexof", data, sub);
failCount++;
}
index++;
dummy += index;
}
num++;
}
{
int dummy = 0;
int index = 0;
while ((index = indexOfKernel(data, shortSub1, index)) > -1) {
nResult = naiveFind(data, shortSub1, index);
if (index != nResult) {
PrintError(stubResult, nResult, num, "StringIndexof", data, shortSub1);
failCount++;
}
index++;
dummy += index;
}
num++;
}
{
int dummy = 0;
int index = 0;
while ((index = indexOfKernel(data2, shortSub2, index)) > -1) {
nResult = naiveFind(data2, shortSub2, index);
if (index != nResult) {
PrintError(stubResult, nResult, num, "StringIndexof", data2, shortSub2);
failCount++;
}
index++;
dummy += index;
}
num++;
}
{
String tmp = "simple-hash:SHA-1/UTF-8";
if (!tmp.contains("SHA-1")) {
PrintError(stubResult, nResult, num, "StringIndexof", "simple-hash:SHA-1/UTF-8", "SHA-1");
failCount++;
}
num++;
}
}
report("StringIndexof ", failCount);
}
/////////////////////////////////////////////////////////////////////
//
// From StringIndexofChar
private static void StringIndexofChar() {
int stubResult = 0;
int failCount = 0;
for (int xx = 0; xx < 2; xx++) {
stubResult = 0;
int nResult = 0;
int num = 1;
String[] latn1_short = new String[100];
String[] latn1_sse4 = new String[100];
String[] latn1_avx2 = new String[100];
String[] latn1_mixedLength = new String[100];
String[] utf16_short = new String[100];
String[] utf16_sse4 = new String[100];
String[] utf16_avx2 = new String[100];
String[] utf16_mixedLength = new String[100];
for (int i = 0; i < 100; i++) {
latn1_short[i] = makeRndString(false, 15);
latn1_sse4[i] = makeRndString(false, 16);
latn1_avx2[i] = makeRndString(false, 32);
utf16_short[i] = makeRndString(true, 7);
utf16_sse4[i] = makeRndString(true, 8);
utf16_avx2[i] = makeRndString(true, 16);
latn1_mixedLength[i] = makeRndString(false, rng.nextInt(65));
utf16_mixedLength[i] = makeRndString(true, rng.nextInt(65));
}
for (String what : latn1_mixedLength) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : utf16_mixedLength) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : latn1_mixedLength) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : utf16_mixedLength) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : latn1_short) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : latn1_sse4) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : latn1_avx2) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : utf16_short) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : utf16_sse4) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : utf16_avx2) {
stubResult = indexOfKernel(what, 'a');
nResult = naiveFind(what, 'a');
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, 'a');
failCount++;
}
}
num++;
for (String what : latn1_short) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : latn1_sse4) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : latn1_avx2) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : utf16_short) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : utf16_sse4) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
for (String what : utf16_avx2) {
stubResult = indexOfKernel(what, "a");
nResult = naiveFind(what, "a");
if (nResult != stubResult) {
PrintError(stubResult, nResult, num, "StringIndexofChar", what, "a");
failCount++;
}
}
num++;
}
report("StringIndexofChar ", failCount);
}
}