• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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 import java.util.concurrent.*;
18 
19 /**
20  * Test for Jit regressions.
21  */
22 public class Main {
main(String args[])23     public static void main(String args[]) throws Exception {
24         b2296099Test();
25         b2302318Test();
26         b2487514Test();
27         b5884080Test();
28         zeroTest();
29     }
30 
b2296099Test()31     static void b2296099Test() throws Exception {
32        int x = -1190771042;
33        int dist = 360530809;
34        int xl = -1190771042;
35        int distl = 360530809;
36 
37        for (int i = 0; i < 100000; i++) {
38            int b = rotateLeft(x, dist);
39            if (b != 1030884493)
40                throw new RuntimeException("Unexpected value: " + b
41                        + " after " + i + " iterations");
42        }
43        for (int i = 0; i < 100000; i++) {
44            long bl = rotateLeft(xl, distl);
45            if (bl != 1030884493)
46                throw new RuntimeException("Unexpected value: " + bl
47                        + " after " + i + " iterations");
48        }
49        System.out.println("b2296099 passes");
50    }
51 
rotateLeft(int i, int distance)52     static int rotateLeft(int i, int distance) {
53         return ((i << distance) | (i >>> (-distance)));
54     }
55 
b2302318Test()56     static void b2302318Test() {
57         System.gc();
58 
59         SpinThread slow = new SpinThread(Thread.MIN_PRIORITY);
60         SpinThread fast1 = new SpinThread(Thread.NORM_PRIORITY);
61         SpinThread fast2 = new SpinThread(Thread.MAX_PRIORITY);
62 
63         slow.setDaemon(true);
64         fast1.setDaemon(true);
65         fast2.setDaemon(true);
66 
67         fast2.start();
68         slow.start();
69         fast1.start();
70         try {
71             Thread.sleep(3000);
72         } catch (InterruptedException ie) {/*ignore */}
73         System.gc();
74 
75         System.out.println("b2302318 passes");
76     }
77 
b2487514Test()78     static void b2487514Test() {
79         PriorityBlockingQueue q = new PriorityBlockingQueue(10);
80         int catchCount = 0;
81 
82         q.offer(new Integer(0));
83         /*
84          * Warm up the code cache to have toArray() compiled. The key here is
85          * to pass a compatible type so that there are no exceptions when
86          * executing the method body (ie the APUT_OBJECT bytecode).
87          */
88         for (int i = 0; i < 1000; i++) {
89             Integer[] ints = (Integer[]) q.toArray(new Integer[5]);
90         }
91 
92         /* Now pass an incompatible type which is guaranteed to throw */
93         for (int i = 0; i < 1000; i++) {
94             try {
95                 Object[] obj = q.toArray(new String[5]);
96             }
97             catch (ArrayStoreException  success) {
98                 catchCount++;
99             }
100         }
101 
102         if (catchCount == 1000) {
103             System.out.println("b2487514 passes");
104         }
105         else {
106             System.out.println("b2487514 fails: catchCount is " + catchCount +
107                                " (expecting 1000)");
108         }
109     }
110 
b5884080Test()111     static void b5884080Test() {
112         int vA = 1;
113 
114         int l = 0;
115         do {
116             int k = 0;
117             do
118                 vA += 1;
119             while(++k < 100);
120         } while (++l < 1000);
121         if (vA == 100001) {
122             System.out.println("b5884080 passes");
123         }
124         else {
125             System.out.println("b5884080 fails: vA is " + vA +
126                                " (expecting 100001)");
127         }
128     }
129 
zeroTest()130     static void zeroTest() throws Exception {
131         ZeroTests zt = new ZeroTests();
132         try {
133             zt.longDivTest();
134         } catch (Throwable th) {
135             th.printStackTrace();
136         }
137         try {
138             zt.longModTest();
139         } catch (Throwable th) {
140             th.printStackTrace();
141         }
142     }
143 }
144 
145 class SpinThread extends Thread {
146     int mPriority;
147 
SpinThread(int prio)148     SpinThread(int prio) {
149         super("Spin prio=" + prio);
150         mPriority = prio;
151     }
152 
run()153     public void run() {
154         setPriority(mPriority);
155         while (true) {}
156     }
157 }
158