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