• 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     }
28 
b2296099Test()29     static void b2296099Test() throws Exception {
30        int x = -1190771042;
31        int dist = 360530809;
32        int xl = -1190771042;
33        int distl = 360530809;
34 
35        for (int i = 0; i < 100000; i++) {
36            int b = rotateLeft(x, dist);
37            if (b != 1030884493)
38                throw new RuntimeException("Unexpected value: " + b
39                        + " after " + i + " iterations");
40        }
41        for (int i = 0; i < 100000; i++) {
42            long bl = rotateLeft(xl, distl);
43            if (bl != 1030884493)
44                throw new RuntimeException("Unexpected value: " + bl
45                        + " after " + i + " iterations");
46        }
47        System.out.println("b2296099 passes");
48    }
49 
rotateLeft(int i, int distance)50     static int rotateLeft(int i, int distance) {
51         return ((i << distance) | (i >>> (-distance)));
52     }
53 
b2302318Test()54     static void b2302318Test() {
55         System.gc();
56 
57         SpinThread slow = new SpinThread(Thread.MIN_PRIORITY);
58         SpinThread fast1 = new SpinThread(Thread.NORM_PRIORITY);
59         SpinThread fast2 = new SpinThread(Thread.MAX_PRIORITY);
60 
61         slow.setDaemon(true);
62         fast1.setDaemon(true);
63         fast2.setDaemon(true);
64 
65         fast2.start();
66         slow.start();
67         fast1.start();
68         try {
69             Thread.sleep(3000);
70         } catch (InterruptedException ie) {/*ignore */}
71         System.gc();
72 
73         System.out.println("b2302318 passes");
74     }
75 
b2487514Test()76     static void b2487514Test() {
77         PriorityBlockingQueue q = new PriorityBlockingQueue(10);
78         int catchCount = 0;
79 
80         q.offer(new Integer(0));
81         /*
82          * Warm up the code cache to have toArray() compiled. The key here is
83          * to pass a compatible type so that there are no exceptions when
84          * executing the method body (ie the APUT_OBJECT bytecode).
85          */
86         for (int i = 0; i < 1000; i++) {
87             Integer[] ints = (Integer[]) q.toArray(new Integer[5]);
88         }
89 
90         /* Now pass an incompatible type which is guaranteed to throw */
91         for (int i = 0; i < 1000; i++) {
92             try {
93                 Object[] obj = q.toArray(new String[5]);
94             }
95             catch (ArrayStoreException  success) {
96                 catchCount++;
97             }
98         }
99 
100         if (catchCount == 1000) {
101             System.out.println("b2487514 passes");
102         }
103         else {
104             System.out.println("b2487514 fails: catchCount is " + catchCount +
105                                " (expecting 1000)");
106         }
107     }
108 }
109 
110 class SpinThread extends Thread {
111     int mPriority;
112 
SpinThread(int prio)113     SpinThread(int prio) {
114         super("Spin prio=" + prio);
115         mPriority = prio;
116     }
117 
run()118     public void run() {
119         setPriority(mPriority);
120         while (true) {}
121     }
122 }
123