xref: /aosp_15_r20/art/test/2275-integral-unsigned-arithmetic/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2024 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 public class Main {
main(String[] args)18*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
19*795d594fSAndroid Build Coastguard Worker     test_Integer_compareUnsigned_no_fold();
20*795d594fSAndroid Build Coastguard Worker     test_Long_compareUnsigned_no_fold();
21*795d594fSAndroid Build Coastguard Worker     test_Integer_compareUnsigned();
22*795d594fSAndroid Build Coastguard Worker     test_Long_compareUnsigned();
23*795d594fSAndroid Build Coastguard Worker     test_Integer_divideUnsigned_no_fold();
24*795d594fSAndroid Build Coastguard Worker     test_Long_divideUnsigned_no_fold();
25*795d594fSAndroid Build Coastguard Worker     test_Integer_divideUnsigned();
26*795d594fSAndroid Build Coastguard Worker     test_Long_divideUnsigned();
27*795d594fSAndroid Build Coastguard Worker     test_Integer_remainderUnsigned_no_fold();
28*795d594fSAndroid Build Coastguard Worker     test_Long_remainderUnsigned_no_fold();
29*795d594fSAndroid Build Coastguard Worker     test_Integer_remainderUnsigned();
30*795d594fSAndroid Build Coastguard Worker     test_Long_remainderUnsigned();
31*795d594fSAndroid Build Coastguard Worker 
32*795d594fSAndroid Build Coastguard Worker     test_Integer_compareUnsigned_in_condition();
33*795d594fSAndroid Build Coastguard Worker     test_Long_compareUnsigned_in_condition();
34*795d594fSAndroid Build Coastguard Worker 
35*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareSignedSameOperands(300), IF_TRUE_VALUE);
36*795d594fSAndroid Build Coastguard Worker 
37*795d594fSAndroid Build Coastguard Worker     test_Integer_doubleUnsignedCompare();
38*795d594fSAndroid Build Coastguard Worker     test_Integer_doubleUnsignedCompare_Xored();
39*795d594fSAndroid Build Coastguard Worker   }
40*795d594fSAndroid Build Coastguard Worker 
$noinline$cmpUnsignedInt(int a, int b)41*795d594fSAndroid Build Coastguard Worker   public static int $noinline$cmpUnsignedInt(int a, int b) {
42*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b);
43*795d594fSAndroid Build Coastguard Worker   }
44*795d594fSAndroid Build Coastguard Worker 
test_Integer_compareUnsigned_no_fold()45*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_compareUnsigned_no_fold() {
46*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(100, 100), 0);
47*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(100, 1), 1);
48*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(1, 100), -1);
49*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(-2, 2), 1);
50*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(2, -2), -1);
51*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(Integer.MAX_VALUE, Integer.MIN_VALUE), -1);
52*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(Integer.MIN_VALUE, Integer.MAX_VALUE), 1);
53*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(Integer.MAX_VALUE, -1), -1);
54*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(-1, Integer.MAX_VALUE), 1);
55*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedInt(0, 0), 0);
56*795d594fSAndroid Build Coastguard Worker   }
57*795d594fSAndroid Build Coastguard Worker 
$noinline$cmpUnsignedLong(long a, long b)58*795d594fSAndroid Build Coastguard Worker   public static int $noinline$cmpUnsignedLong(long a, long b) {
59*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b);
60*795d594fSAndroid Build Coastguard Worker   }
61*795d594fSAndroid Build Coastguard Worker 
test_Long_compareUnsigned_no_fold()62*795d594fSAndroid Build Coastguard Worker   public static void test_Long_compareUnsigned_no_fold() {
63*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(100L, 100L), 0);
64*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(100L, 1L), 1);
65*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(1L, 100L), -1);
66*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(-2L, 2L), 1);
67*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(2L, -2L), -1);
68*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(Long.MAX_VALUE, Long.MIN_VALUE), -1);
69*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(Long.MIN_VALUE, Long.MAX_VALUE), 1);
70*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(Long.MAX_VALUE, -1L), -1);
71*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(-1L, Long.MAX_VALUE), 1);
72*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$cmpUnsignedLong(0L, 0L), 0);
73*795d594fSAndroid Build Coastguard Worker   }
74*795d594fSAndroid Build Coastguard Worker 
test_Integer_compareUnsigned()75*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_compareUnsigned() {
76*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(100, 100), 0);
77*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(100, 1), 1);
78*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(1, 100), -1);
79*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(-2, 2), 1);
80*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(2, -2), -1);
81*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(Integer.MAX_VALUE, Integer.MIN_VALUE), -1);
82*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(Integer.MIN_VALUE, Integer.MAX_VALUE), 1);
83*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(Integer.MAX_VALUE, -1), -1);
84*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(-1, Integer.MAX_VALUE), 1);
85*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.compareUnsigned(0, 0), 0);
86*795d594fSAndroid Build Coastguard Worker   }
87*795d594fSAndroid Build Coastguard Worker 
test_Long_compareUnsigned()88*795d594fSAndroid Build Coastguard Worker   public static void test_Long_compareUnsigned() {
89*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(100L, 100L), 0);
90*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(100L, 1L), 1);
91*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(1L, 100L), -1);
92*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(-2L, 2L), 1);
93*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(2L, -2L), -1);
94*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(Long.MAX_VALUE, Long.MIN_VALUE), -1);
95*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(Long.MIN_VALUE, Long.MAX_VALUE), 1);
96*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(Long.MAX_VALUE, -1L), -1);
97*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(-1L, Long.MAX_VALUE), 1);
98*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.compareUnsigned(0L, 0L), 0);
99*795d594fSAndroid Build Coastguard Worker   }
100*795d594fSAndroid Build Coastguard Worker 
$noinline$divideUnsignedInt(int a, int b)101*795d594fSAndroid Build Coastguard Worker   public static int $noinline$divideUnsignedInt(int a, int b) {
102*795d594fSAndroid Build Coastguard Worker     return Integer.divideUnsigned(a, b);
103*795d594fSAndroid Build Coastguard Worker   }
104*795d594fSAndroid Build Coastguard Worker 
test_Integer_divideUnsigned_no_fold()105*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_divideUnsigned_no_fold() {
106*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(100, 10), 10);
107*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(100, 1), 100);
108*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(1024, 128), 8);
109*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(12345678, 264), 46763);
110*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(13, 5), 2);
111*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(-2, 2), Integer.MAX_VALUE);
112*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(-1, 2), Integer.MAX_VALUE);
113*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(100000, -1), 0);
114*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(Integer.MAX_VALUE, -1), 0);
115*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(-2, -1), 0);
116*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(-1, -2), 1);
117*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(-173448, 13), 330368757);
118*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(Integer.MIN_VALUE, 2), (1 << 30));
119*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(-1, Integer.MIN_VALUE), 1);
120*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(Integer.MAX_VALUE, Integer.MIN_VALUE), 0);
121*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedInt(Integer.MIN_VALUE, Integer.MAX_VALUE), 1);
122*795d594fSAndroid Build Coastguard Worker 
123*795d594fSAndroid Build Coastguard Worker     try {
124*795d594fSAndroid Build Coastguard Worker       $noinline$divideUnsignedInt(1, 0);
125*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
126*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
127*795d594fSAndroid Build Coastguard Worker     }
128*795d594fSAndroid Build Coastguard Worker   }
129*795d594fSAndroid Build Coastguard Worker 
$noinline$divideUnsignedLong(long a, long b)130*795d594fSAndroid Build Coastguard Worker   public static long $noinline$divideUnsignedLong(long a, long b) {
131*795d594fSAndroid Build Coastguard Worker     return Long.divideUnsigned(a, b);
132*795d594fSAndroid Build Coastguard Worker   }
133*795d594fSAndroid Build Coastguard Worker 
134*795d594fSAndroid Build Coastguard Worker   private static final long BIG_LONG_VALUE = 739287620162442240L;
135*795d594fSAndroid Build Coastguard Worker 
test_Long_divideUnsigned_no_fold()136*795d594fSAndroid Build Coastguard Worker   public static void test_Long_divideUnsigned_no_fold() {
137*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(100L, 10L), 10L);
138*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(100L, 1L), 100L);
139*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(1024L, 128L), 8L);
140*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(12345678L, 264L), 46763L);
141*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(13L, 5L), 2L);
142*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(-2L, 2L), Long.MAX_VALUE);
143*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(-1L, 2L), Long.MAX_VALUE);
144*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(100000L, -1L), 0L);
145*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(Long.MAX_VALUE, -1L), 0L);
146*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(-2L, -1L), 0L);
147*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(-1L, -2L), 1L);
148*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(-173448L, 13L), 1418980313362259859L);
149*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(Long.MIN_VALUE, 2L), (1L << 62));
150*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(-1L, Long.MIN_VALUE), 1L);
151*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(Long.MAX_VALUE, Long.MIN_VALUE), 0L);
152*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(Long.MIN_VALUE, Long.MAX_VALUE), 1L);
153*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(Long.MAX_VALUE, 1L), Long.MAX_VALUE);
154*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(Long.MIN_VALUE, 1L), Long.MIN_VALUE);
155*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(BIG_LONG_VALUE, BIG_LONG_VALUE), 1L);
156*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(BIG_LONG_VALUE, 1L), BIG_LONG_VALUE);
157*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(BIG_LONG_VALUE, 1024L), 721960566564885L);
158*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$divideUnsignedLong(BIG_LONG_VALUE, 0x1FFFFFFFFL), 86064406L);
159*795d594fSAndroid Build Coastguard Worker 
160*795d594fSAndroid Build Coastguard Worker     try {
161*795d594fSAndroid Build Coastguard Worker       $noinline$divideUnsignedLong(1L, 0L);
162*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
163*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
164*795d594fSAndroid Build Coastguard Worker     }
165*795d594fSAndroid Build Coastguard Worker   }
166*795d594fSAndroid Build Coastguard Worker 
test_Integer_divideUnsigned()167*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_divideUnsigned() {
168*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(100, 10), 10);
169*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(100, 1), 100);
170*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(1024, 128), 8);
171*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(12345678, 264), 46763);
172*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(13, 5), 2);
173*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(-2, 2), Integer.MAX_VALUE);
174*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(-1, 2), Integer.MAX_VALUE);
175*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(100000, -1), 0);
176*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(Integer.MAX_VALUE, -1), 0);
177*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(-2, -1), 0);
178*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(-1, -2), 1);
179*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(-173448, 13), 330368757);
180*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(Integer.MIN_VALUE, 2), (1 << 30));
181*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(-1, Integer.MIN_VALUE), 1);
182*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(Integer.MAX_VALUE, Integer.MIN_VALUE), 0);
183*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.divideUnsigned(Integer.MIN_VALUE, Integer.MAX_VALUE), 1);
184*795d594fSAndroid Build Coastguard Worker 
185*795d594fSAndroid Build Coastguard Worker     try {
186*795d594fSAndroid Build Coastguard Worker       Integer.divideUnsigned(1, 0);
187*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
188*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
189*795d594fSAndroid Build Coastguard Worker     }
190*795d594fSAndroid Build Coastguard Worker   }
191*795d594fSAndroid Build Coastguard Worker 
test_Long_divideUnsigned()192*795d594fSAndroid Build Coastguard Worker   public static void test_Long_divideUnsigned() {
193*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(100L, 10L), 10L);
194*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(100L, 1L), 100L);
195*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(1024L, 128L), 8L);
196*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(12345678L, 264L), 46763L);
197*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(13L, 5L), 2L);
198*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(-2L, 2L), Long.MAX_VALUE);
199*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(-1L, 2L), Long.MAX_VALUE);
200*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(100000L, -1L), 0L);
201*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(Long.MAX_VALUE, -1L), 0L);
202*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(-2L, -1L), 0L);
203*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(-1L, -2L), 1L);
204*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(-173448L, 13L), 1418980313362259859L);
205*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(Long.MIN_VALUE, 2L), (1L << 62));
206*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(-1L, Long.MIN_VALUE), 1L);
207*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(Long.MAX_VALUE, Long.MIN_VALUE), 0L);
208*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(Long.MIN_VALUE, Long.MAX_VALUE), 1L);
209*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(Long.MAX_VALUE, 1L), Long.MAX_VALUE);
210*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(Long.MIN_VALUE, 1L), Long.MIN_VALUE);
211*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, BIG_LONG_VALUE), 1L);
212*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, 1L), BIG_LONG_VALUE);
213*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, 1024L), 721960566564885L);
214*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.divideUnsigned(BIG_LONG_VALUE, 0x1FFFFFFFFL), 86064406L);
215*795d594fSAndroid Build Coastguard Worker 
216*795d594fSAndroid Build Coastguard Worker     try {
217*795d594fSAndroid Build Coastguard Worker       Long.divideUnsigned(1L, 0L);
218*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
219*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
220*795d594fSAndroid Build Coastguard Worker     }
221*795d594fSAndroid Build Coastguard Worker   }
222*795d594fSAndroid Build Coastguard Worker 
$noinline$remainderUnsignedInt(int a, int b)223*795d594fSAndroid Build Coastguard Worker   public static int $noinline$remainderUnsignedInt(int a, int b) {
224*795d594fSAndroid Build Coastguard Worker     return Integer.remainderUnsigned(a, b);
225*795d594fSAndroid Build Coastguard Worker   }
226*795d594fSAndroid Build Coastguard Worker 
test_Integer_remainderUnsigned_no_fold()227*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_remainderUnsigned_no_fold() {
228*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(100, 10), 0);
229*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(100, 1), 0);
230*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(1024, 127), 8);
231*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(12345678, 264), 246);
232*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(13, 5), 3);
233*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(-2, 2), 0);
234*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(-1, 2), 1);
235*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(100000, -1), 100000);
236*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(Integer.MAX_VALUE, -1), Integer.MAX_VALUE);
237*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(-2, -1), -2);
238*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(-1, -2), 1);
239*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(-173448, 13), 7);
240*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(Integer.MIN_VALUE, 2), 0);
241*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(-1, Integer.MIN_VALUE), Integer.MAX_VALUE);
242*795d594fSAndroid Build Coastguard Worker     assertEquals(
243*795d594fSAndroid Build Coastguard Worker         $noinline$remainderUnsignedInt(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE);
244*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedInt(Integer.MIN_VALUE, Integer.MAX_VALUE), 1);
245*795d594fSAndroid Build Coastguard Worker 
246*795d594fSAndroid Build Coastguard Worker     try {
247*795d594fSAndroid Build Coastguard Worker       $noinline$remainderUnsignedInt(1, 0);
248*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
249*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
250*795d594fSAndroid Build Coastguard Worker     }
251*795d594fSAndroid Build Coastguard Worker   }
252*795d594fSAndroid Build Coastguard Worker 
$noinline$remainderUnsignedLong(long a, long b)253*795d594fSAndroid Build Coastguard Worker   public static long $noinline$remainderUnsignedLong(long a, long b) {
254*795d594fSAndroid Build Coastguard Worker     return Long.remainderUnsigned(a, b);
255*795d594fSAndroid Build Coastguard Worker   }
256*795d594fSAndroid Build Coastguard Worker 
test_Long_remainderUnsigned_no_fold()257*795d594fSAndroid Build Coastguard Worker   public static void test_Long_remainderUnsigned_no_fold() {
258*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(100L, 10L), 0L);
259*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(100L, 1L), 0L);
260*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(1024L, 127L), 8L);
261*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(12345678L, 264L), 246L);
262*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(13L, 5L), 3L);
263*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(-2L, 2L), 0L);
264*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(-1L, 2L), 1L);
265*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(100000L, -1L), 100000L);
266*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(Long.MAX_VALUE, -1L), Long.MAX_VALUE);
267*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(-2L, -1L), -2L);
268*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(-1L, -2L), 1L);
269*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(-173448L, 13L), 1L);
270*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(Long.MIN_VALUE, 2L), 0L);
271*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(-1L, Long.MIN_VALUE), Long.MAX_VALUE);
272*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE);
273*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(Long.MIN_VALUE, Long.MAX_VALUE), 1L);
274*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(Long.MAX_VALUE, 1L), 0L);
275*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(Long.MIN_VALUE, 1L), 0L);
276*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(BIG_LONG_VALUE, BIG_LONG_VALUE), 0L);
277*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(BIG_LONG_VALUE, 1L), 0L);
278*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(BIG_LONG_VALUE, 1024L), 0L);
279*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$remainderUnsignedLong(BIG_LONG_VALUE, 0x1FFFFFFFFL), 2009174294L);
280*795d594fSAndroid Build Coastguard Worker     assertEquals(
281*795d594fSAndroid Build Coastguard Worker         $noinline$remainderUnsignedLong(BIG_LONG_VALUE, -38766615688777L), 739287620162442240L);
282*795d594fSAndroid Build Coastguard Worker 
283*795d594fSAndroid Build Coastguard Worker     try {
284*795d594fSAndroid Build Coastguard Worker       $noinline$remainderUnsignedLong(1L, 0L);
285*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
286*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
287*795d594fSAndroid Build Coastguard Worker     }
288*795d594fSAndroid Build Coastguard Worker   }
289*795d594fSAndroid Build Coastguard Worker 
test_Integer_remainderUnsigned()290*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_remainderUnsigned() {
291*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(100, 10), 0);
292*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(100, 1), 0);
293*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(1024, 127), 8);
294*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(12345678, 264), 246);
295*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(13, 5), 3);
296*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(-2, 2), 0);
297*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(-1, 2), 1);
298*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(100000, -1), 100000);
299*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(Integer.MAX_VALUE, -1), Integer.MAX_VALUE);
300*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(-2, -1), -2);
301*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(-1, -2), 1);
302*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(-173448, 13), 7);
303*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(Integer.MIN_VALUE, 2), 0);
304*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(-1, Integer.MIN_VALUE), Integer.MAX_VALUE);
305*795d594fSAndroid Build Coastguard Worker     assertEquals(
306*795d594fSAndroid Build Coastguard Worker         Integer.remainderUnsigned(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE);
307*795d594fSAndroid Build Coastguard Worker     assertEquals(Integer.remainderUnsigned(Integer.MIN_VALUE, Integer.MAX_VALUE), 1);
308*795d594fSAndroid Build Coastguard Worker 
309*795d594fSAndroid Build Coastguard Worker     try {
310*795d594fSAndroid Build Coastguard Worker       Integer.remainderUnsigned(1, 0);
311*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
312*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
313*795d594fSAndroid Build Coastguard Worker     }
314*795d594fSAndroid Build Coastguard Worker   }
315*795d594fSAndroid Build Coastguard Worker 
test_Long_remainderUnsigned()316*795d594fSAndroid Build Coastguard Worker   public static void test_Long_remainderUnsigned() {
317*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(100L, 10L), 0L);
318*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(100L, 1L), 0L);
319*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(1024L, 127L), 8L);
320*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(12345678L, 264L), 246L);
321*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(13L, 5L), 3L);
322*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(-2L, 2L), 0L);
323*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(-1L, 2L), 1L);
324*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(100000L, -1L), 100000L);
325*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(Long.MAX_VALUE, -1L), Long.MAX_VALUE);
326*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(-2L, -1L), -2L);
327*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(-1L, -2L), 1L);
328*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(-173448L, 13L), 1L);
329*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(Long.MIN_VALUE, 2L), 0L);
330*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(-1L, Long.MIN_VALUE), Long.MAX_VALUE);
331*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE);
332*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(Long.MIN_VALUE, Long.MAX_VALUE), 1L);
333*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(Long.MAX_VALUE, 1L), 0L);
334*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(Long.MIN_VALUE, 1L), 0L);
335*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(BIG_LONG_VALUE, BIG_LONG_VALUE), 0L);
336*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(BIG_LONG_VALUE, 1L), 0L);
337*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(BIG_LONG_VALUE, 1024L), 0L);
338*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(BIG_LONG_VALUE, 0x1FFFFFFFFL), 2009174294L);
339*795d594fSAndroid Build Coastguard Worker     assertEquals(Long.remainderUnsigned(BIG_LONG_VALUE, -38766615688777L), 739287620162442240L);
340*795d594fSAndroid Build Coastguard Worker 
341*795d594fSAndroid Build Coastguard Worker     try {
342*795d594fSAndroid Build Coastguard Worker       Long.remainderUnsigned(1L, 0L);
343*795d594fSAndroid Build Coastguard Worker       throw new Error("Unreachable");
344*795d594fSAndroid Build Coastguard Worker     } catch (ArithmeticException expected) {
345*795d594fSAndroid Build Coastguard Worker     }
346*795d594fSAndroid Build Coastguard Worker   }
347*795d594fSAndroid Build Coastguard Worker 
assertEquals(int expected, int actual)348*795d594fSAndroid Build Coastguard Worker   public static void assertEquals(int expected, int actual) {
349*795d594fSAndroid Build Coastguard Worker       if (expected != actual) {
350*795d594fSAndroid Build Coastguard Worker           throw new Error("Expected: " + expected + ", found: " + actual);
351*795d594fSAndroid Build Coastguard Worker       }
352*795d594fSAndroid Build Coastguard Worker   }
353*795d594fSAndroid Build Coastguard Worker 
assertEquals(long expected, long actual)354*795d594fSAndroid Build Coastguard Worker   public static void assertEquals(long expected, long actual) {
355*795d594fSAndroid Build Coastguard Worker       if (expected != actual) {
356*795d594fSAndroid Build Coastguard Worker           throw new Error("Expected: " + expected + ", found: " + actual);
357*795d594fSAndroid Build Coastguard Worker       }
358*795d594fSAndroid Build Coastguard Worker   }
359*795d594fSAndroid Build Coastguard Worker 
assertEquals(boolean expected, boolean actual)360*795d594fSAndroid Build Coastguard Worker   public static void assertEquals(boolean expected, boolean actual) {
361*795d594fSAndroid Build Coastguard Worker       if (expected != actual) {
362*795d594fSAndroid Build Coastguard Worker           throw new Error("Expected: " + expected + ", found: " + actual);
363*795d594fSAndroid Build Coastguard Worker       }
364*795d594fSAndroid Build Coastguard Worker   }
365*795d594fSAndroid Build Coastguard Worker 
366*795d594fSAndroid Build Coastguard Worker   static final int IF_TRUE_VALUE = -55555;
367*795d594fSAndroid Build Coastguard Worker   static final int IF_FALSE_VALUE = 99999;
368*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedInt_LT(int a, int b)369*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedInt_LT(int a, int b) {
370*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b) < 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
371*795d594fSAndroid Build Coastguard Worker   }
372*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedInt_LE(int a, int b)373*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedInt_LE(int a, int b) {
374*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b) <= 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
375*795d594fSAndroid Build Coastguard Worker   }
376*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedInt_GT(int a, int b)377*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedInt_GT(int a, int b) {
378*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b) > 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
379*795d594fSAndroid Build Coastguard Worker   }
380*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedInt_GE(int a, int b)381*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedInt_GE(int a, int b) {
382*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b) >= 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
383*795d594fSAndroid Build Coastguard Worker   }
384*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedInt_EQ(int a, int b)385*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedInt_EQ(int a, int b) {
386*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b) == 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
387*795d594fSAndroid Build Coastguard Worker   }
388*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedInt_NE(int a, int b)389*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedInt_NE(int a, int b) {
390*795d594fSAndroid Build Coastguard Worker     return Integer.compareUnsigned(a, b) != 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
391*795d594fSAndroid Build Coastguard Worker   }
392*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedLong_LT(long a, long b)393*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedLong_LT(long a, long b) {
394*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b) < 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
395*795d594fSAndroid Build Coastguard Worker   }
396*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedLong_LE(long a, long b)397*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedLong_LE(long a, long b) {
398*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b) <= 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
399*795d594fSAndroid Build Coastguard Worker   }
400*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedLong_GT(long a, long b)401*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedLong_GT(long a, long b) {
402*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b) > 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
403*795d594fSAndroid Build Coastguard Worker   }
404*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedLong_GE(long a, long b)405*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedLong_GE(long a, long b) {
406*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b) >= 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
407*795d594fSAndroid Build Coastguard Worker   }
408*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedLong_EQ(long a, long b)409*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedLong_EQ(long a, long b) {
410*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b) == 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
411*795d594fSAndroid Build Coastguard Worker   }
412*795d594fSAndroid Build Coastguard Worker 
$noinline$compareUnsignedLong_NE(long a, long b)413*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareUnsignedLong_NE(long a, long b) {
414*795d594fSAndroid Build Coastguard Worker     return Long.compareUnsigned(a, b) != 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
415*795d594fSAndroid Build Coastguard Worker   }
416*795d594fSAndroid Build Coastguard Worker 
$noinline$compareSignedSameOperands(long a)417*795d594fSAndroid Build Coastguard Worker   public static int $noinline$compareSignedSameOperands(long a) {
418*795d594fSAndroid Build Coastguard Worker     return Long.compare(a, a) >= 0 ? IF_TRUE_VALUE : IF_FALSE_VALUE;
419*795d594fSAndroid Build Coastguard Worker   }
420*795d594fSAndroid Build Coastguard Worker 
test_Integer_compareUnsigned_in_condition()421*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_compareUnsigned_in_condition() {
422*795d594fSAndroid Build Coastguard Worker     // <
423*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_LT(10, 20), IF_TRUE_VALUE);
424*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_LT(Integer.MIN_VALUE, 0), IF_FALSE_VALUE);
425*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_LT(0, 0), IF_FALSE_VALUE);
426*795d594fSAndroid Build Coastguard Worker 
427*795d594fSAndroid Build Coastguard Worker     // <=
428*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_LE(10, 20), IF_TRUE_VALUE);
429*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_LE(Integer.MIN_VALUE, 0), IF_FALSE_VALUE);
430*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_LE(0, 0), IF_TRUE_VALUE);
431*795d594fSAndroid Build Coastguard Worker 
432*795d594fSAndroid Build Coastguard Worker     // >
433*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_GT(10, 20), IF_FALSE_VALUE);
434*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_GT(Integer.MIN_VALUE, 0), IF_TRUE_VALUE);
435*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_GT(0, 0), IF_FALSE_VALUE);
436*795d594fSAndroid Build Coastguard Worker 
437*795d594fSAndroid Build Coastguard Worker     // =>
438*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_GE(10, 20), IF_FALSE_VALUE);
439*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_GE(Integer.MIN_VALUE, 0), IF_TRUE_VALUE);
440*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_GE(0, 0), IF_TRUE_VALUE);
441*795d594fSAndroid Build Coastguard Worker 
442*795d594fSAndroid Build Coastguard Worker     // ==
443*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_EQ(10, 20), IF_FALSE_VALUE);
444*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_EQ(Integer.MIN_VALUE, 0), IF_FALSE_VALUE);
445*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_EQ(0, 0), IF_TRUE_VALUE);
446*795d594fSAndroid Build Coastguard Worker 
447*795d594fSAndroid Build Coastguard Worker     // !=
448*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_NE(10, 20), IF_TRUE_VALUE);
449*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_NE(Integer.MIN_VALUE, 0), IF_TRUE_VALUE);
450*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedInt_NE(0, 0), IF_FALSE_VALUE);
451*795d594fSAndroid Build Coastguard Worker   }
452*795d594fSAndroid Build Coastguard Worker 
test_Long_compareUnsigned_in_condition()453*795d594fSAndroid Build Coastguard Worker   public static void test_Long_compareUnsigned_in_condition() {
454*795d594fSAndroid Build Coastguard Worker     // <
455*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_LT(10L, 20L), IF_TRUE_VALUE);
456*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_LT(Long.MIN_VALUE, 0L), IF_FALSE_VALUE);
457*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_LT(0L, 0L), IF_FALSE_VALUE);
458*795d594fSAndroid Build Coastguard Worker 
459*795d594fSAndroid Build Coastguard Worker     // <=
460*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_LE(10L, 20L), IF_TRUE_VALUE);
461*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_LE(Long.MIN_VALUE, 0L), IF_FALSE_VALUE);
462*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_LE(0L, 0L), IF_TRUE_VALUE);
463*795d594fSAndroid Build Coastguard Worker 
464*795d594fSAndroid Build Coastguard Worker     // >
465*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_GT(10L, 20L), IF_FALSE_VALUE);
466*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_GT(Long.MIN_VALUE, 0L), IF_TRUE_VALUE);
467*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_GT(0L, 0L), IF_FALSE_VALUE);
468*795d594fSAndroid Build Coastguard Worker 
469*795d594fSAndroid Build Coastguard Worker     // =>
470*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_GE(10L, 20L), IF_FALSE_VALUE);
471*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_GE(Long.MIN_VALUE, 0L), IF_TRUE_VALUE);
472*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_GE(0L, 0L), IF_TRUE_VALUE);
473*795d594fSAndroid Build Coastguard Worker 
474*795d594fSAndroid Build Coastguard Worker     // ==
475*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_EQ(10L, 20L), IF_FALSE_VALUE);
476*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_EQ(Long.MIN_VALUE, 0L), IF_FALSE_VALUE);
477*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_EQ(0L, 0L), IF_TRUE_VALUE);
478*795d594fSAndroid Build Coastguard Worker 
479*795d594fSAndroid Build Coastguard Worker     // !=
480*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_NE(10L, 20L), IF_TRUE_VALUE);
481*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_NE(Long.MIN_VALUE, 0L), IF_TRUE_VALUE);
482*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$compareUnsignedLong_NE(0L, 0L), IF_FALSE_VALUE);
483*795d594fSAndroid Build Coastguard Worker   }
484*795d594fSAndroid Build Coastguard Worker 
$inline$hidden_zero()485*795d594fSAndroid Build Coastguard Worker   private static int $inline$hidden_zero() {
486*795d594fSAndroid Build Coastguard Worker     return "1".indexOf('1');
487*795d594fSAndroid Build Coastguard Worker   }
488*795d594fSAndroid Build Coastguard Worker 
$inline$BelowInteger(int x, int y)489*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$BelowInteger(int x, int y) {
490*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE) < 0;
491*795d594fSAndroid Build Coastguard Worker   }
492*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_B(int x, int y)493*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_B(int x, int y) {
494*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE);
495*795d594fSAndroid Build Coastguard Worker     return $inline$BelowInteger(cmp, $inline$hidden_zero());
496*795d594fSAndroid Build Coastguard Worker   }
497*795d594fSAndroid Build Coastguard Worker 
$inline$BelowOrEqualInteger(int x, int y)498*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$BelowOrEqualInteger(int x, int y) {
499*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE) <= 0;
500*795d594fSAndroid Build Coastguard Worker   }
501*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_BE(int x, int y)502*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_BE(int x, int y) {
503*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE);
504*795d594fSAndroid Build Coastguard Worker     return $inline$BelowOrEqualInteger(cmp, $inline$hidden_zero());
505*795d594fSAndroid Build Coastguard Worker   }
506*795d594fSAndroid Build Coastguard Worker 
$inline$AboveInteger(int x, int y)507*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$AboveInteger(int x, int y) {
508*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE) > 0;
509*795d594fSAndroid Build Coastguard Worker   }
510*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_A(int x, int y)511*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_A(int x, int y) {
512*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE);
513*795d594fSAndroid Build Coastguard Worker     return $inline$AboveInteger(cmp, $inline$hidden_zero());
514*795d594fSAndroid Build Coastguard Worker   }
515*795d594fSAndroid Build Coastguard Worker 
$inline$AboveOrEqualInteger(int x, int y)516*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$AboveOrEqualInteger(int x, int y) {
517*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE) >= 0;
518*795d594fSAndroid Build Coastguard Worker   }
519*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_AE(int x, int y)520*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_AE(int x, int y) {
521*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x + Integer.MIN_VALUE, y + Integer.MIN_VALUE);
522*795d594fSAndroid Build Coastguard Worker     return $inline$AboveOrEqualInteger(cmp, $inline$hidden_zero());
523*795d594fSAndroid Build Coastguard Worker   }
524*795d594fSAndroid Build Coastguard Worker 
test_Integer_doubleUnsignedCompare()525*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_doubleUnsignedCompare() {
526*795d594fSAndroid Build Coastguard Worker     // <
527*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_B(0, 0), false);
528*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_B(Integer.MIN_VALUE, 0), false);
529*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_B(0, Integer.MIN_VALUE), false);
530*795d594fSAndroid Build Coastguard Worker 
531*795d594fSAndroid Build Coastguard Worker     // <=
532*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BE(0, 0), true);
533*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BE(Integer.MIN_VALUE, 0), false);
534*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BE(0, Integer.MIN_VALUE), false);
535*795d594fSAndroid Build Coastguard Worker 
536*795d594fSAndroid Build Coastguard Worker     // >
537*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_A(0, 0), false);
538*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_A(Integer.MIN_VALUE, 0), true);
539*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_A(0, Integer.MIN_VALUE), true);
540*795d594fSAndroid Build Coastguard Worker 
541*795d594fSAndroid Build Coastguard Worker     // =>
542*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AE(0, 0), true);
543*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AE(Integer.MIN_VALUE, 0), true);
544*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AE(0, Integer.MIN_VALUE), true);
545*795d594fSAndroid Build Coastguard Worker   }
546*795d594fSAndroid Build Coastguard Worker 
$inline$BelowInteger_Xored(int x, int y)547*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$BelowInteger_Xored(int x, int y) {
548*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE) < 0;
549*795d594fSAndroid Build Coastguard Worker   }
550*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_BT_Xored(int x, int y)551*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_BT_Xored(int x, int y) {
552*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE);
553*795d594fSAndroid Build Coastguard Worker     return $inline$BelowInteger_Xored(cmp, $inline$hidden_zero());
554*795d594fSAndroid Build Coastguard Worker   }
555*795d594fSAndroid Build Coastguard Worker 
$inline$BelowOrEqualInteger_Xored(int x, int y)556*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$BelowOrEqualInteger_Xored(int x, int y) {
557*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE) <= 0;
558*795d594fSAndroid Build Coastguard Worker   }
559*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_BE_Xored(int x, int y)560*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_BE_Xored(int x, int y) {
561*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE);
562*795d594fSAndroid Build Coastguard Worker     return $inline$BelowOrEqualInteger_Xored(cmp, $inline$hidden_zero());
563*795d594fSAndroid Build Coastguard Worker   }
564*795d594fSAndroid Build Coastguard Worker 
$inline$AboveInteger_Xored(int x, int y)565*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$AboveInteger_Xored(int x, int y) {
566*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE) > 0;
567*795d594fSAndroid Build Coastguard Worker   }
568*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_AT_Xored(int x, int y)569*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_AT_Xored(int x, int y) {
570*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE);
571*795d594fSAndroid Build Coastguard Worker     return $inline$AboveInteger_Xored(cmp, $inline$hidden_zero());
572*795d594fSAndroid Build Coastguard Worker   }
573*795d594fSAndroid Build Coastguard Worker 
$inline$AboveOrEqualInteger_Xored(int x, int y)574*795d594fSAndroid Build Coastguard Worker   public static boolean $inline$AboveOrEqualInteger_Xored(int x, int y) {
575*795d594fSAndroid Build Coastguard Worker     return Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE) >= 0;
576*795d594fSAndroid Build Coastguard Worker   }
577*795d594fSAndroid Build Coastguard Worker 
$noinline$testDoubleUnsignedCompareInteger_AE_Xored(int x, int y)578*795d594fSAndroid Build Coastguard Worker   public static boolean $noinline$testDoubleUnsignedCompareInteger_AE_Xored(int x, int y) {
579*795d594fSAndroid Build Coastguard Worker     int cmp = Integer.compare(x ^ Integer.MIN_VALUE, y ^ Integer.MIN_VALUE);
580*795d594fSAndroid Build Coastguard Worker     return $inline$AboveOrEqualInteger_Xored(cmp, $inline$hidden_zero());
581*795d594fSAndroid Build Coastguard Worker   }
582*795d594fSAndroid Build Coastguard Worker 
test_Integer_doubleUnsignedCompare_Xored()583*795d594fSAndroid Build Coastguard Worker   public static void test_Integer_doubleUnsignedCompare_Xored() {
584*795d594fSAndroid Build Coastguard Worker     // <
585*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BT_Xored(0, 0), false);
586*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BT_Xored(Integer.MIN_VALUE, 0), false);
587*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BT_Xored(0, Integer.MIN_VALUE), false);
588*795d594fSAndroid Build Coastguard Worker 
589*795d594fSAndroid Build Coastguard Worker     // <=
590*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BE_Xored(0, 0), true);
591*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BE_Xored(Integer.MIN_VALUE, 0), false);
592*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_BE_Xored(0, Integer.MIN_VALUE), false);
593*795d594fSAndroid Build Coastguard Worker 
594*795d594fSAndroid Build Coastguard Worker     // >
595*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AT_Xored(0, 0), false);
596*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AT_Xored(Integer.MIN_VALUE, 0), true);
597*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AT_Xored(0, Integer.MIN_VALUE), true);
598*795d594fSAndroid Build Coastguard Worker 
599*795d594fSAndroid Build Coastguard Worker     // =>
600*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AE_Xored(0, 0), true);
601*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AE_Xored(Integer.MIN_VALUE, 0), true);
602*795d594fSAndroid Build Coastguard Worker     assertEquals($noinline$testDoubleUnsignedCompareInteger_AE_Xored(0, Integer.MIN_VALUE), true);
603*795d594fSAndroid Build Coastguard Worker   }
604*795d594fSAndroid Build Coastguard Worker }
605