Path: blob/master/test/jdk/java/lang/String/CompactString/IndexOf.java
41152 views
/*1* Copyright (c) 2015, 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*/2223import org.testng.annotations.DataProvider;24import org.testng.annotations.Test;2526import static org.testng.Assert.assertEquals;2728/*29* @test30* @bug 807755931* @summary Tests Compact String. This one is for String.indexOf.32* @run testng/othervm -XX:+CompactStrings IndexOf33* @run testng/othervm -XX:-CompactStrings IndexOf34*/3536public class IndexOf extends CompactString {3738@DataProvider39public Object[][] provider() {40return new Object[][] {4142new Object[] { STRING_EMPTY, (int) 'A', -1 },43new Object[] { STRING_L1, (int) 'A', 0 },44new Object[] { STRING_L2, (int) 'A', 0 },45new Object[] { STRING_L2, (int) 'B', 1 },46new Object[] { STRING_L4, (int) 'A', 0 },47new Object[] { STRING_L4, (int) 'D', 3 },48new Object[] { STRING_L4, (int) 'E', -1 },49new Object[] { STRING_LLONG, (int) 'A', 0 },50new Object[] { STRING_LLONG, (int) 'H', 7 },51new Object[] { STRING_U1, (int) '\uFF21', 0 },52new Object[] { STRING_U1, (int) 'A', -1 },53new Object[] { STRING_U2, (int) '\uFF21', 0 },54new Object[] { STRING_U2, (int) '\uFF22', 1 },55new Object[] { STRING_M12, (int) '\uFF21', 0 },56new Object[] { STRING_M12, (int) 'A', 1 },57new Object[] { STRING_M11, (int) 'A', 0 },58new Object[] { STRING_M11, (int) '\uFF21', 1 },59new Object[] { STRING_UDUPLICATE, (int) '\uFF21', 0 },60new Object[] { STRING_UDUPLICATE, (int) '\uFF22', 1 },61new Object[] { STRING_SUPPLEMENTARY, 'A', 5 },62new Object[] { STRING_SUPPLEMENTARY, '\uFF21', 4 },63new Object[] { STRING_SUPPLEMENTARY,64Character.toCodePoint('\uD801', '\uDC00'), 0 },65new Object[] { STRING_SUPPLEMENTARY,66Character.toCodePoint('\uD801', '\uDC01'), 2 }, };67}6869@Test(dataProvider = "provider")70public void testIndexOf(String str, int ch, int expected) {71map.get(str).forEach(72(source, data) -> {73assertEquals(data.indexOf(ch), expected, String.format(74"testing String(%s).indexOf(%d), source : %s, ",75escapeNonASCIIs(data), ch, source));76});77}7879@DataProvider80public Object[][] provider2() {81return new Object[][] {8283new Object[] { STRING_EMPTY, (int) 'A', 0, -1 },84new Object[] { STRING_L1, (int) 'A', 0, 0 },85new Object[] { STRING_L1, (int) 'A', 1, -1 },86new Object[] { STRING_L1, (int) 'B', 0, -1 },87new Object[] { STRING_L2, (int) 'A', 0, 0 },88new Object[] { STRING_L2, (int) 'A', 1, -1 },89new Object[] { STRING_L2, (int) 'B', 0, 1 },90new Object[] { STRING_L2, (int) 'B', 1, 1 },91new Object[] { STRING_L4, (int) 'A', 0, 0 },92new Object[] { STRING_L4, (int) 'D', 2, 3 },93new Object[] { STRING_L4, (int) 'B', 2, -1 },94new Object[] { STRING_LLONG, (int) 'A', 0, 0 },95new Object[] { STRING_LLONG, (int) 'H', 5, 7 },96new Object[] { STRING_U1, (int) '\uFF21', 0, 0 },97new Object[] { STRING_U1, (int) 'A', 0, -1 },98new Object[] { STRING_U2, (int) '\uFF21', 0, 0 },99new Object[] { STRING_U2, (int) '\uFF22', 0, 1 },100new Object[] { STRING_M12, (int) '\uFF21', 0, 0 },101new Object[] { STRING_M12, (int) 'A', 1, 1 },102new Object[] { STRING_M11, (int) 'A', 0, 0 },103new Object[] { STRING_M11, (int) '\uFF21', 1, 1 },104new Object[] { STRING_UDUPLICATE, (int) '\uFF21', 1, 2 },105new Object[] { STRING_UDUPLICATE, (int) '\uFF22', 1, 1 }, };106}107108@Test(dataProvider = "provider2")109public void testIndexOf(String str, int ch, int fromIndex, int expected) {110map.get(str)111.forEach(112(source, data) -> {113assertEquals(114data.indexOf(ch, fromIndex),115expected,116String.format(117"testing String(%s).indexOf(%d, %d), source : %s, ",118escapeNonASCIIs(data), ch,119fromIndex, source));120});121}122123@DataProvider124public Object[][] provider3() {125return new Object[][] {126127new Object[] { STRING_EMPTY, "A", -1 },128new Object[] { STRING_L1, "A", 0 },129new Object[] { STRING_L1, "AB", -1 },130new Object[] { STRING_L2, "A", 0 },131new Object[] { STRING_L2, "B", 1 },132new Object[] { STRING_L2, "AB", 0 },133new Object[] { STRING_L2, "AC", -1 },134new Object[] { STRING_L2, "ABC", -1 },135new Object[] { STRING_L4, "ABCD", 0 },136new Object[] { STRING_L4, "D", 3 },137new Object[] { STRING_LLONG, "ABCDEFGH", 0 },138new Object[] { STRING_LLONG, "EFGH", 4 },139new Object[] { STRING_LLONG, "EFGHI", -1 },140new Object[] { STRING_U1, "\uFF21", 0 },141new Object[] { STRING_U1, "\uFF21A", -1 },142new Object[] { STRING_U2, "\uFF21\uFF22", 0 },143new Object[] { STRING_U2, "\uFF22", 1 },144new Object[] { STRING_U2, "A\uFF22", -1 },145new Object[] { STRING_M12, "\uFF21A", 0 },146new Object[] { STRING_M12, "A", 1 },147new Object[] { STRING_M12, "\uFF21\uFF21", -1 },148new Object[] { STRING_M11, "A\uFF21", 0 },149new Object[] { STRING_M11, "\uFF21", 1 },150new Object[] { STRING_M11, "A", 0 },151new Object[] {152STRING_UDUPLICATE,153"\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22",1540 },155new Object[] { STRING_UDUPLICATE,156"\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21", 1 },157new Object[] {158STRING_UDUPLICATE,159"\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21",160-1 }, };161}162163@Test(dataProvider = "provider3")164public void testIndexOf(String str, String anotherString, int expected) {165map.get(str)166.forEach(167(source, data) -> {168assertEquals(169data.indexOf(anotherString),170expected,171String.format(172"testing String(%s).indexOf(%s), source : %s, ",173escapeNonASCIIs(data),174escapeNonASCIIs(anotherString),175source));176});177}178179@DataProvider180public Object[][] provider4() {181return new Object[][] {182183new Object[] { STRING_EMPTY, "A", 0, -1 },184new Object[] { STRING_L1, "A", 0, 0 },185new Object[] { STRING_L1, "A", 1, -1 },186new Object[] { STRING_L1, "AB", 0, -1 },187new Object[] { STRING_L2, "A", 0, 0 },188new Object[] { STRING_L2, "B", 0, 1 },189new Object[] { STRING_L2, "AB", 0, 0 },190new Object[] { STRING_L2, "AB", 1, -1 },191new Object[] { STRING_L4, "ABCD", 0, 0 },192new Object[] { STRING_L4, "BC", 0, 1 },193new Object[] { STRING_L4, "A", 0, 0 },194new Object[] { STRING_L4, "CD", 0, 2 },195new Object[] { STRING_L4, "A", 2, -1 },196new Object[] { STRING_L4, "ABCDE", 0, -1 },197new Object[] { STRING_LLONG, "ABCDEFGH", 0, 0 },198new Object[] { STRING_LLONG, "DEFGH", 0, 3 },199new Object[] { STRING_LLONG, "A", 0, 0 },200new Object[] { STRING_LLONG, "GHI", 0, -1 },201new Object[] { STRING_U1, "\uFF21", 0, 0 },202new Object[] { STRING_U1, "\uFF21A", 0, -1 },203new Object[] { STRING_U2, "\uFF21\uFF22", 0, 0 },204new Object[] { STRING_U2, "\uFF22", 0, 1 },205new Object[] { STRING_U2, "\uFF21", 1, -1 },206new Object[] { STRING_M12, "\uFF21A", 0, 0 },207new Object[] { STRING_M12, "A", 1, 1 },208new Object[] { STRING_M12, "\uFF21A", 1, -1 },209new Object[] { STRING_M12, "\uFF21", 0, 0 },210new Object[] { STRING_M11, "A\uFF21", 0, 0 },211new Object[] { STRING_M11, "\uFF21", 1, 1 },212new Object[] { STRING_M11, "A\uFF21", 1, -1 },213new Object[] { STRING_M11, "A\uFF21A", 0, -1 },214new Object[] {215STRING_UDUPLICATE,216"\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22",2170, 0 },218new Object[] {219STRING_UDUPLICATE,220"\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22",2211, -1 },222new Object[] {223STRING_UDUPLICATE,224"\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22",2251, 1 },226new Object[] { STRING_UDUPLICATE, "\uFF21\uFF22\uFF21\uFF22",2274, 4 },228new Object[] { STRING_UDUPLICATE, "\uFF21\uFF22\uFF21\uFF22",2297, -1 }, };230}231232@Test(dataProvider = "provider4")233public void testIndexOf(String str, String anotherString, int fromIndex,234int expected) {235map.get(str)236.forEach(237(source, data) -> {238assertEquals(239data.indexOf(anotherString, fromIndex),240expected,241String.format(242"testing String(%s).indexOf(%s), source : %s, ",243escapeNonASCIIs(data),244escapeNonASCIIs(anotherString),245fromIndex, source));246});247}248}249250251