Path: blob/master/test/jdk/java/lang/String/CompactString/LastIndexOf.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.lastIndexOf.32* @run testng/othervm -XX:+CompactStrings LastIndexOf33* @run testng/othervm -XX:-CompactStrings LastIndexOf34*/3536public class LastIndexOf 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_LLONG, (int) 'A', 0 },49new Object[] { STRING_LLONG, (int) 'H', 7 },50new Object[] { STRING_U1, (int) '\uFF21', 0 },51new Object[] { STRING_U1, (int) 'B', -1 },52new Object[] { STRING_U2, (int) '\uFF21', 0 },53new Object[] { STRING_U2, (int) '\uFF22', 1 },54new Object[] { STRING_M12, (int) '\uFF21', 0 },55new Object[] { STRING_M12, (int) 'A', 1 },56new Object[] { STRING_M11, (int) 'A', 0 },57new Object[] { STRING_M11, (int) '\uFF21', 1 },58new Object[] { STRING_UDUPLICATE, (int) '\uFF22', 9 },59new Object[] { STRING_UDUPLICATE, (int) '\uFF21', 8 },60new Object[] { STRING_SUPPLEMENTARY,61Character.toCodePoint('\uD801', '\uDC01'), 2 }, };62}6364@Test(dataProvider = "provider")65public void testLastIndexOf(String str, int ch, int expected) {66map.get(str)67.forEach(68(source, data) -> {69assertEquals(70data.lastIndexOf(ch),71expected,72String.format(73"testing String(%s).lastIndexOf(%d), source : %s, ",74escapeNonASCIIs(data), ch, source));75});76}7778@DataProvider79public Object[][] provider2() {80return new Object[][] {8182new Object[] { STRING_EMPTY, (int) 'A', 0, -1 },83new Object[] { STRING_L1, (int) 'A', 0, 0 },84new Object[] { STRING_L1, (int) 'A', 1, 0 },85new Object[] { STRING_L2, (int) 'A', 0, 0 },86new Object[] { STRING_L2, (int) 'B', 1, 1 },87new Object[] { STRING_L2, (int) 'B', 2, 1 },88new Object[] { STRING_L4, (int) 'A', 0, 0 },89new Object[] { STRING_L4, (int) 'C', 2, 2 },90new Object[] { STRING_L4, (int) 'C', 1, -1 },91new Object[] { STRING_LLONG, (int) 'A', 0, 0 },92new Object[] { STRING_LLONG, (int) 'H', 7, 7 },93new Object[] { STRING_LLONG, (int) 'H', 6, -1 },94new Object[] { STRING_U1, (int) '\uFF21', 0, 0 },95new Object[] { STRING_U1, (int) '\uFF21', 7, 0 },96new Object[] { STRING_U2, (int) '\uFF21', 0, 0 },97new Object[] { STRING_U2, (int) '\uFF22', 0, -1 },98new Object[] { STRING_M12, (int) '\uFF21', 0, 0 },99new Object[] { STRING_M12, (int) 'A', 1, 1 },100new Object[] { STRING_M12, (int) 'A', 0, -1 },101new Object[] { STRING_M11, (int) 'A', 0, 0 },102new Object[] { STRING_M11, (int) '\uFF21', 1, 1 },103new Object[] { STRING_M11, (int) '\uFF21', 0, -1 },104new Object[] { STRING_UDUPLICATE, (int) '\uFF21', 5, 4 },105new Object[] { STRING_UDUPLICATE, (int) '\uFF21', 6, 6 },106new Object[] { STRING_UDUPLICATE, (int) '\uFF22', 5, 5 },107new Object[] { STRING_UDUPLICATE, (int) '\uFF22', 6, 5 }, };108}109110@Test(dataProvider = "provider2")111public void testLastIndexOf(String str, int ch, int fromIndex, int expected) {112map.get(str)113.forEach(114(source, data) -> {115assertEquals(116data.lastIndexOf(ch, fromIndex),117expected,118String.format(119"testing String(%s).lastIndexOf(%d, %d), source : %s, ",120escapeNonASCIIs(data), ch,121fromIndex, source));122});123}124125@DataProvider126public Object[][] provider3() {127return new Object[][] {128129new Object[] { STRING_EMPTY, "A", -1 },130new Object[] { STRING_L1, "A", 0 },131new Object[] { STRING_L1, "AB", -1 },132133new Object[] { STRING_L2, "AB", 0 },134new Object[] { STRING_L2, "B", 1 },135new Object[] { STRING_L4, "ABCD", 0 },136new Object[] { STRING_L4, "B", 1 },137new Object[] { STRING_LLONG, "ABCD", 0 },138new Object[] { STRING_LLONG, "GH", 6 },139new Object[] { STRING_U1, "\uFF21", 0 },140new Object[] { STRING_U1, "\uFF22", -1 },141new Object[] { STRING_U2, "\uFF21\uFF22", 0 },142new Object[] { STRING_U2, "\uFF22", 1 },143new Object[] { STRING_M12, "\uFF21A", 0 },144new Object[] { STRING_M12, "A", 1 },145new Object[] { STRING_M11, "A\uFF21", 0 },146new Object[] { STRING_M11, "\uFF21", 1 },147new Object[] { STRING_UDUPLICATE, "\uFF21\uFF22\uFF21\uFF22", 6 },148new Object[] { STRING_UDUPLICATE, "\uFF21\uFF22", 8 }, };149}150151@Test(dataProvider = "provider3")152public void testLastIndexOf(String str, String anotherString, int expected) {153map.get(str)154.forEach(155(source, data) -> {156assertEquals(157data.lastIndexOf(anotherString),158expected,159String.format(160"testing String(%s).lastIndexOf(%s), source : %s, ",161escapeNonASCIIs(data),162escapeNonASCIIs(anotherString),163source));164});165}166167@DataProvider168public Object[][] provider4() {169return new Object[][] {170171new Object[] { STRING_EMPTY, "A", 0, -1 },172new Object[] { STRING_L2, "AB", 0, 0 },173174new Object[] { STRING_L1, "AB", -1, -1 },175176new Object[] { STRING_L2, "B", 1, 1 },177new Object[] { STRING_L2, "B", 0, -1 },178new Object[] { STRING_L4, "ABC", 3, 0 },179new Object[] { STRING_L4, "ABC", 0, 0 },180new Object[] { STRING_L4, "ABC", 1, 0 },181new Object[] { STRING_L4, "BC", 1, 1 },182new Object[] { STRING_L4, "BC", 0, -1 },183new Object[] { STRING_LLONG, "ABCDEFGH", 0, 0 },184new Object[] { STRING_LLONG, "EFGH", 7, 4 },185new Object[] { STRING_LLONG, "EFGH", 3, -1 },186new Object[] { STRING_U1, "\uFF21", 0, 0 },187new Object[] { STRING_U1, "\uFF21", 7, 0 },188new Object[] { STRING_U2, "\uFF21\uFF22", 0, 0 },189new Object[] { STRING_U2, "\uFF21\uFF22", 1, 0 },190new Object[] { STRING_M12, "\uFF21A", 0, 0 },191new Object[] { STRING_M12, "A", 1, 1 },192new Object[] { STRING_M12, "A", 0, -1 },193new Object[] { STRING_M11, "A\uFF21", 0, 0 },194new Object[] { STRING_M11, "A\uFF21", 1, 0 },195new Object[] { STRING_M11, "\uFF21", 0, -1 },196new Object[] {197STRING_UDUPLICATE,198"\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22",1999, 0 },200new Object[] {201STRING_UDUPLICATE,202"\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22\uFF21\uFF22",2030, 0 },204new Object[] { STRING_UDUPLICATE, "\uFF21\uFF22", 6, 6 },205new Object[] { STRING_UDUPLICATE, "\uFF21\uFF22\uFF21", 6, 6 }, };206}207208@Test(dataProvider = "provider4")209public void testLastIndexOf(String str, String anotherString,210int fromIndex, int expected) {211map.get(str)212.forEach(213(source, data) -> {214assertEquals(215data.lastIndexOf(anotherString, fromIndex),216expected,217String.format(218"testing String(%s).lastIndexOf(%s, %d), source : %s, ",219escapeNonASCIIs(data),220escapeNonASCIIs(anotherString),221fromIndex, source));222});223}224}225226227