Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /**
     18  * Test for Jit's handling of string inline-execute.  Should be tested
     19  * twice - once using self-cosimulation (if available) and once without.
     20  * The non-self-cosimulation test ensures that the answer computed the first
     21  * time through (via the interpreter) is the same after looping enough
     22  * to trigger translation.
     23  */
     24 
     25 import junit.framework.Assert;
     26 
     27 public class Main {
     28     public static void main(String args[]) {
     29         int i;
     30         stringLengthTest();
     31         stringCharAtTest();
     32         stringIndexOfTest();
     33         for (i = 0; i < 1000; i++)
     34             stringCompareToTest();
     35     }
     36 
     37     public static void stringLengthTest() {
     38         String str0 = "";
     39         String str1 = "x";
     40         String str80 = "01234567890123456789012345678901234567890123456789012345678901234567890123456789";
     41         int len0 = str0.length();
     42         int len1 = str1.length();
     43         int len80 = str80.length();
     44         int i;
     45 
     46         System.out.println("Length of " + str0 + " : " + len0);
     47         System.out.println("Length of " + str1 + " : " + len1);
     48         System.out.println("Length of " + str80 + " : " + len80);
     49 
     50         for (i = 0; i < 1000; i++) {
     51             assert(str0.length() == len0);
     52             assert(str1.length() == len1);
     53             assert(str80.length() == len80);
     54         }
     55     }
     56 
     57     public static void stringCharAtTest() {
     58         String testStr = "Now is the time";
     59         int under = -1;
     60         int over = testStr.length();
     61         int numThrown = 0;
     62         int numNotThrown = 0;
     63         int at0 = testStr.charAt(0);
     64         int at1 = testStr.charAt(1);
     65         int at10 = testStr.charAt(10);
     66         int atLast = testStr.charAt(testStr.length()-1);
     67         int i;
     68 
     69         System.out.println(testStr + "[0] = \"" + (char)at0 + "\"");
     70         System.out.println(testStr + "[1] = \"" + (char)at1 + "\"");
     71         System.out.println(testStr + "[10] = \"" + (char)at10 + "\"");
     72         System.out.println(testStr + "[last] = \"" + (char)atLast + "\"");
     73 
     74         for (i = 0; i < 1000; i++) {
     75             assert(at0 == testStr.charAt(0));
     76             assert(at1 == testStr.charAt(1));
     77             assert(at10 == testStr.charAt(10));
     78             assert(atLast == testStr.charAt(testStr.length()-1));
     79         }
     80 
     81         for (i = 0; i < 1000; i++) {
     82             try {
     83                 testStr.charAt(under);
     84                 numNotThrown++;
     85             } catch (StringIndexOutOfBoundsException sioobe) {
     86                 numThrown++;
     87             }
     88             try {
     89                 testStr.charAt(over);
     90                 numNotThrown++;
     91             } catch (StringIndexOutOfBoundsException sioobe) {
     92                 numThrown++;
     93             }
     94         }
     95         assert(numNotThrown == 0);
     96         System.out.println("Num throws " + numThrown);
     97     }
     98 
     99 
    100     public static void stringIndexOfTest() {
    101         String str0 = "";
    102         String str3 = "abc";
    103         String str10 = "abcdefghij";
    104         String str40 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabc";
    105         int i;
    106 
    107         for (i = 0; i < 1000; i++) {
    108             assert(str0.indexOf('a') == -1);
    109             assert(str3.indexOf('a') == 0);
    110             assert(str3.indexOf('b') == 1);
    111             assert(str3.indexOf('c') == 2);
    112             assert(str10.indexOf('j') == 9);
    113             assert(str40.indexOf('a') == 0);
    114             assert(str40.indexOf('b') == 38);
    115             assert(str40.indexOf('c') == 39);
    116             assert(str0.indexOf('a',20) == -1);
    117             assert(str0.indexOf('a',0) == -1);
    118             assert(str0.indexOf('a',-1) == -1);
    119             assert(str3.indexOf('a',0) == 0);
    120             assert(str3.indexOf('a',1) == -1);
    121             assert(str3.indexOf('a',1234) == -1);
    122             assert(str3.indexOf('b',0) == 1);
    123             assert(str3.indexOf('b',1) == 1);
    124             assert(str3.indexOf('c',2) == 2);
    125             assert(str10.indexOf('j',5) == 9);
    126             assert(str10.indexOf('j',9) == 9);
    127             assert(str40.indexOf('a',10) == 10);
    128             assert(str40.indexOf('b',40) == -1);
    129         }
    130 
    131     }
    132 
    133     public static void stringCompareToTest() {
    134         String test = "0123456789";
    135         String test1 = new String("0123456789");    // different object
    136         String test2 = new String("0123456780");    // different value
    137         String offset = new String("xxx0123456789yyy");
    138         String sub = offset.substring(3, 13);
    139         String str32 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    140         String str33 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy";
    141         String lc = "abcdefg";
    142         String uc = "ABCDEFG";
    143         Object blah = new Object();
    144 
    145         for (int i = 0; i < 100; i++) {
    146             String y = lc.toUpperCase();
    147             Assert.assertTrue(y.equals(uc));
    148         }
    149 
    150         Assert.assertEquals(str32.compareTo(str33), -1);
    151         Assert.assertEquals(str33.compareTo(str32), 1);
    152 
    153         Assert.assertTrue(test.equals(test));
    154         Assert.assertTrue(test.equals(test1));
    155         Assert.assertFalse(test.equals(test2));
    156 
    157         Assert.assertEquals(test.compareTo(test1), 0);
    158         Assert.assertTrue(test1.compareTo(test2) > 0);
    159         Assert.assertTrue(test2.compareTo(test1) < 0);
    160 
    161         /* compare string with a nonzero offset, in left/right side */
    162         Assert.assertEquals(test.compareTo(sub), 0);
    163         Assert.assertEquals(sub.compareTo(test), 0);
    164         Assert.assertTrue(test.equals(sub));
    165         Assert.assertTrue(sub.equals(test));
    166         /* same base, one is a substring */
    167         Assert.assertFalse(offset.equals(sub));
    168         Assert.assertFalse(sub.equals(offset));
    169         /* wrong class */
    170         Assert.assertFalse(test.equals(blah));
    171 
    172         /* null ptr - throw */
    173         try {
    174             test.compareTo(null);
    175             Assert.fail("didn't get expected npe");
    176         } catch (NullPointerException npe) {
    177         }
    178         /* null ptr - ok */
    179         Assert.assertFalse(test.equals(null));
    180 
    181         test = test.substring(1);
    182         Assert.assertTrue(test.equals("123456789"));
    183         Assert.assertFalse(test.equals(test1));
    184 
    185         test = test.substring(1);
    186         Assert.assertTrue(test.equals("23456789"));
    187 
    188         test = test.substring(1);
    189         Assert.assertTrue(test.equals("3456789"));
    190 
    191         test = test.substring(1);
    192         Assert.assertTrue(test.equals("456789"));
    193 
    194         test = test.substring(3,5);
    195         Assert.assertTrue(test.equals("78"));
    196 
    197         test = "this/is/a/path";
    198         String[] strings = test.split("/");
    199         Assert.assertEquals(4, strings.length);
    200 
    201         Assert.assertEquals("this is a path", test.replaceAll("/", " "));
    202         Assert.assertEquals("this is a path", test.replace("/", " "));
    203     }
    204 
    205 }
    206