149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee/* 249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * Copyright (C) 2007 The Android Open Source Project 349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * 449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * Licensed under the Apache License, Version 2.0 (the "License"); 549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * you may not use this file except in compliance with the License. 649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * You may obtain a copy of the License at 749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * 849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * http://www.apache.org/licenses/LICENSE-2.0 949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * 1049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * Unless required by applicable law or agreed to in writing, software 1149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * distributed under the License is distributed on an "AS IS" BASIS, 1249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * See the License for the specific language governing permissions and 1449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * limitations under the License. 1549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee */ 1649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee/** 1849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * Test for Jit's handling of string inline-execute. Should be tested 1949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * twice - once using self-cosimulation (if available) and once without. 2049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * The non-self-cosimulation test ensures that the answer computed the first 2149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * time through (via the interpreter) is the same after looping enough 2249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee * to trigger translation. 2349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee */ 2449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 2549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbeeimport junit.framework.Assert; 2649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 2749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbeepublic class Main { 2849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee public static void main(String args[]) { 295965d47b624798343b6a53afd384f2cf88d091deBill Buzbee int i; 3049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee stringLengthTest(); 3149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee stringCharAtTest(); 3249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee stringIndexOfTest(); 335965d47b624798343b6a53afd384f2cf88d091deBill Buzbee for (i = 0; i < 1000; i++) 345965d47b624798343b6a53afd384f2cf88d091deBill Buzbee stringCompareToTest(); 3549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 3649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 3749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee public static void stringLengthTest() { 3849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str0 = ""; 3949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str1 = "x"; 4049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str80 = "01234567890123456789012345678901234567890123456789012345678901234567890123456789"; 4149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int len0 = str0.length(); 4249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int len1 = str1.length(); 4349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int len80 = str80.length(); 4449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int i; 4549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 4649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println("Length of " + str0 + " : " + len0); 4749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println("Length of " + str1 + " : " + len1); 4849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println("Length of " + str80 + " : " + len80); 4949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 5049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee for (i = 0; i < 1000; i++) { 5149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str0.length() == len0); 5249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str1.length() == len1); 5349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str80.length() == len80); 5449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 5549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 5649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 5749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee public static void stringCharAtTest() { 5849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String testStr = "Now is the time"; 5949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int under = -1; 6049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int over = testStr.length(); 6149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int numThrown = 0; 6249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int numNotThrown = 0; 6349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int at0 = testStr.charAt(0); 6449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int at1 = testStr.charAt(1); 6549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int at10 = testStr.charAt(10); 6649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int atLast = testStr.charAt(testStr.length()-1); 6749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int i; 6849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 6949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println(testStr + "[0] = \"" + (char)at0 + "\""); 7049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println(testStr + "[1] = \"" + (char)at1 + "\""); 7149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println(testStr + "[10] = \"" + (char)at10 + "\""); 7249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println(testStr + "[last] = \"" + (char)atLast + "\""); 7349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 7449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee for (i = 0; i < 1000; i++) { 7549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(at0 == testStr.charAt(0)); 7649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(at1 == testStr.charAt(1)); 7749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(at10 == testStr.charAt(10)); 7849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(atLast == testStr.charAt(testStr.length()-1)); 7949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 8049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 8149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee for (i = 0; i < 1000; i++) { 8249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee try { 8349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee testStr.charAt(under); 8449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee numNotThrown++; 8549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } catch (StringIndexOutOfBoundsException sioobe) { 8649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee numThrown++; 8749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 8849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee try { 8949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee testStr.charAt(over); 9049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee numNotThrown++; 9149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } catch (StringIndexOutOfBoundsException sioobe) { 9249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee numThrown++; 9349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 9449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 9549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(numNotThrown == 0); 9649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee System.out.println("Num throws " + numThrown); 9749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 9849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 9949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 10049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee public static void stringIndexOfTest() { 10149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str0 = ""; 10249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str3 = "abc"; 10349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str10 = "abcdefghij"; 10449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String str40 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc"; 10549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee int i; 10649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 10749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee for (i = 0; i < 1000; i++) { 10849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str0.indexOf('a') == -1); 10949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('a') == 0); 11049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('b') == 1); 11149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('c') == 2); 11249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str10.indexOf('j') == 9); 11349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str40.indexOf('a') == 0); 11449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str40.indexOf('b') == 38); 11549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str40.indexOf('c') == 39); 11649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str0.indexOf('a',20) == -1); 11749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str0.indexOf('a',0) == -1); 11849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str0.indexOf('a',-1) == -1); 11949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('a',0) == 0); 12049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('a',1) == -1); 12149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('a',1234) == -1); 12249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('b',0) == 1); 12349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('b',1) == 1); 12449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str3.indexOf('c',2) == 2); 12549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str10.indexOf('j',5) == 9); 12649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str10.indexOf('j',9) == 9); 12749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str40.indexOf('a',10) == 10); 12849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee assert(str40.indexOf('b',40) == -1); 12949024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 13049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 13149024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 13249024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1335965d47b624798343b6a53afd384f2cf88d091deBill Buzbee public static void stringCompareToTest() { 13449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String test = "0123456789"; 13549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String test1 = new String("0123456789"); // different object 13649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String test2 = new String("0123456780"); // different value 13749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String offset = new String("xxx0123456789yyy"); 13849024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee String sub = offset.substring(3, 13); 1395965d47b624798343b6a53afd384f2cf88d091deBill Buzbee String str32 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; 1405965d47b624798343b6a53afd384f2cf88d091deBill Buzbee String str33 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy"; 141ce46c9456590968db896b5f6e63509a70232044cBill Buzbee String lc = "abcdefg"; 142ce46c9456590968db896b5f6e63509a70232044cBill Buzbee String uc = "ABCDEFG"; 14349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee Object blah = new Object(); 14449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 145ce46c9456590968db896b5f6e63509a70232044cBill Buzbee for (int i = 0; i < 100; i++) { 146ce46c9456590968db896b5f6e63509a70232044cBill Buzbee String y = lc.toUpperCase(); 147ce46c9456590968db896b5f6e63509a70232044cBill Buzbee Assert.assertTrue(y.equals(uc)); 148ce46c9456590968db896b5f6e63509a70232044cBill Buzbee } 149ce46c9456590968db896b5f6e63509a70232044cBill Buzbee 1505965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals(str32.compareTo(str33), -1); 1515965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals(str33.compareTo(str32), 1); 1525965d47b624798343b6a53afd384f2cf88d091deBill Buzbee 1535965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals(test)); 1545965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals(test1)); 1555965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertFalse(test.equals(test2)); 1565965d47b624798343b6a53afd384f2cf88d091deBill Buzbee 1575965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals(test.compareTo(test1), 0); 1585965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test1.compareTo(test2) > 0); 1595965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test2.compareTo(test1) < 0); 1605965d47b624798343b6a53afd384f2cf88d091deBill Buzbee 1615965d47b624798343b6a53afd384f2cf88d091deBill Buzbee /* compare string with a nonzero offset, in left/right side */ 1625965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals(test.compareTo(sub), 0); 1635965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals(sub.compareTo(test), 0); 1645965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals(sub)); 1655965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(sub.equals(test)); 1665965d47b624798343b6a53afd384f2cf88d091deBill Buzbee /* same base, one is a substring */ 1675965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertFalse(offset.equals(sub)); 1685965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertFalse(sub.equals(offset)); 1695965d47b624798343b6a53afd384f2cf88d091deBill Buzbee /* wrong class */ 1705965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertFalse(test.equals(blah)); 1715965d47b624798343b6a53afd384f2cf88d091deBill Buzbee 1725965d47b624798343b6a53afd384f2cf88d091deBill Buzbee /* null ptr - throw */ 1735965d47b624798343b6a53afd384f2cf88d091deBill Buzbee try { 1745965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test.compareTo(null); 1755965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.fail("didn't get expected npe"); 1765965d47b624798343b6a53afd384f2cf88d091deBill Buzbee } catch (NullPointerException npe) { 1775965d47b624798343b6a53afd384f2cf88d091deBill Buzbee } 1785965d47b624798343b6a53afd384f2cf88d091deBill Buzbee /* null ptr - ok */ 1795965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertFalse(test.equals(null)); 18049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1815965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test = test.substring(1); 1825965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals("123456789")); 1835965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertFalse(test.equals(test1)); 18449024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1855965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test = test.substring(1); 1865965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals("23456789")); 18749024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1885965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test = test.substring(1); 1895965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals("3456789")); 19049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1915965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test = test.substring(1); 1925965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals("456789")); 19349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1945965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test = test.substring(3,5); 1955965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertTrue(test.equals("78")); 19649024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 1975965d47b624798343b6a53afd384f2cf88d091deBill Buzbee test = "this/is/a/path"; 1985965d47b624798343b6a53afd384f2cf88d091deBill Buzbee String[] strings = test.split("/"); 1995965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals(4, strings.length); 20049024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee 2015965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals("this is a path", test.replaceAll("/", " ")); 2025965d47b624798343b6a53afd384f2cf88d091deBill Buzbee Assert.assertEquals("this is a path", test.replace("/", " ")); 20349024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee } 2045965d47b624798343b6a53afd384f2cf88d091deBill Buzbee 20549024493479b1ab8b5f9b44c24a3b0c33afc796cBill Buzbee} 206