xref: /aosp_15_r20/art/test/107-int-math2/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2011 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker // clang-format off
18*795d594fSAndroid Build Coastguard Worker 
19*795d594fSAndroid Build Coastguard Worker class Main extends IntMathBase {
20*795d594fSAndroid Build Coastguard Worker 
21*795d594fSAndroid Build Coastguard Worker     public static boolean mBoolean1, mBoolean2;
22*795d594fSAndroid Build Coastguard Worker     public static byte mByte1, mByte2;
23*795d594fSAndroid Build Coastguard Worker     public static char mChar1, mChar2;
24*795d594fSAndroid Build Coastguard Worker     public static short mShort1, mShort2;
25*795d594fSAndroid Build Coastguard Worker     public static int mInt1, mInt2;
26*795d594fSAndroid Build Coastguard Worker     public static float mFloat1, mFloat2;
27*795d594fSAndroid Build Coastguard Worker     public static long mLong1, mLong2;
28*795d594fSAndroid Build Coastguard Worker     public static double mDouble1, mDouble2;
29*795d594fSAndroid Build Coastguard Worker     public static volatile long mVolatileLong1, mVolatileLong2;
30*795d594fSAndroid Build Coastguard Worker 
31*795d594fSAndroid Build Coastguard Worker 
32*795d594fSAndroid Build Coastguard Worker     private int foo_;
33*795d594fSAndroid Build Coastguard Worker 
Main(int stuff)34*795d594fSAndroid Build Coastguard Worker     public Main(int stuff) {
35*795d594fSAndroid Build Coastguard Worker         super();
36*795d594fSAndroid Build Coastguard Worker         foo_ = stuff;
37*795d594fSAndroid Build Coastguard Worker     }
38*795d594fSAndroid Build Coastguard Worker 
Main()39*795d594fSAndroid Build Coastguard Worker     public Main() {
40*795d594fSAndroid Build Coastguard Worker         super();
41*795d594fSAndroid Build Coastguard Worker         foo_ = 123;
42*795d594fSAndroid Build Coastguard Worker     }
43*795d594fSAndroid Build Coastguard Worker 
44*795d594fSAndroid Build Coastguard Worker     /* Regression test: triggered an SSA renaming bug. */
divideLongByBillion(long a)45*795d594fSAndroid Build Coastguard Worker     static long divideLongByBillion(long a) {
46*795d594fSAndroid Build Coastguard Worker         long quot;
47*795d594fSAndroid Build Coastguard Worker         long rem;
48*795d594fSAndroid Build Coastguard Worker 
49*795d594fSAndroid Build Coastguard Worker         if (a >= 0) {
50*795d594fSAndroid Build Coastguard Worker             long bLong = 1000000000L;
51*795d594fSAndroid Build Coastguard Worker             quot = (a / bLong);
52*795d594fSAndroid Build Coastguard Worker             rem = (a % bLong);
53*795d594fSAndroid Build Coastguard Worker         } else {
54*795d594fSAndroid Build Coastguard Worker             /*
55*795d594fSAndroid Build Coastguard Worker              * Make the dividend positive shifting it right by 1 bit then get
56*795d594fSAndroid Build Coastguard Worker              * the quotient an remainder and correct them properly
57*795d594fSAndroid Build Coastguard Worker              */
58*795d594fSAndroid Build Coastguard Worker             long aPos = a >>> 1;
59*795d594fSAndroid Build Coastguard Worker             long bPos = 1000000000L >>> 1;
60*795d594fSAndroid Build Coastguard Worker             quot = aPos / bPos;
61*795d594fSAndroid Build Coastguard Worker             rem = aPos % bPos;
62*795d594fSAndroid Build Coastguard Worker             // double the remainder and add 1 if 'a' is odd
63*795d594fSAndroid Build Coastguard Worker             rem = (rem << 1) + (a & 1);
64*795d594fSAndroid Build Coastguard Worker         }
65*795d594fSAndroid Build Coastguard Worker         return ((rem << 32) | (quot & 0xFFFFFFFFL));
66*795d594fSAndroid Build Coastguard Worker     }
67*795d594fSAndroid Build Coastguard Worker 
68*795d594fSAndroid Build Coastguard Worker 
instanceTest(int x)69*795d594fSAndroid Build Coastguard Worker     static int instanceTest(int x) {
70*795d594fSAndroid Build Coastguard Worker         IntMathBase a = new IntMathBase();
71*795d594fSAndroid Build Coastguard Worker         Main b = new Main();
72*795d594fSAndroid Build Coastguard Worker 
73*795d594fSAndroid Build Coastguard Worker         if (!(null instanceof IntMathBase)) {
74*795d594fSAndroid Build Coastguard Worker             x = x + 42;
75*795d594fSAndroid Build Coastguard Worker         }
76*795d594fSAndroid Build Coastguard Worker 
77*795d594fSAndroid Build Coastguard Worker         if (a instanceof IntMathBase) {
78*795d594fSAndroid Build Coastguard Worker             x = x * 2;
79*795d594fSAndroid Build Coastguard Worker         }
80*795d594fSAndroid Build Coastguard Worker 
81*795d594fSAndroid Build Coastguard Worker         if (a instanceof Main) {
82*795d594fSAndroid Build Coastguard Worker             x = x + 13;
83*795d594fSAndroid Build Coastguard Worker         }
84*795d594fSAndroid Build Coastguard Worker 
85*795d594fSAndroid Build Coastguard Worker         if (b instanceof IntMathBase) {
86*795d594fSAndroid Build Coastguard Worker             x = x -1;
87*795d594fSAndroid Build Coastguard Worker         }
88*795d594fSAndroid Build Coastguard Worker 
89*795d594fSAndroid Build Coastguard Worker         if (b instanceof Main) {
90*795d594fSAndroid Build Coastguard Worker             x = x + 1333;
91*795d594fSAndroid Build Coastguard Worker         }
92*795d594fSAndroid Build Coastguard Worker         return x;
93*795d594fSAndroid Build Coastguard Worker     }
94*795d594fSAndroid Build Coastguard Worker 
tryThing()95*795d594fSAndroid Build Coastguard Worker     int tryThing() {
96*795d594fSAndroid Build Coastguard Worker         int val = super.tryThing();
97*795d594fSAndroid Build Coastguard Worker         return val + 10;
98*795d594fSAndroid Build Coastguard Worker     }
99*795d594fSAndroid Build Coastguard Worker 
superTest(int x)100*795d594fSAndroid Build Coastguard Worker     static int superTest(int x) {
101*795d594fSAndroid Build Coastguard Worker         Main instance = new Main();
102*795d594fSAndroid Build Coastguard Worker         Main base = instance;
103*795d594fSAndroid Build Coastguard Worker         int val1 = instance.tryThing();
104*795d594fSAndroid Build Coastguard Worker         int val2 = base.tryThing();
105*795d594fSAndroid Build Coastguard Worker         return val1 + val2 + x;
106*795d594fSAndroid Build Coastguard Worker     }
107*795d594fSAndroid Build Coastguard Worker 
constClassTest(int x)108*795d594fSAndroid Build Coastguard Worker     static int constClassTest(int x) {
109*795d594fSAndroid Build Coastguard Worker         Class<?> c = String.class;
110*795d594fSAndroid Build Coastguard Worker         if (c != null) {
111*795d594fSAndroid Build Coastguard Worker            return x * 2;
112*795d594fSAndroid Build Coastguard Worker         } else {
113*795d594fSAndroid Build Coastguard Worker            return x;
114*795d594fSAndroid Build Coastguard Worker         }
115*795d594fSAndroid Build Coastguard Worker     }
116*795d594fSAndroid Build Coastguard Worker 
constStringTest(int x)117*795d594fSAndroid Build Coastguard Worker     static int constStringTest(int x) {
118*795d594fSAndroid Build Coastguard Worker         String str = "Hello World!";
119*795d594fSAndroid Build Coastguard Worker         return x + str.length();
120*795d594fSAndroid Build Coastguard Worker     }
121*795d594fSAndroid Build Coastguard Worker 
throwNullPointerException()122*795d594fSAndroid Build Coastguard Worker     static void throwNullPointerException() {
123*795d594fSAndroid Build Coastguard Worker         throw new NullPointerException();
124*795d594fSAndroid Build Coastguard Worker     }
125*795d594fSAndroid Build Coastguard Worker 
throwImplicitNullPointerException()126*795d594fSAndroid Build Coastguard Worker     static void throwImplicitNullPointerException() {
127*795d594fSAndroid Build Coastguard Worker       throw null;
128*795d594fSAndroid Build Coastguard Worker     }
129*795d594fSAndroid Build Coastguard Worker 
catchBlock(int x)130*795d594fSAndroid Build Coastguard Worker     static int catchBlock(int x) {
131*795d594fSAndroid Build Coastguard Worker         try {
132*795d594fSAndroid Build Coastguard Worker             if (x == 1000) {
133*795d594fSAndroid Build Coastguard Worker                 x += 123;
134*795d594fSAndroid Build Coastguard Worker                 throwNullPointerException();
135*795d594fSAndroid Build Coastguard Worker             } else {
136*795d594fSAndroid Build Coastguard Worker                 x += 321;
137*795d594fSAndroid Build Coastguard Worker                 throwImplicitNullPointerException();
138*795d594fSAndroid Build Coastguard Worker             }
139*795d594fSAndroid Build Coastguard Worker         } catch (NullPointerException npe) {
140*795d594fSAndroid Build Coastguard Worker             x += 456;
141*795d594fSAndroid Build Coastguard Worker         }
142*795d594fSAndroid Build Coastguard Worker         return x;
143*795d594fSAndroid Build Coastguard Worker     }
144*795d594fSAndroid Build Coastguard Worker 
catchBlockNoThrow(int x)145*795d594fSAndroid Build Coastguard Worker     static int catchBlockNoThrow(int x) {
146*795d594fSAndroid Build Coastguard Worker         try {
147*795d594fSAndroid Build Coastguard Worker             x += 123;
148*795d594fSAndroid Build Coastguard Worker         } catch (NullPointerException npe) {
149*795d594fSAndroid Build Coastguard Worker             x += 456;
150*795d594fSAndroid Build Coastguard Worker         }
151*795d594fSAndroid Build Coastguard Worker         return x;
152*795d594fSAndroid Build Coastguard Worker     }
153*795d594fSAndroid Build Coastguard Worker 
staticFieldTest(int x)154*795d594fSAndroid Build Coastguard Worker     static int staticFieldTest(int x) {
155*795d594fSAndroid Build Coastguard Worker         mBoolean1 = true;
156*795d594fSAndroid Build Coastguard Worker         mBoolean2 = false;
157*795d594fSAndroid Build Coastguard Worker         mByte1 = 127;
158*795d594fSAndroid Build Coastguard Worker         mByte2 = -128;
159*795d594fSAndroid Build Coastguard Worker         mChar1 = 32767;
160*795d594fSAndroid Build Coastguard Worker         mChar2 = 65535;
161*795d594fSAndroid Build Coastguard Worker         mShort1 = 32767;
162*795d594fSAndroid Build Coastguard Worker         mShort2 = -32768;
163*795d594fSAndroid Build Coastguard Worker         mInt1 = 65537;
164*795d594fSAndroid Build Coastguard Worker         mInt2 = -65537;
165*795d594fSAndroid Build Coastguard Worker         mFloat1 = 3.1415f;
166*795d594fSAndroid Build Coastguard Worker         mFloat2 = -1.0f / 0.0f;                // -inf
167*795d594fSAndroid Build Coastguard Worker         mLong1 = 1234605616436508552L;     // 0x1122334455667788
168*795d594fSAndroid Build Coastguard Worker         mLong2 = -1234605616436508552L;
169*795d594fSAndroid Build Coastguard Worker         mDouble1 = 3.1415926535;
170*795d594fSAndroid Build Coastguard Worker         mDouble2 = 1.0 / 0.0;               // +inf
171*795d594fSAndroid Build Coastguard Worker         mVolatileLong1 = mLong1 - 1;
172*795d594fSAndroid Build Coastguard Worker         mVolatileLong2 = mLong2 + 1;
173*795d594fSAndroid Build Coastguard Worker 
174*795d594fSAndroid Build Coastguard Worker         if (!mBoolean1) { return 10; }
175*795d594fSAndroid Build Coastguard Worker         if (mBoolean2) { return 11; }
176*795d594fSAndroid Build Coastguard Worker         if (mByte1 != 127) { return 12; }
177*795d594fSAndroid Build Coastguard Worker         if (mByte2 != -128) { return 13; }
178*795d594fSAndroid Build Coastguard Worker         if (mChar1 != 32767) { return 14; }
179*795d594fSAndroid Build Coastguard Worker         if (mChar2 != 65535) { return 15; }
180*795d594fSAndroid Build Coastguard Worker         if (mShort1 != 32767) { return 16; }
181*795d594fSAndroid Build Coastguard Worker         if (mShort2 != -32768) { return 17; }
182*795d594fSAndroid Build Coastguard Worker         if (mInt1 != 65537) { return 18; }
183*795d594fSAndroid Build Coastguard Worker         if (mInt2 != -65537) { return 19; }
184*795d594fSAndroid Build Coastguard Worker         if (!(mFloat1 > 3.141f && mFloat1 < 3.142f)) { return 20; }
185*795d594fSAndroid Build Coastguard Worker         if (mFloat2 >= mFloat1) { return 21; }
186*795d594fSAndroid Build Coastguard Worker         if (mLong1 != 1234605616436508552L) { return 22; }
187*795d594fSAndroid Build Coastguard Worker         if (mLong2 != -1234605616436508552L) { return 23; }
188*795d594fSAndroid Build Coastguard Worker         if (!(mDouble1 > 3.141592653 && mDouble1 < 3.141592654)) { return 24; }
189*795d594fSAndroid Build Coastguard Worker         if (mDouble2 <= mDouble1) { return 25; }
190*795d594fSAndroid Build Coastguard Worker         if (mVolatileLong1 != 1234605616436508551L) { return 26; }
191*795d594fSAndroid Build Coastguard Worker         if (mVolatileLong2 != -1234605616436508551L) { return 27; }
192*795d594fSAndroid Build Coastguard Worker 
193*795d594fSAndroid Build Coastguard Worker         return 1000 + x;
194*795d594fSAndroid Build Coastguard Worker     }
195*795d594fSAndroid Build Coastguard Worker 
196*795d594fSAndroid Build Coastguard Worker     /*
197*795d594fSAndroid Build Coastguard Worker      * Try to cause some unary operations.
198*795d594fSAndroid Build Coastguard Worker      */
unopTest(int x)199*795d594fSAndroid Build Coastguard Worker     static int unopTest(int x) {
200*795d594fSAndroid Build Coastguard Worker         x = -x;
201*795d594fSAndroid Build Coastguard Worker         x ^= 0xffffffff;
202*795d594fSAndroid Build Coastguard Worker         return x;
203*795d594fSAndroid Build Coastguard Worker     }
204*795d594fSAndroid Build Coastguard Worker 
shiftTest1()205*795d594fSAndroid Build Coastguard Worker     static int shiftTest1() {
206*795d594fSAndroid Build Coastguard Worker         final int[] mBytes = {
207*795d594fSAndroid Build Coastguard Worker             0x11, 0x22, 0x33, 0x44, 0x88, 0x99, 0xaa, 0xbb
208*795d594fSAndroid Build Coastguard Worker         };
209*795d594fSAndroid Build Coastguard Worker         long l;
210*795d594fSAndroid Build Coastguard Worker         int i1, i2;
211*795d594fSAndroid Build Coastguard Worker 
212*795d594fSAndroid Build Coastguard Worker         if (mBytes[0] != 0x11) return 20;
213*795d594fSAndroid Build Coastguard Worker         if (mBytes[1] != 0x22) return 21;
214*795d594fSAndroid Build Coastguard Worker         if (mBytes[2] != 0x33) return 22;
215*795d594fSAndroid Build Coastguard Worker         if (mBytes[3] != 0x44) return 23;
216*795d594fSAndroid Build Coastguard Worker         if (mBytes[4] != 0x88) return 24;
217*795d594fSAndroid Build Coastguard Worker         if (mBytes[5] != 0x99) return 25;
218*795d594fSAndroid Build Coastguard Worker         if (mBytes[6] != 0xaa) return 26;
219*795d594fSAndroid Build Coastguard Worker         if (mBytes[7] != 0xbb) return 27;
220*795d594fSAndroid Build Coastguard Worker 
221*795d594fSAndroid Build Coastguard Worker         i1 = mBytes[0] | mBytes[1] << 8 | mBytes[2] << 16 | mBytes[3] << 24;
222*795d594fSAndroid Build Coastguard Worker         i2 = mBytes[4] | mBytes[5] << 8 | mBytes[6] << 16 | mBytes[7] << 24;
223*795d594fSAndroid Build Coastguard Worker         l = i1 | ((long)i2 << 32);
224*795d594fSAndroid Build Coastguard Worker 
225*795d594fSAndroid Build Coastguard Worker         if (i1 != 0x44332211) { return 0x80000000 | i1; }
226*795d594fSAndroid Build Coastguard Worker         if (i2 != 0xbbaa9988) { return 2; }
227*795d594fSAndroid Build Coastguard Worker         if (l != 0xbbaa998844332211L) { return 3; }
228*795d594fSAndroid Build Coastguard Worker 
229*795d594fSAndroid Build Coastguard Worker         l = (long)mBytes[0]
230*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[1] << 8
231*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[2] << 16
232*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[3] << 24
233*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[4] << 32
234*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[5] << 40
235*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[6] << 48
236*795d594fSAndroid Build Coastguard Worker                 | (long)mBytes[7] << 56;
237*795d594fSAndroid Build Coastguard Worker 
238*795d594fSAndroid Build Coastguard Worker         if (l != 0xbbaa998844332211L) { return 4; }
239*795d594fSAndroid Build Coastguard Worker         return 0;
240*795d594fSAndroid Build Coastguard Worker     }
241*795d594fSAndroid Build Coastguard Worker 
shiftTest2()242*795d594fSAndroid Build Coastguard Worker     static int shiftTest2() {
243*795d594fSAndroid Build Coastguard Worker 
244*795d594fSAndroid Build Coastguard Worker         long    a = 0x11;
245*795d594fSAndroid Build Coastguard Worker         long    b = 0x22;
246*795d594fSAndroid Build Coastguard Worker         long    c = 0x33;
247*795d594fSAndroid Build Coastguard Worker         long    d = 0x44;
248*795d594fSAndroid Build Coastguard Worker         long    e = 0x55;
249*795d594fSAndroid Build Coastguard Worker         long    f = 0x66;
250*795d594fSAndroid Build Coastguard Worker         long    g = 0x77;
251*795d594fSAndroid Build Coastguard Worker         long    h = 0x88;
252*795d594fSAndroid Build Coastguard Worker 
253*795d594fSAndroid Build Coastguard Worker         long    result = ((a << 56) | (b << 48) | (c << 40) | (d << 32) |
254*795d594fSAndroid Build Coastguard Worker                           (e << 24) | (f << 16) | (g <<  8) | h);
255*795d594fSAndroid Build Coastguard Worker 
256*795d594fSAndroid Build Coastguard Worker         if (result != 0x1122334455667788L) { return 1; }
257*795d594fSAndroid Build Coastguard Worker         return 0;
258*795d594fSAndroid Build Coastguard Worker     }
259*795d594fSAndroid Build Coastguard Worker 
unsignedShiftTest()260*795d594fSAndroid Build Coastguard Worker     static int unsignedShiftTest() {
261*795d594fSAndroid Build Coastguard Worker         byte b = -4;
262*795d594fSAndroid Build Coastguard Worker         short s = -4;
263*795d594fSAndroid Build Coastguard Worker         char c = 0xfffc;
264*795d594fSAndroid Build Coastguard Worker         int i = -4;
265*795d594fSAndroid Build Coastguard Worker 
266*795d594fSAndroid Build Coastguard Worker         b >>>= 4;
267*795d594fSAndroid Build Coastguard Worker         s >>>= 4;
268*795d594fSAndroid Build Coastguard Worker         c >>>= 4;
269*795d594fSAndroid Build Coastguard Worker         i >>>= 4;
270*795d594fSAndroid Build Coastguard Worker 
271*795d594fSAndroid Build Coastguard Worker         if ((int) b != -1) { return 1; }
272*795d594fSAndroid Build Coastguard Worker         if ((int) s != -1) { return 2; }
273*795d594fSAndroid Build Coastguard Worker         if ((int) c != 0x0fff) { return 3; }
274*795d594fSAndroid Build Coastguard Worker         if (i != 268435455) { return 4; }
275*795d594fSAndroid Build Coastguard Worker         return 0;
276*795d594fSAndroid Build Coastguard Worker     }
277*795d594fSAndroid Build Coastguard Worker 
convTest()278*795d594fSAndroid Build Coastguard Worker     static int convTest() {
279*795d594fSAndroid Build Coastguard Worker 
280*795d594fSAndroid Build Coastguard Worker         float f;
281*795d594fSAndroid Build Coastguard Worker         double d;
282*795d594fSAndroid Build Coastguard Worker         int i;
283*795d594fSAndroid Build Coastguard Worker         long l;
284*795d594fSAndroid Build Coastguard Worker 
285*795d594fSAndroid Build Coastguard Worker         /* int --> long */
286*795d594fSAndroid Build Coastguard Worker         i = 7654;
287*795d594fSAndroid Build Coastguard Worker         l = (long) i;
288*795d594fSAndroid Build Coastguard Worker         if (l != 7654L) { return 1; }
289*795d594fSAndroid Build Coastguard Worker 
290*795d594fSAndroid Build Coastguard Worker         i = -7654;
291*795d594fSAndroid Build Coastguard Worker         l = (long) i;
292*795d594fSAndroid Build Coastguard Worker         if (l != -7654L) { return 2; }
293*795d594fSAndroid Build Coastguard Worker 
294*795d594fSAndroid Build Coastguard Worker         /* long --> int (with truncation) */
295*795d594fSAndroid Build Coastguard Worker         l = 5678956789L;
296*795d594fSAndroid Build Coastguard Worker         i = (int) l;
297*795d594fSAndroid Build Coastguard Worker         if (i != 1383989493) { return 3; }
298*795d594fSAndroid Build Coastguard Worker 
299*795d594fSAndroid Build Coastguard Worker         l = -5678956789L;
300*795d594fSAndroid Build Coastguard Worker         i = (int) l;
301*795d594fSAndroid Build Coastguard Worker         if (i != -1383989493) { return 4; }
302*795d594fSAndroid Build Coastguard Worker 
303*795d594fSAndroid Build Coastguard Worker         /* long --> double */
304*795d594fSAndroid Build Coastguard Worker         l = 0x7FFFFFFFL;
305*795d594fSAndroid Build Coastguard Worker         d = (double) l;
306*795d594fSAndroid Build Coastguard Worker         if (Double.doubleToRawLongBits(d) != 0x41dfffffffc00000L) { return 5; }
307*795d594fSAndroid Build Coastguard Worker 
308*795d594fSAndroid Build Coastguard Worker         l = 0xFFFFFFFFL;
309*795d594fSAndroid Build Coastguard Worker         d = (double) l;
310*795d594fSAndroid Build Coastguard Worker         if (Double.doubleToRawLongBits(d) != 0x41efffffffe00000L) { return 6; }
311*795d594fSAndroid Build Coastguard Worker 
312*795d594fSAndroid Build Coastguard Worker         l = 0x7FFFFFFFFFFFFFFFL;
313*795d594fSAndroid Build Coastguard Worker         d = (double) l;
314*795d594fSAndroid Build Coastguard Worker         if (Double.doubleToRawLongBits(d) != 0x43e0000000000000L) { return 7; }
315*795d594fSAndroid Build Coastguard Worker 
316*795d594fSAndroid Build Coastguard Worker         l = 0xFFFFFFFFFFFFFFFFL;
317*795d594fSAndroid Build Coastguard Worker         d = (double) l;
318*795d594fSAndroid Build Coastguard Worker         if (Double.doubleToRawLongBits(d) != 0xbff0000000000000L) { return 8; }
319*795d594fSAndroid Build Coastguard Worker 
320*795d594fSAndroid Build Coastguard Worker         return 0;
321*795d594fSAndroid Build Coastguard Worker     }
322*795d594fSAndroid Build Coastguard Worker 
charSubTest()323*795d594fSAndroid Build Coastguard Worker     static int charSubTest() {
324*795d594fSAndroid Build Coastguard Worker 
325*795d594fSAndroid Build Coastguard Worker         char char1 = 0x00e9;
326*795d594fSAndroid Build Coastguard Worker         char char2 = 0xffff;
327*795d594fSAndroid Build Coastguard Worker         int i;
328*795d594fSAndroid Build Coastguard Worker 
329*795d594fSAndroid Build Coastguard Worker         /* chars are unsigned-expanded to ints before subtraction */
330*795d594fSAndroid Build Coastguard Worker         i = char1 - char2;
331*795d594fSAndroid Build Coastguard Worker         if (i != 0xffff00ea) { return 1; }
332*795d594fSAndroid Build Coastguard Worker         return 0;
333*795d594fSAndroid Build Coastguard Worker     }
334*795d594fSAndroid Build Coastguard Worker 
335*795d594fSAndroid Build Coastguard Worker     /*
336*795d594fSAndroid Build Coastguard Worker      * We pass in the arguments and return the results so the compiler
337*795d594fSAndroid Build Coastguard Worker      * doesn't do the math for us.  (x=70000, y=-3)
338*795d594fSAndroid Build Coastguard Worker      */
intOperTest(int x, int y)339*795d594fSAndroid Build Coastguard Worker     static int intOperTest(int x, int y) {
340*795d594fSAndroid Build Coastguard Worker         int[] results = new int[10];
341*795d594fSAndroid Build Coastguard Worker 
342*795d594fSAndroid Build Coastguard Worker         /* this seems to generate "op-int" instructions */
343*795d594fSAndroid Build Coastguard Worker         results[0] = x + y;
344*795d594fSAndroid Build Coastguard Worker         results[1] = x - y;
345*795d594fSAndroid Build Coastguard Worker         results[2] = x * y;
346*795d594fSAndroid Build Coastguard Worker         results[3] = x * x;
347*795d594fSAndroid Build Coastguard Worker         results[4] = x / y;
348*795d594fSAndroid Build Coastguard Worker         results[5] = x % -y;
349*795d594fSAndroid Build Coastguard Worker         results[6] = x & y;
350*795d594fSAndroid Build Coastguard Worker         results[7] = x | y;
351*795d594fSAndroid Build Coastguard Worker         results[8] = x ^ y;
352*795d594fSAndroid Build Coastguard Worker 
353*795d594fSAndroid Build Coastguard Worker         /* this seems to generate "op-int/2addr" instructions */
354*795d594fSAndroid Build Coastguard Worker         results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
355*795d594fSAndroid Build Coastguard Worker 
356*795d594fSAndroid Build Coastguard Worker         /* check this edge case while we're here (div-int/2addr) */
357*795d594fSAndroid Build Coastguard Worker         int minInt = -2147483648;
358*795d594fSAndroid Build Coastguard Worker         int negOne = -results[5];
359*795d594fSAndroid Build Coastguard Worker         int plusOne = 1;
360*795d594fSAndroid Build Coastguard Worker         int result = (((minInt + plusOne) - plusOne) / negOne) / negOne;
361*795d594fSAndroid Build Coastguard Worker         int shouldBeZero = minInt % negOne;
362*795d594fSAndroid Build Coastguard Worker 
363*795d594fSAndroid Build Coastguard Worker         if (result != minInt) { return 1;};
364*795d594fSAndroid Build Coastguard Worker         if (results[0] != 69997) { return 2;};
365*795d594fSAndroid Build Coastguard Worker         if (results[1] != 70003) { return 3;};
366*795d594fSAndroid Build Coastguard Worker         if (results[2] != -210000) { return 4;};
367*795d594fSAndroid Build Coastguard Worker         if (results[3] != 605032704) { return 5;};
368*795d594fSAndroid Build Coastguard Worker         if (results[4] != -23333) { return 6;};
369*795d594fSAndroid Build Coastguard Worker         if (results[5] != 1) { return 7;};
370*795d594fSAndroid Build Coastguard Worker         if (results[6] != 70000) { return 8;};
371*795d594fSAndroid Build Coastguard Worker         if (results[7] != -3) { return 9;};
372*795d594fSAndroid Build Coastguard Worker         if (results[8] != -70003) { return 10;};
373*795d594fSAndroid Build Coastguard Worker         if (results[9] != 70000) { return 11;};
374*795d594fSAndroid Build Coastguard Worker         if (shouldBeZero != 0) { return 12;};
375*795d594fSAndroid Build Coastguard Worker 
376*795d594fSAndroid Build Coastguard Worker         return 0;
377*795d594fSAndroid Build Coastguard Worker     }
378*795d594fSAndroid Build Coastguard Worker 
379*795d594fSAndroid Build Coastguard Worker     /*
380*795d594fSAndroid Build Coastguard Worker      * More operations, this time with 16-bit constants.  (x=77777)
381*795d594fSAndroid Build Coastguard Worker      */
lit16Test(int x)382*795d594fSAndroid Build Coastguard Worker     static int lit16Test(int x) {
383*795d594fSAndroid Build Coastguard Worker 
384*795d594fSAndroid Build Coastguard Worker         int[] results = new int[10];
385*795d594fSAndroid Build Coastguard Worker 
386*795d594fSAndroid Build Coastguard Worker         /* try to generate op-int/lit16" instructions */
387*795d594fSAndroid Build Coastguard Worker         results[0] = x + 1000;
388*795d594fSAndroid Build Coastguard Worker         results[1] = 1000 - x;
389*795d594fSAndroid Build Coastguard Worker         results[2] = x * 1000;
390*795d594fSAndroid Build Coastguard Worker         results[3] = x / 1000;
391*795d594fSAndroid Build Coastguard Worker         results[4] = x % 1000;
392*795d594fSAndroid Build Coastguard Worker         results[5] = x & 1000;
393*795d594fSAndroid Build Coastguard Worker         results[6] = x | -1000;
394*795d594fSAndroid Build Coastguard Worker         results[7] = x ^ -1000;
395*795d594fSAndroid Build Coastguard Worker         /* use an 16-bit constant that has its MSB (bit-15) set */
396*795d594fSAndroid Build Coastguard Worker         results[8] = x / 32769;
397*795d594fSAndroid Build Coastguard Worker         results[9] = x / -32769;
398*795d594fSAndroid Build Coastguard Worker 
399*795d594fSAndroid Build Coastguard Worker         if (results[0] != 78777) { return 1; }
400*795d594fSAndroid Build Coastguard Worker         if (results[1] != -76777) { return 2; }
401*795d594fSAndroid Build Coastguard Worker         if (results[2] != 77777000) { return 3; }
402*795d594fSAndroid Build Coastguard Worker         if (results[3] != 77) { return 4; }
403*795d594fSAndroid Build Coastguard Worker         if (results[4] != 777) { return 5; }
404*795d594fSAndroid Build Coastguard Worker         if (results[5] != 960) { return 6; }
405*795d594fSAndroid Build Coastguard Worker         if (results[6] != -39) { return 7; }
406*795d594fSAndroid Build Coastguard Worker         if (results[7] != -76855) { return 8; }
407*795d594fSAndroid Build Coastguard Worker         if (results[8] != 2) { return 9; }
408*795d594fSAndroid Build Coastguard Worker         if (results[9] != -2) { return 10; }
409*795d594fSAndroid Build Coastguard Worker         return 0;
410*795d594fSAndroid Build Coastguard Worker     }
411*795d594fSAndroid Build Coastguard Worker 
412*795d594fSAndroid Build Coastguard Worker     /*
413*795d594fSAndroid Build Coastguard Worker      * More operations, this time with 8-bit constants.  (x=-55555)
414*795d594fSAndroid Build Coastguard Worker      */
lit8Test(int x)415*795d594fSAndroid Build Coastguard Worker     static int lit8Test(int x) {
416*795d594fSAndroid Build Coastguard Worker 
417*795d594fSAndroid Build Coastguard Worker         int[] results = new int[9];
418*795d594fSAndroid Build Coastguard Worker 
419*795d594fSAndroid Build Coastguard Worker         /* try to generate op-int/lit8" instructions */
420*795d594fSAndroid Build Coastguard Worker         results[0] = x + 10;
421*795d594fSAndroid Build Coastguard Worker         results[1] = 10 - x;
422*795d594fSAndroid Build Coastguard Worker         results[2] = x * 10;
423*795d594fSAndroid Build Coastguard Worker         results[3] = x / 10;
424*795d594fSAndroid Build Coastguard Worker         results[4] = x % 10;
425*795d594fSAndroid Build Coastguard Worker         results[5] = x & 10;
426*795d594fSAndroid Build Coastguard Worker         results[6] = x | -10;
427*795d594fSAndroid Build Coastguard Worker         results[7] = x ^ -10;
428*795d594fSAndroid Build Coastguard Worker         results[8] = x * -256;
429*795d594fSAndroid Build Coastguard Worker         int minInt = -2147483648;
430*795d594fSAndroid Build Coastguard Worker         int result = minInt / -1;
431*795d594fSAndroid Build Coastguard Worker         if (result != minInt) {return 1; }
432*795d594fSAndroid Build Coastguard Worker         if (results[0] != -55545) {return 2; }
433*795d594fSAndroid Build Coastguard Worker         if (results[1] != 55565) {return 3; }
434*795d594fSAndroid Build Coastguard Worker         if (results[2] != -555550) {return 4; }
435*795d594fSAndroid Build Coastguard Worker         if (results[3] != -5555) {return 5; }
436*795d594fSAndroid Build Coastguard Worker         if (results[4] != -5) {return 6; }
437*795d594fSAndroid Build Coastguard Worker         if (results[5] != 8) {return 7; }
438*795d594fSAndroid Build Coastguard Worker         if (results[6] != -1) {return 8; }
439*795d594fSAndroid Build Coastguard Worker         if (results[7] != 55563) {return 9; }
440*795d594fSAndroid Build Coastguard Worker         if (results[8] != 14222080) {return 10; }
441*795d594fSAndroid Build Coastguard Worker         return 0;
442*795d594fSAndroid Build Coastguard Worker     }
443*795d594fSAndroid Build Coastguard Worker 
444*795d594fSAndroid Build Coastguard Worker 
445*795d594fSAndroid Build Coastguard Worker     /*
446*795d594fSAndroid Build Coastguard Worker      * Shift some data.  (value=0xff00aa01, dist=8)
447*795d594fSAndroid Build Coastguard Worker      */
intShiftTest(int value, int dist)448*795d594fSAndroid Build Coastguard Worker     static int intShiftTest(int value, int dist) {
449*795d594fSAndroid Build Coastguard Worker         int results[] = new int[4];
450*795d594fSAndroid Build Coastguard Worker         results[0] = value << dist;
451*795d594fSAndroid Build Coastguard Worker         results[1] = value >> dist;
452*795d594fSAndroid Build Coastguard Worker         results[2] = value >>> dist;
453*795d594fSAndroid Build Coastguard Worker         results[3] = (((value << dist) >> dist) >>> dist) << dist;
454*795d594fSAndroid Build Coastguard Worker         if (results[0] != 0x00aa0100) {return 1; }
455*795d594fSAndroid Build Coastguard Worker         if (results[1] != 0xffff00aa) {return 2; }
456*795d594fSAndroid Build Coastguard Worker         if (results[2] != 0x00ff00aa) {return 3; }
457*795d594fSAndroid Build Coastguard Worker         if (results[3] != 0xaa00) {return 4; }
458*795d594fSAndroid Build Coastguard Worker         return 0;
459*795d594fSAndroid Build Coastguard Worker     }
460*795d594fSAndroid Build Coastguard Worker 
461*795d594fSAndroid Build Coastguard Worker     /*
462*795d594fSAndroid Build Coastguard Worker      * We pass in the arguments and return the results so the compiler
463*795d594fSAndroid Build Coastguard Worker      * doesn't do the math for us.  (x=70000000000, y=-3)
464*795d594fSAndroid Build Coastguard Worker      */
longOperTest(long x, long y)465*795d594fSAndroid Build Coastguard Worker     static int longOperTest(long x, long y) {
466*795d594fSAndroid Build Coastguard Worker         long[] results = new long[10];
467*795d594fSAndroid Build Coastguard Worker 
468*795d594fSAndroid Build Coastguard Worker         /* this seems to generate "op-long" instructions */
469*795d594fSAndroid Build Coastguard Worker         results[0] = x + y;
470*795d594fSAndroid Build Coastguard Worker         results[1] = x - y;
471*795d594fSAndroid Build Coastguard Worker         results[2] = x * y;
472*795d594fSAndroid Build Coastguard Worker         results[3] = x * x;
473*795d594fSAndroid Build Coastguard Worker         results[4] = x / y;
474*795d594fSAndroid Build Coastguard Worker         results[5] = x % -y;
475*795d594fSAndroid Build Coastguard Worker         results[6] = x & y;
476*795d594fSAndroid Build Coastguard Worker         results[7] = x | y;
477*795d594fSAndroid Build Coastguard Worker         results[8] = x ^ y;
478*795d594fSAndroid Build Coastguard Worker         /* this seems to generate "op-long/2addr" instructions */
479*795d594fSAndroid Build Coastguard Worker         results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
480*795d594fSAndroid Build Coastguard Worker         /* check this edge case while we're here (div-long/2addr) */
481*795d594fSAndroid Build Coastguard Worker         long minLong = -9223372036854775808L;
482*795d594fSAndroid Build Coastguard Worker         long negOne = -results[5];
483*795d594fSAndroid Build Coastguard Worker         long plusOne = 1;
484*795d594fSAndroid Build Coastguard Worker         long result = (((minLong + plusOne) - plusOne) / negOne) / negOne;
485*795d594fSAndroid Build Coastguard Worker         if (result != minLong) { return 1; }
486*795d594fSAndroid Build Coastguard Worker         if (results[0] != 69999999997L) { return 2; }
487*795d594fSAndroid Build Coastguard Worker         if (results[1] != 70000000003L) { return 3; }
488*795d594fSAndroid Build Coastguard Worker         if (results[2] != -210000000000L) { return 4; }
489*795d594fSAndroid Build Coastguard Worker         if (results[3] != -6833923606740729856L) { return 5; }    // overflow
490*795d594fSAndroid Build Coastguard Worker         if (results[4] != -23333333333L) { return 6; }
491*795d594fSAndroid Build Coastguard Worker         if (results[5] != 1) { return 7; }
492*795d594fSAndroid Build Coastguard Worker         if (results[6] != 70000000000L) { return 8; }
493*795d594fSAndroid Build Coastguard Worker         if (results[7] != -3) { return 9; }
494*795d594fSAndroid Build Coastguard Worker         if (results[8] != -70000000003L) { return 10; }
495*795d594fSAndroid Build Coastguard Worker         if (results[9] != 70000000000L) { return 11; }
496*795d594fSAndroid Build Coastguard Worker         if (results.length != 10) { return 12; }
497*795d594fSAndroid Build Coastguard Worker         return 0;
498*795d594fSAndroid Build Coastguard Worker     }
499*795d594fSAndroid Build Coastguard Worker 
500*795d594fSAndroid Build Coastguard Worker     /*
501*795d594fSAndroid Build Coastguard Worker      * Shift some data.  (value=0xd5aa96deff00aa01, dist=16)
502*795d594fSAndroid Build Coastguard Worker      */
longShiftTest(long value, int dist)503*795d594fSAndroid Build Coastguard Worker     static long longShiftTest(long value, int dist) {
504*795d594fSAndroid Build Coastguard Worker         long results[] = new long[4];
505*795d594fSAndroid Build Coastguard Worker         results[0] = value << dist;
506*795d594fSAndroid Build Coastguard Worker         results[1] = value >> dist;
507*795d594fSAndroid Build Coastguard Worker         results[2] = value >>> dist;
508*795d594fSAndroid Build Coastguard Worker         results[3] = (((value << dist) >> dist) >>> dist) << dist;
509*795d594fSAndroid Build Coastguard Worker         if (results[0] != 0x96deff00aa010000L) { return results[0]; }
510*795d594fSAndroid Build Coastguard Worker         if (results[1] != 0xffffd5aa96deff00L) { return results[1]; }
511*795d594fSAndroid Build Coastguard Worker         if (results[2] != 0x0000d5aa96deff00L) { return results[2]; }
512*795d594fSAndroid Build Coastguard Worker         if (results[3] != 0xffff96deff000000L) { return results[3]; }
513*795d594fSAndroid Build Coastguard Worker         if (results.length != 4) { return 5; }
514*795d594fSAndroid Build Coastguard Worker 
515*795d594fSAndroid Build Coastguard Worker         return results[0];      // test return-long
516*795d594fSAndroid Build Coastguard Worker     }
517*795d594fSAndroid Build Coastguard Worker 
switchTest(int a)518*795d594fSAndroid Build Coastguard Worker     static int switchTest(int a) {
519*795d594fSAndroid Build Coastguard Worker         int res = 1234;
520*795d594fSAndroid Build Coastguard Worker 
521*795d594fSAndroid Build Coastguard Worker         switch (a) {
522*795d594fSAndroid Build Coastguard Worker             case -1: res = 1; return res;
523*795d594fSAndroid Build Coastguard Worker             case 0: res = 2; return res;
524*795d594fSAndroid Build Coastguard Worker             case 1: /*correct*/ break;
525*795d594fSAndroid Build Coastguard Worker             case 2: res = 3; return res;
526*795d594fSAndroid Build Coastguard Worker             case 3: res = 4; return res;
527*795d594fSAndroid Build Coastguard Worker             case 4: res = 5; return res;
528*795d594fSAndroid Build Coastguard Worker             default: res = 6; return res;
529*795d594fSAndroid Build Coastguard Worker         }
530*795d594fSAndroid Build Coastguard Worker         switch (a) {
531*795d594fSAndroid Build Coastguard Worker             case 3: res = 7; return res;
532*795d594fSAndroid Build Coastguard Worker             case 4: res = 8; return res;
533*795d594fSAndroid Build Coastguard Worker             default: /*correct*/ break;
534*795d594fSAndroid Build Coastguard Worker         }
535*795d594fSAndroid Build Coastguard Worker 
536*795d594fSAndroid Build Coastguard Worker         a = 0x12345678;
537*795d594fSAndroid Build Coastguard Worker 
538*795d594fSAndroid Build Coastguard Worker         switch (a) {
539*795d594fSAndroid Build Coastguard Worker             case 0x12345678: /*correct*/ break;
540*795d594fSAndroid Build Coastguard Worker             case 0x12345679: res = 9; return res;
541*795d594fSAndroid Build Coastguard Worker             default: res = 1; return res;
542*795d594fSAndroid Build Coastguard Worker         }
543*795d594fSAndroid Build Coastguard Worker         switch (a) {
544*795d594fSAndroid Build Coastguard Worker             case 57: res = 10; return res;
545*795d594fSAndroid Build Coastguard Worker             case -6: res = 11; return res;
546*795d594fSAndroid Build Coastguard Worker             case 0x12345678: /*correct*/ break;
547*795d594fSAndroid Build Coastguard Worker             case 22: res = 12; return res;
548*795d594fSAndroid Build Coastguard Worker             case 3: res = 13; return res;
549*795d594fSAndroid Build Coastguard Worker             default: res = 14; return res;
550*795d594fSAndroid Build Coastguard Worker         }
551*795d594fSAndroid Build Coastguard Worker         switch (a) {
552*795d594fSAndroid Build Coastguard Worker             case -6: res = 15; return res;
553*795d594fSAndroid Build Coastguard Worker             case 3: res = 16; return res;
554*795d594fSAndroid Build Coastguard Worker             default: /*correct*/ break;
555*795d594fSAndroid Build Coastguard Worker         }
556*795d594fSAndroid Build Coastguard Worker 
557*795d594fSAndroid Build Coastguard Worker         a = -5;
558*795d594fSAndroid Build Coastguard Worker         switch (a) {
559*795d594fSAndroid Build Coastguard Worker             case 12: res = 17; return res;
560*795d594fSAndroid Build Coastguard Worker             case -5: /*correct*/ break;
561*795d594fSAndroid Build Coastguard Worker             case 0: res = 18; return res;
562*795d594fSAndroid Build Coastguard Worker             default: res = 19; return res;
563*795d594fSAndroid Build Coastguard Worker         }
564*795d594fSAndroid Build Coastguard Worker 
565*795d594fSAndroid Build Coastguard Worker         switch (a) {
566*795d594fSAndroid Build Coastguard Worker             default: /*correct*/ break;
567*795d594fSAndroid Build Coastguard Worker         }
568*795d594fSAndroid Build Coastguard Worker         return res;
569*795d594fSAndroid Build Coastguard Worker     }
570*795d594fSAndroid Build Coastguard Worker     /*
571*795d594fSAndroid Build Coastguard Worker      * Test the integer comparisons in various ways.
572*795d594fSAndroid Build Coastguard Worker      */
testIntCompare(int minus, int plus, int plus2, int zero)573*795d594fSAndroid Build Coastguard Worker     static int testIntCompare(int minus, int plus, int plus2, int zero) {
574*795d594fSAndroid Build Coastguard Worker         int res = 1111;
575*795d594fSAndroid Build Coastguard Worker 
576*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
577*795d594fSAndroid Build Coastguard Worker             return 1;
578*795d594fSAndroid Build Coastguard Worker         if (minus >= plus)
579*795d594fSAndroid Build Coastguard Worker             return 2;
580*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
581*795d594fSAndroid Build Coastguard Worker             return 3;
582*795d594fSAndroid Build Coastguard Worker         if (plus <= minus)
583*795d594fSAndroid Build Coastguard Worker             return 4;
584*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
585*795d594fSAndroid Build Coastguard Worker             return 5;
586*795d594fSAndroid Build Coastguard Worker         if (plus != plus2)
587*795d594fSAndroid Build Coastguard Worker             return 6;
588*795d594fSAndroid Build Coastguard Worker 
589*795d594fSAndroid Build Coastguard Worker         /* try a branch-taken */
590*795d594fSAndroid Build Coastguard Worker         if (plus != minus) {
591*795d594fSAndroid Build Coastguard Worker             res = res;
592*795d594fSAndroid Build Coastguard Worker         } else {
593*795d594fSAndroid Build Coastguard Worker             return 7;
594*795d594fSAndroid Build Coastguard Worker         }
595*795d594fSAndroid Build Coastguard Worker 
596*795d594fSAndroid Build Coastguard Worker         if (minus > 0)
597*795d594fSAndroid Build Coastguard Worker             return 8;
598*795d594fSAndroid Build Coastguard Worker         if (minus >= 0)
599*795d594fSAndroid Build Coastguard Worker             return 9;
600*795d594fSAndroid Build Coastguard Worker         if (plus < 0)
601*795d594fSAndroid Build Coastguard Worker             return 10;
602*795d594fSAndroid Build Coastguard Worker         if (plus <= 0)
603*795d594fSAndroid Build Coastguard Worker             return 11;
604*795d594fSAndroid Build Coastguard Worker         if (plus == 0)
605*795d594fSAndroid Build Coastguard Worker             return 12;
606*795d594fSAndroid Build Coastguard Worker         if (zero != 0)
607*795d594fSAndroid Build Coastguard Worker             return 13;
608*795d594fSAndroid Build Coastguard Worker 
609*795d594fSAndroid Build Coastguard Worker         if (zero == 0) {
610*795d594fSAndroid Build Coastguard Worker             res = res;
611*795d594fSAndroid Build Coastguard Worker         } else {
612*795d594fSAndroid Build Coastguard Worker             return 14;
613*795d594fSAndroid Build Coastguard Worker         }
614*795d594fSAndroid Build Coastguard Worker         return res;
615*795d594fSAndroid Build Coastguard Worker     }
616*795d594fSAndroid Build Coastguard Worker 
617*795d594fSAndroid Build Coastguard Worker     /*
618*795d594fSAndroid Build Coastguard Worker      * Test cmp-long.
619*795d594fSAndroid Build Coastguard Worker      *
620*795d594fSAndroid Build Coastguard Worker      * minus=-5, alsoMinus=0xFFFFFFFF00000009, plus=4, alsoPlus=8
621*795d594fSAndroid Build Coastguard Worker      */
testLongCompare(long minus, long alsoMinus, long plus, long alsoPlus)622*795d594fSAndroid Build Coastguard Worker     static int testLongCompare(long minus, long alsoMinus, long plus,
623*795d594fSAndroid Build Coastguard Worker                                long alsoPlus) {
624*795d594fSAndroid Build Coastguard Worker         int res = 2222;
625*795d594fSAndroid Build Coastguard Worker 
626*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
627*795d594fSAndroid Build Coastguard Worker             return 2;
628*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
629*795d594fSAndroid Build Coastguard Worker             return 3;
630*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
631*795d594fSAndroid Build Coastguard Worker             return 4;
632*795d594fSAndroid Build Coastguard Worker 
633*795d594fSAndroid Build Coastguard Worker         if (plus >= plus+1)
634*795d594fSAndroid Build Coastguard Worker             return 5;
635*795d594fSAndroid Build Coastguard Worker         if (minus >= minus+1)
636*795d594fSAndroid Build Coastguard Worker             return 6;
637*795d594fSAndroid Build Coastguard Worker 
638*795d594fSAndroid Build Coastguard Worker         /* try a branch-taken */
639*795d594fSAndroid Build Coastguard Worker         if (plus != minus) {
640*795d594fSAndroid Build Coastguard Worker             res = res;
641*795d594fSAndroid Build Coastguard Worker         } else {
642*795d594fSAndroid Build Coastguard Worker             return 7;
643*795d594fSAndroid Build Coastguard Worker         }
644*795d594fSAndroid Build Coastguard Worker 
645*795d594fSAndroid Build Coastguard Worker         /* compare when high words are equal but low words differ */
646*795d594fSAndroid Build Coastguard Worker         if (plus > alsoPlus)
647*795d594fSAndroid Build Coastguard Worker             return 8;
648*795d594fSAndroid Build Coastguard Worker         if (alsoPlus < plus)
649*795d594fSAndroid Build Coastguard Worker             return 9;
650*795d594fSAndroid Build Coastguard Worker         if (alsoPlus == plus)
651*795d594fSAndroid Build Coastguard Worker             return 10;
652*795d594fSAndroid Build Coastguard Worker 
653*795d594fSAndroid Build Coastguard Worker         /* high words are equal, low words have apparently different signs */
654*795d594fSAndroid Build Coastguard Worker         if (minus < alsoMinus)      // bug!
655*795d594fSAndroid Build Coastguard Worker             return 11;
656*795d594fSAndroid Build Coastguard Worker         if (alsoMinus > minus)
657*795d594fSAndroid Build Coastguard Worker             return 12;
658*795d594fSAndroid Build Coastguard Worker         if (alsoMinus == minus)
659*795d594fSAndroid Build Coastguard Worker             return 13;
660*795d594fSAndroid Build Coastguard Worker 
661*795d594fSAndroid Build Coastguard Worker         return res;
662*795d594fSAndroid Build Coastguard Worker     }
663*795d594fSAndroid Build Coastguard Worker 
664*795d594fSAndroid Build Coastguard Worker     /*
665*795d594fSAndroid Build Coastguard Worker      * Test cmpl-float and cmpg-float.
666*795d594fSAndroid Build Coastguard Worker      */
testFloatCompare(float minus, float plus, float plus2, float nan)667*795d594fSAndroid Build Coastguard Worker     static int testFloatCompare(float minus, float plus, float plus2,
668*795d594fSAndroid Build Coastguard Worker                                 float nan) {
669*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
670*795d594fSAndroid Build Coastguard Worker             return 1;
671*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
672*795d594fSAndroid Build Coastguard Worker             return 2;
673*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
674*795d594fSAndroid Build Coastguard Worker             return 3;
675*795d594fSAndroid Build Coastguard Worker         if (plus != plus2)
676*795d594fSAndroid Build Coastguard Worker             return 4;
677*795d594fSAndroid Build Coastguard Worker 
678*795d594fSAndroid Build Coastguard Worker         if (plus <= nan)
679*795d594fSAndroid Build Coastguard Worker             return 5;
680*795d594fSAndroid Build Coastguard Worker         if (plus >= nan)
681*795d594fSAndroid Build Coastguard Worker             return 6;
682*795d594fSAndroid Build Coastguard Worker         if (minus <= nan)
683*795d594fSAndroid Build Coastguard Worker             return 7;
684*795d594fSAndroid Build Coastguard Worker         if (minus >= nan)
685*795d594fSAndroid Build Coastguard Worker             return 8;
686*795d594fSAndroid Build Coastguard Worker         if (nan >= plus)
687*795d594fSAndroid Build Coastguard Worker             return 9;
688*795d594fSAndroid Build Coastguard Worker         if (nan <= plus)
689*795d594fSAndroid Build Coastguard Worker             return 10;
690*795d594fSAndroid Build Coastguard Worker 
691*795d594fSAndroid Build Coastguard Worker         if (nan == nan)
692*795d594fSAndroid Build Coastguard Worker             return 11;
693*795d594fSAndroid Build Coastguard Worker 
694*795d594fSAndroid Build Coastguard Worker         return 3333;
695*795d594fSAndroid Build Coastguard Worker     }
696*795d594fSAndroid Build Coastguard Worker 
testDoubleCompare(double minus, double plus, double plus2, double nan)697*795d594fSAndroid Build Coastguard Worker     static int testDoubleCompare(double minus, double plus, double plus2,
698*795d594fSAndroid Build Coastguard Worker                                  double nan) {
699*795d594fSAndroid Build Coastguard Worker 
700*795d594fSAndroid Build Coastguard Worker         int res = 4444;
701*795d594fSAndroid Build Coastguard Worker 
702*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
703*795d594fSAndroid Build Coastguard Worker             return 1;
704*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
705*795d594fSAndroid Build Coastguard Worker             return 2;
706*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
707*795d594fSAndroid Build Coastguard Worker             return 3;
708*795d594fSAndroid Build Coastguard Worker         if (plus != plus2)
709*795d594fSAndroid Build Coastguard Worker             return 4;
710*795d594fSAndroid Build Coastguard Worker 
711*795d594fSAndroid Build Coastguard Worker         if (plus <= nan)
712*795d594fSAndroid Build Coastguard Worker             return 5;
713*795d594fSAndroid Build Coastguard Worker         if (plus >= nan)
714*795d594fSAndroid Build Coastguard Worker             return 6;
715*795d594fSAndroid Build Coastguard Worker         if (minus <= nan)
716*795d594fSAndroid Build Coastguard Worker             return 7;
717*795d594fSAndroid Build Coastguard Worker         if (minus >= nan)
718*795d594fSAndroid Build Coastguard Worker             return 8;
719*795d594fSAndroid Build Coastguard Worker         if (nan >= plus)
720*795d594fSAndroid Build Coastguard Worker             return 9;
721*795d594fSAndroid Build Coastguard Worker         if (nan <= plus)
722*795d594fSAndroid Build Coastguard Worker             return 10;
723*795d594fSAndroid Build Coastguard Worker 
724*795d594fSAndroid Build Coastguard Worker         if (nan == nan)
725*795d594fSAndroid Build Coastguard Worker             return 11;
726*795d594fSAndroid Build Coastguard Worker         return res;
727*795d594fSAndroid Build Coastguard Worker     }
728*795d594fSAndroid Build Coastguard Worker 
fibonacci(int n)729*795d594fSAndroid Build Coastguard Worker     static int fibonacci(int n) {
730*795d594fSAndroid Build Coastguard Worker         if (n == 0) {
731*795d594fSAndroid Build Coastguard Worker             return 0;
732*795d594fSAndroid Build Coastguard Worker         } else if (n == 1) {
733*795d594fSAndroid Build Coastguard Worker             return 1;
734*795d594fSAndroid Build Coastguard Worker         } else {
735*795d594fSAndroid Build Coastguard Worker             return fibonacci(n - 1) + fibonacci(n - 2);
736*795d594fSAndroid Build Coastguard Worker         }
737*795d594fSAndroid Build Coastguard Worker     }
738*795d594fSAndroid Build Coastguard Worker 
throwAndCatch()739*795d594fSAndroid Build Coastguard Worker     static int throwAndCatch() {
740*795d594fSAndroid Build Coastguard Worker         try {
741*795d594fSAndroid Build Coastguard Worker             throwNullPointerException();
742*795d594fSAndroid Build Coastguard Worker             return 1;
743*795d594fSAndroid Build Coastguard Worker         } catch (NullPointerException npe) {
744*795d594fSAndroid Build Coastguard Worker             return 0;
745*795d594fSAndroid Build Coastguard Worker         }
746*795d594fSAndroid Build Coastguard Worker     }
747*795d594fSAndroid Build Coastguard Worker 
manyArgs(int a0, long a1, int a2, long a3, int a4, long a5, int a6, int a7, double a8, float a9, double a10, short a11, int a12, char a13, int a14, int a15, byte a16, boolean a17, int a18, int a19, long a20, long a21, int a22, int a23, int a24, int a25, int a26)748*795d594fSAndroid Build Coastguard Worker     static int manyArgs(int a0, long a1, int a2, long a3, int a4, long a5,
749*795d594fSAndroid Build Coastguard Worker                         int a6, int a7, double a8, float a9, double a10, short a11, int a12,
750*795d594fSAndroid Build Coastguard Worker                         char a13, int a14, int a15, byte a16, boolean a17, int a18, int a19,
751*795d594fSAndroid Build Coastguard Worker                         long a20, long a21, int a22, int a23, int a24, int a25, int a26)
752*795d594fSAndroid Build Coastguard Worker     {
753*795d594fSAndroid Build Coastguard Worker         if (a0 != 0) return 0;
754*795d594fSAndroid Build Coastguard Worker         if (a1 !=  1L) return 1;
755*795d594fSAndroid Build Coastguard Worker         if (a2 != 2) return 2;
756*795d594fSAndroid Build Coastguard Worker         if (a3 != 3L) return 3;
757*795d594fSAndroid Build Coastguard Worker         if (a4 != 4) return 4;
758*795d594fSAndroid Build Coastguard Worker         if (a5 != 5L) return 5;
759*795d594fSAndroid Build Coastguard Worker         if (a6 != 6) return 6;
760*795d594fSAndroid Build Coastguard Worker         if (a7 != 7) return 7;
761*795d594fSAndroid Build Coastguard Worker         if (a8 != 8.0) return 8;
762*795d594fSAndroid Build Coastguard Worker         if (a9 !=  9.0f) return 9;
763*795d594fSAndroid Build Coastguard Worker         if (a10 != 10.0) return 10;
764*795d594fSAndroid Build Coastguard Worker         if (a11 != (short)11) return 11;
765*795d594fSAndroid Build Coastguard Worker         if (a12 != 12) return 12;
766*795d594fSAndroid Build Coastguard Worker         if (a13 != (char)13) return 13;
767*795d594fSAndroid Build Coastguard Worker         if (a14 != 14) return 14;
768*795d594fSAndroid Build Coastguard Worker         if (a15 != 15) return 15;
769*795d594fSAndroid Build Coastguard Worker         if (a16 != (byte)-16) return 16;
770*795d594fSAndroid Build Coastguard Worker         if (a17 !=  true) return 17;
771*795d594fSAndroid Build Coastguard Worker         if (a18 != 18) return 18;
772*795d594fSAndroid Build Coastguard Worker         if (a19 != 19) return 19;
773*795d594fSAndroid Build Coastguard Worker         if (a20 !=  20L) return 20;
774*795d594fSAndroid Build Coastguard Worker         if (a21 != 21L) return 21;
775*795d594fSAndroid Build Coastguard Worker         if (a22 != 22) return 22;
776*795d594fSAndroid Build Coastguard Worker         if (a23 != 23) return 23;
777*795d594fSAndroid Build Coastguard Worker         if (a24 != 24) return 24;
778*795d594fSAndroid Build Coastguard Worker         if (a25 != 25) return 25;
779*795d594fSAndroid Build Coastguard Worker         if (a26 != 26) return 26;
780*795d594fSAndroid Build Coastguard Worker         return -1;
781*795d594fSAndroid Build Coastguard Worker     }
782*795d594fSAndroid Build Coastguard Worker 
virtualCall(int a)783*795d594fSAndroid Build Coastguard Worker     int virtualCall(int a)
784*795d594fSAndroid Build Coastguard Worker     {
785*795d594fSAndroid Build Coastguard Worker         return a * 2;
786*795d594fSAndroid Build Coastguard Worker     }
787*795d594fSAndroid Build Coastguard Worker 
setFoo(int a)788*795d594fSAndroid Build Coastguard Worker     void setFoo(int a)
789*795d594fSAndroid Build Coastguard Worker     {
790*795d594fSAndroid Build Coastguard Worker         foo_ = a;
791*795d594fSAndroid Build Coastguard Worker     }
792*795d594fSAndroid Build Coastguard Worker 
getFoo()793*795d594fSAndroid Build Coastguard Worker     int getFoo()
794*795d594fSAndroid Build Coastguard Worker     {
795*795d594fSAndroid Build Coastguard Worker         return foo_;
796*795d594fSAndroid Build Coastguard Worker     }
797*795d594fSAndroid Build Coastguard Worker 
staticCall(int a)798*795d594fSAndroid Build Coastguard Worker     static int staticCall(int a)
799*795d594fSAndroid Build Coastguard Worker     {
800*795d594fSAndroid Build Coastguard Worker         Main foo = new Main();
801*795d594fSAndroid Build Coastguard Worker         return foo.virtualCall(a);
802*795d594fSAndroid Build Coastguard Worker     }
803*795d594fSAndroid Build Coastguard Worker 
testIGetPut(int a)804*795d594fSAndroid Build Coastguard Worker     static int testIGetPut(int a)
805*795d594fSAndroid Build Coastguard Worker     {
806*795d594fSAndroid Build Coastguard Worker         Main foo = new Main(99);
807*795d594fSAndroid Build Coastguard Worker         Main foo123 = new Main();
808*795d594fSAndroid Build Coastguard Worker         int z  = foo.getFoo();
809*795d594fSAndroid Build Coastguard Worker         z += a;
810*795d594fSAndroid Build Coastguard Worker         z += foo123.getFoo();
811*795d594fSAndroid Build Coastguard Worker         foo.setFoo(z);
812*795d594fSAndroid Build Coastguard Worker         return foo.getFoo();
813*795d594fSAndroid Build Coastguard Worker     }
814*795d594fSAndroid Build Coastguard Worker 
throwClassCast(Object o)815*795d594fSAndroid Build Coastguard Worker     static int throwClassCast(Object o) {
816*795d594fSAndroid Build Coastguard Worker       return ((Integer)o).intValue();
817*795d594fSAndroid Build Coastguard Worker     }
818*795d594fSAndroid Build Coastguard Worker 
testClassCast()819*795d594fSAndroid Build Coastguard Worker     static int testClassCast() {
820*795d594fSAndroid Build Coastguard Worker       int res = 0;
821*795d594fSAndroid Build Coastguard Worker       try {
822*795d594fSAndroid Build Coastguard Worker         res += throwClassCast(Integer.valueOf(123));
823*795d594fSAndroid Build Coastguard Worker       } catch(ClassCastException e) {
824*795d594fSAndroid Build Coastguard Worker         res += 456;
825*795d594fSAndroid Build Coastguard Worker       }
826*795d594fSAndroid Build Coastguard Worker       try {
827*795d594fSAndroid Build Coastguard Worker         res += throwClassCast(new Short((short)321));
828*795d594fSAndroid Build Coastguard Worker       } catch(ClassCastException e) {
829*795d594fSAndroid Build Coastguard Worker         res += 765;
830*795d594fSAndroid Build Coastguard Worker       }
831*795d594fSAndroid Build Coastguard Worker       return res;
832*795d594fSAndroid Build Coastguard Worker     }
833*795d594fSAndroid Build Coastguard Worker 
throwArrayStoreException(Object[] array, Object element)834*795d594fSAndroid Build Coastguard Worker     static void throwArrayStoreException(Object[] array, Object element) {
835*795d594fSAndroid Build Coastguard Worker       array[0] = element;
836*795d594fSAndroid Build Coastguard Worker     }
837*795d594fSAndroid Build Coastguard Worker 
testArrayStoreException()838*795d594fSAndroid Build Coastguard Worker     static int testArrayStoreException() {
839*795d594fSAndroid Build Coastguard Worker       int res=0;
840*795d594fSAndroid Build Coastguard Worker       Object[] array = new Number[2];
841*795d594fSAndroid Build Coastguard Worker       try {
842*795d594fSAndroid Build Coastguard Worker         throwArrayStoreException(array, null);
843*795d594fSAndroid Build Coastguard Worker         res += 1;
844*795d594fSAndroid Build Coastguard Worker       } catch(ArrayStoreException e) {
845*795d594fSAndroid Build Coastguard Worker         res += 2;
846*795d594fSAndroid Build Coastguard Worker       }
847*795d594fSAndroid Build Coastguard Worker       try {
848*795d594fSAndroid Build Coastguard Worker         throwArrayStoreException(array, Integer.valueOf(1));
849*795d594fSAndroid Build Coastguard Worker         res += 10;
850*795d594fSAndroid Build Coastguard Worker       } catch(ArrayStoreException e) {
851*795d594fSAndroid Build Coastguard Worker         res += 20;
852*795d594fSAndroid Build Coastguard Worker       }
853*795d594fSAndroid Build Coastguard Worker       try {
854*795d594fSAndroid Build Coastguard Worker         throwArrayStoreException(array, "hello MTV-44");
855*795d594fSAndroid Build Coastguard Worker         res += 100;
856*795d594fSAndroid Build Coastguard Worker       } catch(ArrayStoreException e) {
857*795d594fSAndroid Build Coastguard Worker         res += 200;
858*795d594fSAndroid Build Coastguard Worker       }
859*795d594fSAndroid Build Coastguard Worker       return res;
860*795d594fSAndroid Build Coastguard Worker     }
861*795d594fSAndroid Build Coastguard Worker 
862*795d594fSAndroid Build Coastguard Worker     static long recursion_count_;
throwStackOverflow(long l)863*795d594fSAndroid Build Coastguard Worker     static void throwStackOverflow(long l) {
864*795d594fSAndroid Build Coastguard Worker       recursion_count_++;
865*795d594fSAndroid Build Coastguard Worker       throwStackOverflow(recursion_count_);
866*795d594fSAndroid Build Coastguard Worker     }
867*795d594fSAndroid Build Coastguard Worker 
testStackOverflow()868*795d594fSAndroid Build Coastguard Worker     static long testStackOverflow() {
869*795d594fSAndroid Build Coastguard Worker       try {
870*795d594fSAndroid Build Coastguard Worker         throwStackOverflow(0);
871*795d594fSAndroid Build Coastguard Worker         if (recursion_count_ != 0) {
872*795d594fSAndroid Build Coastguard Worker           return recursion_count_;
873*795d594fSAndroid Build Coastguard Worker         } else {
874*795d594fSAndroid Build Coastguard Worker           return -1;
875*795d594fSAndroid Build Coastguard Worker         }
876*795d594fSAndroid Build Coastguard Worker       } catch(StackOverflowError soe) {
877*795d594fSAndroid Build Coastguard Worker         return 0;
878*795d594fSAndroid Build Coastguard Worker       }
879*795d594fSAndroid Build Coastguard Worker     }
880*795d594fSAndroid Build Coastguard Worker 
testArrayAllocation()881*795d594fSAndroid Build Coastguard Worker     static int testArrayAllocation() {
882*795d594fSAndroid Build Coastguard Worker       int res = 0;
883*795d594fSAndroid Build Coastguard Worker       try {
884*795d594fSAndroid Build Coastguard Worker         int[] x = new int[-1];
885*795d594fSAndroid Build Coastguard Worker         res += 1;
886*795d594fSAndroid Build Coastguard Worker       } catch (NegativeArraySizeException e) {
887*795d594fSAndroid Build Coastguard Worker         res += 2;
888*795d594fSAndroid Build Coastguard Worker       }
889*795d594fSAndroid Build Coastguard Worker       try {
890*795d594fSAndroid Build Coastguard Worker         int[] x = new int [1];
891*795d594fSAndroid Build Coastguard Worker         res += 10;
892*795d594fSAndroid Build Coastguard Worker       } catch (Throwable e) {
893*795d594fSAndroid Build Coastguard Worker         res += 20;
894*795d594fSAndroid Build Coastguard Worker       }
895*795d594fSAndroid Build Coastguard Worker       return res;
896*795d594fSAndroid Build Coastguard Worker     }
897*795d594fSAndroid Build Coastguard Worker 
main(String[] args)898*795d594fSAndroid Build Coastguard Worker     public static void main(String[] args) {
899*795d594fSAndroid Build Coastguard Worker         boolean failure = false;
900*795d594fSAndroid Build Coastguard Worker         int res;
901*795d594fSAndroid Build Coastguard Worker         long lres;
902*795d594fSAndroid Build Coastguard Worker 
903*795d594fSAndroid Build Coastguard Worker         lres = divideLongByBillion(123000000000L);
904*795d594fSAndroid Build Coastguard Worker         if (lres == 123) {
905*795d594fSAndroid Build Coastguard Worker             System.out.println("divideLongByBillion PASSED");
906*795d594fSAndroid Build Coastguard Worker         } else {
907*795d594fSAndroid Build Coastguard Worker             System.out.println("divideLongByBillion FAILED: " + lres);
908*795d594fSAndroid Build Coastguard Worker             failure = true;
909*795d594fSAndroid Build Coastguard Worker         }
910*795d594fSAndroid Build Coastguard Worker         res = unopTest(38);
911*795d594fSAndroid Build Coastguard Worker         if (res == 37) {
912*795d594fSAndroid Build Coastguard Worker             System.out.println("unopTest PASSED");
913*795d594fSAndroid Build Coastguard Worker         } else {
914*795d594fSAndroid Build Coastguard Worker             System.out.println("unopTest FAILED: " + res);
915*795d594fSAndroid Build Coastguard Worker             failure = true;
916*795d594fSAndroid Build Coastguard Worker         }
917*795d594fSAndroid Build Coastguard Worker         res = shiftTest1();
918*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
919*795d594fSAndroid Build Coastguard Worker             System.out.println("shiftTest1 PASSED");
920*795d594fSAndroid Build Coastguard Worker         } else {
921*795d594fSAndroid Build Coastguard Worker             System.out.println("shiftTest1 FAILED: " + res);
922*795d594fSAndroid Build Coastguard Worker             failure = true;
923*795d594fSAndroid Build Coastguard Worker         }
924*795d594fSAndroid Build Coastguard Worker         res = shiftTest2();
925*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
926*795d594fSAndroid Build Coastguard Worker             System.out.println("shiftTest2 PASSED");
927*795d594fSAndroid Build Coastguard Worker         } else {
928*795d594fSAndroid Build Coastguard Worker             System.out.println("shiftTest2 FAILED: " + res);
929*795d594fSAndroid Build Coastguard Worker             failure = true;
930*795d594fSAndroid Build Coastguard Worker         }
931*795d594fSAndroid Build Coastguard Worker         res = unsignedShiftTest();
932*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
933*795d594fSAndroid Build Coastguard Worker             System.out.println("unsignedShiftTest PASSED");
934*795d594fSAndroid Build Coastguard Worker         } else {
935*795d594fSAndroid Build Coastguard Worker             System.out.println("unsignedShiftTest FAILED: " + res);
936*795d594fSAndroid Build Coastguard Worker             failure = true;
937*795d594fSAndroid Build Coastguard Worker         }
938*795d594fSAndroid Build Coastguard Worker         res = convTest();
939*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
940*795d594fSAndroid Build Coastguard Worker             System.out.println("convTest PASSED");
941*795d594fSAndroid Build Coastguard Worker         } else {
942*795d594fSAndroid Build Coastguard Worker             System.out.println("convTest FAILED: " + res);
943*795d594fSAndroid Build Coastguard Worker             failure = true;
944*795d594fSAndroid Build Coastguard Worker         }
945*795d594fSAndroid Build Coastguard Worker         res = charSubTest();
946*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
947*795d594fSAndroid Build Coastguard Worker             System.out.println("charSubTest PASSED");
948*795d594fSAndroid Build Coastguard Worker         } else {
949*795d594fSAndroid Build Coastguard Worker             System.out.println("charSubTest FAILED: " + res);
950*795d594fSAndroid Build Coastguard Worker             failure = true;
951*795d594fSAndroid Build Coastguard Worker         }
952*795d594fSAndroid Build Coastguard Worker         res = intOperTest(70000, -3);
953*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
954*795d594fSAndroid Build Coastguard Worker             System.out.println("intOperTest PASSED");
955*795d594fSAndroid Build Coastguard Worker         } else {
956*795d594fSAndroid Build Coastguard Worker             System.out.println("intOperTest FAILED: " + res);
957*795d594fSAndroid Build Coastguard Worker             failure = true;
958*795d594fSAndroid Build Coastguard Worker         }
959*795d594fSAndroid Build Coastguard Worker         res = lit16Test(77777);
960*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
961*795d594fSAndroid Build Coastguard Worker             System.out.println("lit16Test PASSED");
962*795d594fSAndroid Build Coastguard Worker         } else {
963*795d594fSAndroid Build Coastguard Worker             System.out.println("lit16Test FAILED: " + res);
964*795d594fSAndroid Build Coastguard Worker             failure = true;
965*795d594fSAndroid Build Coastguard Worker         }
966*795d594fSAndroid Build Coastguard Worker         res = lit8Test(-55555);
967*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
968*795d594fSAndroid Build Coastguard Worker             System.out.println("lit8Test PASSED");
969*795d594fSAndroid Build Coastguard Worker         } else {
970*795d594fSAndroid Build Coastguard Worker             System.out.println("lit8Test FAILED: " + res);
971*795d594fSAndroid Build Coastguard Worker             failure = true;
972*795d594fSAndroid Build Coastguard Worker         }
973*795d594fSAndroid Build Coastguard Worker         res = intShiftTest(0xff00aa01, 8);
974*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
975*795d594fSAndroid Build Coastguard Worker             System.out.println("intShiftTest PASSED");
976*795d594fSAndroid Build Coastguard Worker         } else {
977*795d594fSAndroid Build Coastguard Worker             System.out.println("intShiftTest FAILED: " + res);
978*795d594fSAndroid Build Coastguard Worker             failure = true;
979*795d594fSAndroid Build Coastguard Worker         }
980*795d594fSAndroid Build Coastguard Worker         res = longOperTest(70000000000L, -3L);
981*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
982*795d594fSAndroid Build Coastguard Worker             System.out.println("longOperTest PASSED");
983*795d594fSAndroid Build Coastguard Worker         } else {
984*795d594fSAndroid Build Coastguard Worker             System.out.println("longOperTest FAILED: " + res);
985*795d594fSAndroid Build Coastguard Worker             failure = true;
986*795d594fSAndroid Build Coastguard Worker         }
987*795d594fSAndroid Build Coastguard Worker         lres = longShiftTest(0xd5aa96deff00aa01L, 16);
988*795d594fSAndroid Build Coastguard Worker         if (lres == 0x96deff00aa010000L) {
989*795d594fSAndroid Build Coastguard Worker             System.out.println("longShiftTest PASSED");
990*795d594fSAndroid Build Coastguard Worker         } else {
991*795d594fSAndroid Build Coastguard Worker             System.out.println("longShiftTest FAILED: " + lres);
992*795d594fSAndroid Build Coastguard Worker             failure = true;
993*795d594fSAndroid Build Coastguard Worker         }
994*795d594fSAndroid Build Coastguard Worker 
995*795d594fSAndroid Build Coastguard Worker         res = switchTest(1);
996*795d594fSAndroid Build Coastguard Worker         if (res == 1234) {
997*795d594fSAndroid Build Coastguard Worker             System.out.println("switchTest PASSED");
998*795d594fSAndroid Build Coastguard Worker         } else {
999*795d594fSAndroid Build Coastguard Worker             System.out.println("switchTest FAILED: " + res);
1000*795d594fSAndroid Build Coastguard Worker             failure = true;
1001*795d594fSAndroid Build Coastguard Worker         }
1002*795d594fSAndroid Build Coastguard Worker 
1003*795d594fSAndroid Build Coastguard Worker         res = testIntCompare(-5, 4, 4, 0);
1004*795d594fSAndroid Build Coastguard Worker         if (res == 1111) {
1005*795d594fSAndroid Build Coastguard Worker             System.out.println("testIntCompare PASSED");
1006*795d594fSAndroid Build Coastguard Worker         } else {
1007*795d594fSAndroid Build Coastguard Worker             System.out.println("testIntCompare FAILED: " + res);
1008*795d594fSAndroid Build Coastguard Worker             failure = true;
1009*795d594fSAndroid Build Coastguard Worker         }
1010*795d594fSAndroid Build Coastguard Worker 
1011*795d594fSAndroid Build Coastguard Worker         res = testLongCompare(-5L, -4294967287L, 4L, 8L);
1012*795d594fSAndroid Build Coastguard Worker         if (res == 2222) {
1013*795d594fSAndroid Build Coastguard Worker             System.out.println("testLongCompare PASSED");
1014*795d594fSAndroid Build Coastguard Worker         } else {
1015*795d594fSAndroid Build Coastguard Worker             System.out.println("testLongCompare FAILED: " + res);
1016*795d594fSAndroid Build Coastguard Worker             failure = true;
1017*795d594fSAndroid Build Coastguard Worker         }
1018*795d594fSAndroid Build Coastguard Worker 
1019*795d594fSAndroid Build Coastguard Worker         res = testFloatCompare(-5.0f, 4.0f, 4.0f, (1.0f/0.0f) / (1.0f/0.0f));
1020*795d594fSAndroid Build Coastguard Worker         if (res == 3333) {
1021*795d594fSAndroid Build Coastguard Worker             System.out.println("testFloatCompare PASSED");
1022*795d594fSAndroid Build Coastguard Worker         } else {
1023*795d594fSAndroid Build Coastguard Worker             System.out.println("testFloatCompare FAILED: " + res);
1024*795d594fSAndroid Build Coastguard Worker             failure = true;
1025*795d594fSAndroid Build Coastguard Worker         }
1026*795d594fSAndroid Build Coastguard Worker 
1027*795d594fSAndroid Build Coastguard Worker         res = testDoubleCompare(-5.0, 4.0, 4.0, (1.0/0.0) / (1.0/0.0));
1028*795d594fSAndroid Build Coastguard Worker         if (res == 4444) {
1029*795d594fSAndroid Build Coastguard Worker             System.out.println("testDoubleCompare PASSED");
1030*795d594fSAndroid Build Coastguard Worker         } else {
1031*795d594fSAndroid Build Coastguard Worker             System.out.println("testDoubleCompare FAILED: " + res);
1032*795d594fSAndroid Build Coastguard Worker             failure = true;
1033*795d594fSAndroid Build Coastguard Worker         }
1034*795d594fSAndroid Build Coastguard Worker 
1035*795d594fSAndroid Build Coastguard Worker         res = fibonacci(10);
1036*795d594fSAndroid Build Coastguard Worker         if (res == 55) {
1037*795d594fSAndroid Build Coastguard Worker             System.out.println("fibonacci PASSED");
1038*795d594fSAndroid Build Coastguard Worker         } else {
1039*795d594fSAndroid Build Coastguard Worker             System.out.println("fibonacci FAILED: " + res);
1040*795d594fSAndroid Build Coastguard Worker             failure = true;
1041*795d594fSAndroid Build Coastguard Worker         }
1042*795d594fSAndroid Build Coastguard Worker 
1043*795d594fSAndroid Build Coastguard Worker         res = throwAndCatch();
1044*795d594fSAndroid Build Coastguard Worker         if (res == 0) {
1045*795d594fSAndroid Build Coastguard Worker             System.out.println("throwAndCatch PASSED");
1046*795d594fSAndroid Build Coastguard Worker         } else {
1047*795d594fSAndroid Build Coastguard Worker             System.out.println("throwAndCatch FAILED: " + res);
1048*795d594fSAndroid Build Coastguard Worker             failure = true;
1049*795d594fSAndroid Build Coastguard Worker         }
1050*795d594fSAndroid Build Coastguard Worker 
1051*795d594fSAndroid Build Coastguard Worker         res = testClassCast();
1052*795d594fSAndroid Build Coastguard Worker         if (res == 888) {
1053*795d594fSAndroid Build Coastguard Worker             System.out.println("testClassCast PASSED");
1054*795d594fSAndroid Build Coastguard Worker         } else {
1055*795d594fSAndroid Build Coastguard Worker             System.out.println("testClassCast FAILED: " + res);
1056*795d594fSAndroid Build Coastguard Worker             failure = true;
1057*795d594fSAndroid Build Coastguard Worker         }
1058*795d594fSAndroid Build Coastguard Worker 
1059*795d594fSAndroid Build Coastguard Worker         res = testArrayStoreException();
1060*795d594fSAndroid Build Coastguard Worker         if (res == 211) {
1061*795d594fSAndroid Build Coastguard Worker           System.out.println("testArrayStore PASSED");
1062*795d594fSAndroid Build Coastguard Worker         } else {
1063*795d594fSAndroid Build Coastguard Worker           System.out.println("testArrayStore FAILED: " + res);
1064*795d594fSAndroid Build Coastguard Worker           failure = true;
1065*795d594fSAndroid Build Coastguard Worker         }
1066*795d594fSAndroid Build Coastguard Worker 
1067*795d594fSAndroid Build Coastguard Worker         lres= testStackOverflow();
1068*795d594fSAndroid Build Coastguard Worker         if (lres == 0) {
1069*795d594fSAndroid Build Coastguard Worker             System.out.println("testStackOverflow PASSED");
1070*795d594fSAndroid Build Coastguard Worker         } else {
1071*795d594fSAndroid Build Coastguard Worker             System.out.println("testStackOverflow FAILED: " + lres);
1072*795d594fSAndroid Build Coastguard Worker             failure = true;
1073*795d594fSAndroid Build Coastguard Worker         }
1074*795d594fSAndroid Build Coastguard Worker 
1075*795d594fSAndroid Build Coastguard Worker         res = testArrayAllocation();
1076*795d594fSAndroid Build Coastguard Worker         if (res == 12) {
1077*795d594fSAndroid Build Coastguard Worker           System.out.println("testArrayAllocation PASSED");
1078*795d594fSAndroid Build Coastguard Worker         } else {
1079*795d594fSAndroid Build Coastguard Worker           System.out.println("testArrayAllocation FAILED: " + res);
1080*795d594fSAndroid Build Coastguard Worker           failure = true;
1081*795d594fSAndroid Build Coastguard Worker         }
1082*795d594fSAndroid Build Coastguard Worker 
1083*795d594fSAndroid Build Coastguard Worker         res = manyArgs(0, 1L, 2, 3L, 4, 5L, 6, 7, 8.0, 9.0f, 10.0,
1084*795d594fSAndroid Build Coastguard Worker                        (short)11, 12, (char)13, 14, 15, (byte)-16, true, 18,
1085*795d594fSAndroid Build Coastguard Worker                        19, 20L, 21L, 22, 23, 24, 25, 26);
1086*795d594fSAndroid Build Coastguard Worker         if (res == -1) {
1087*795d594fSAndroid Build Coastguard Worker             System.out.println("manyArgs PASSED");
1088*795d594fSAndroid Build Coastguard Worker         } else {
1089*795d594fSAndroid Build Coastguard Worker             System.out.println("manyArgs FAILED: " + res);
1090*795d594fSAndroid Build Coastguard Worker             failure = true;
1091*795d594fSAndroid Build Coastguard Worker         }
1092*795d594fSAndroid Build Coastguard Worker 
1093*795d594fSAndroid Build Coastguard Worker         res = staticCall(3);
1094*795d594fSAndroid Build Coastguard Worker         if (res == 6) {
1095*795d594fSAndroid Build Coastguard Worker             System.out.println("virtualCall PASSED");
1096*795d594fSAndroid Build Coastguard Worker         } else {
1097*795d594fSAndroid Build Coastguard Worker             System.out.println("virtualCall FAILED: " + res);
1098*795d594fSAndroid Build Coastguard Worker             failure = true;
1099*795d594fSAndroid Build Coastguard Worker         }
1100*795d594fSAndroid Build Coastguard Worker 
1101*795d594fSAndroid Build Coastguard Worker         res = testIGetPut(111);
1102*795d594fSAndroid Build Coastguard Worker         if (res == 333) {
1103*795d594fSAndroid Build Coastguard Worker             System.out.println("testGetPut PASSED");
1104*795d594fSAndroid Build Coastguard Worker         } else {
1105*795d594fSAndroid Build Coastguard Worker             System.out.println("testGetPut FAILED: " + res);
1106*795d594fSAndroid Build Coastguard Worker             failure = true;
1107*795d594fSAndroid Build Coastguard Worker         }
1108*795d594fSAndroid Build Coastguard Worker 
1109*795d594fSAndroid Build Coastguard Worker         res = staticFieldTest(404);
1110*795d594fSAndroid Build Coastguard Worker         if (res == 1404) {
1111*795d594fSAndroid Build Coastguard Worker             System.out.println("staticFieldTest PASSED");
1112*795d594fSAndroid Build Coastguard Worker         } else {
1113*795d594fSAndroid Build Coastguard Worker             System.out.println("staticFieldTest FAILED: " + res);
1114*795d594fSAndroid Build Coastguard Worker             failure = true;
1115*795d594fSAndroid Build Coastguard Worker         }
1116*795d594fSAndroid Build Coastguard Worker 
1117*795d594fSAndroid Build Coastguard Worker         res = catchBlock(1000);
1118*795d594fSAndroid Build Coastguard Worker         if (res == 1579) {
1119*795d594fSAndroid Build Coastguard Worker             System.out.println("catchBlock(1000) PASSED");
1120*795d594fSAndroid Build Coastguard Worker         } else {
1121*795d594fSAndroid Build Coastguard Worker             System.out.println("catchBlock(1000) FAILED: " + res);
1122*795d594fSAndroid Build Coastguard Worker             failure = true;
1123*795d594fSAndroid Build Coastguard Worker         }
1124*795d594fSAndroid Build Coastguard Worker         res = catchBlock(7000);
1125*795d594fSAndroid Build Coastguard Worker         if (res == 7777) {
1126*795d594fSAndroid Build Coastguard Worker             System.out.println("catchBlock(7000) PASSED");
1127*795d594fSAndroid Build Coastguard Worker         } else {
1128*795d594fSAndroid Build Coastguard Worker             System.out.println("catchBlock(7000) FAILED: " + res);
1129*795d594fSAndroid Build Coastguard Worker             failure = true;
1130*795d594fSAndroid Build Coastguard Worker         }
1131*795d594fSAndroid Build Coastguard Worker         res = catchBlockNoThrow(1000);
1132*795d594fSAndroid Build Coastguard Worker         if (res == 1123) {
1133*795d594fSAndroid Build Coastguard Worker             System.out.println("catchBlockNoThrow PASSED");
1134*795d594fSAndroid Build Coastguard Worker         } else {
1135*795d594fSAndroid Build Coastguard Worker             System.out.println("catchBlockNoThrow FAILED: " + res);
1136*795d594fSAndroid Build Coastguard Worker             failure = true;
1137*795d594fSAndroid Build Coastguard Worker         }
1138*795d594fSAndroid Build Coastguard Worker 
1139*795d594fSAndroid Build Coastguard Worker         res = superTest(4141);
1140*795d594fSAndroid Build Coastguard Worker         if (res == 4175) {
1141*795d594fSAndroid Build Coastguard Worker             System.out.println("superTest PASSED");
1142*795d594fSAndroid Build Coastguard Worker         } else {
1143*795d594fSAndroid Build Coastguard Worker             System.out.println("superTest FAILED: " + res);
1144*795d594fSAndroid Build Coastguard Worker             failure = true;
1145*795d594fSAndroid Build Coastguard Worker         }
1146*795d594fSAndroid Build Coastguard Worker 
1147*795d594fSAndroid Build Coastguard Worker         res = constClassTest(1111);
1148*795d594fSAndroid Build Coastguard Worker         if (res == 2222) {
1149*795d594fSAndroid Build Coastguard Worker             System.out.println("constClassTest PASSED");
1150*795d594fSAndroid Build Coastguard Worker         } else {
1151*795d594fSAndroid Build Coastguard Worker             System.out.println("constClassTest FAILED: " + res);
1152*795d594fSAndroid Build Coastguard Worker             failure = true;
1153*795d594fSAndroid Build Coastguard Worker         }
1154*795d594fSAndroid Build Coastguard Worker 
1155*795d594fSAndroid Build Coastguard Worker         res = constStringTest(10);
1156*795d594fSAndroid Build Coastguard Worker         if (res == 22) {
1157*795d594fSAndroid Build Coastguard Worker             System.out.println("constStringTest PASSED");
1158*795d594fSAndroid Build Coastguard Worker         } else {
1159*795d594fSAndroid Build Coastguard Worker             System.out.println("constStringTest FAILED: " + res);
1160*795d594fSAndroid Build Coastguard Worker             failure = true;
1161*795d594fSAndroid Build Coastguard Worker         }
1162*795d594fSAndroid Build Coastguard Worker 
1163*795d594fSAndroid Build Coastguard Worker         res = instanceTest(10);
1164*795d594fSAndroid Build Coastguard Worker         if (res == 1436) {
1165*795d594fSAndroid Build Coastguard Worker             System.out.println("instanceTest PASSED");
1166*795d594fSAndroid Build Coastguard Worker         } else {
1167*795d594fSAndroid Build Coastguard Worker             System.out.println("instanceTest FAILED: " + res);
1168*795d594fSAndroid Build Coastguard Worker             failure = true;
1169*795d594fSAndroid Build Coastguard Worker         }
1170*795d594fSAndroid Build Coastguard Worker 
1171*795d594fSAndroid Build Coastguard Worker         System.exit(failure ? 1 : 0);
1172*795d594fSAndroid Build Coastguard Worker     }
1173*795d594fSAndroid Build Coastguard Worker }
1174*795d594fSAndroid Build Coastguard Worker 
1175*795d594fSAndroid Build Coastguard Worker class IntMathBase {
IntMathBase()1176*795d594fSAndroid Build Coastguard Worker     IntMathBase() {
1177*795d594fSAndroid Build Coastguard Worker     }
1178*795d594fSAndroid Build Coastguard Worker 
tryThing()1179*795d594fSAndroid Build Coastguard Worker     int tryThing() {
1180*795d594fSAndroid Build Coastguard Worker         return 7;
1181*795d594fSAndroid Build Coastguard Worker     }
1182*795d594fSAndroid Build Coastguard Worker }
1183