Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 import java.lang.reflect.Method;
     18 
     19 public class Main {
     20 
     21   public static boolean doThrow = false;
     22 
     23   /// CHECK-START: void Main.$opt$noinline$testReplaceInputWithItself(int) builder (after)
     24   /// CHECK-DAG:     <<ArgX:i\d+>>   ParameterValue
     25   /// CHECK-DAG:     <<Zero:i\d+>>   IntConstant 0
     26   /// CHECK-DAG:     <<Cmp:i\d+>>    InvokeStaticOrDirect [<<ArgX>>,<<Zero>>{{(,[ij]\d+)?}}] intrinsic:IntegerCompare
     27   /// CHECK-DAG:                     GreaterThanOrEqual [<<Cmp>>,<<Zero>>]
     28 
     29   /// CHECK-START: void Main.$opt$noinline$testReplaceInputWithItself(int) instruction_simplifier (after)
     30   /// CHECK-DAG:     <<ArgX:i\d+>>   ParameterValue
     31   /// CHECK-DAG:     <<Zero:i\d+>>   IntConstant 0
     32   /// CHECK-DAG:                     GreaterThanOrEqual [<<ArgX>>,<<Zero>>]
     33 
     34   public static void $opt$noinline$testReplaceInputWithItself(int x) {
     35     if (doThrow) { throw new Error(); }
     36 
     37     // The instruction simplifier first replaces Integer.compare(x, 0) with Compare HIR
     38     // and then merges the Compare into the GreaterThanOrEqual. This is a regression
     39     // test that to check that it is allowed to replace the second input of the
     40     // GreaterThanOrEqual, i.e. <<Zero>>, with the very same instruction.
     41     if (Integer.compare(x, 0) < 0) {
     42       System.out.println("OOOPS");
     43     }
     44   }
     45 
     46   /// CHECK-START: int Main.compareBooleans(boolean, boolean) select_generator (after)
     47   /// CHECK-NOT:                     Phi
     48 
     49   /// CHECK-START: int Main.compareBooleans(boolean, boolean) instruction_simplifier$after_bce (after)
     50   /// CHECK:         <<ArgX:z\d+>>   ParameterValue
     51   /// CHECK:         <<ArgY:z\d+>>   ParameterValue
     52   /// CHECK-DAG:     <<Result:i\d+>> Compare [<<ArgX>>,<<ArgY>>]
     53   /// CHECK-DAG:                     Return [<<Result>>]
     54 
     55   /// CHECK-START: int Main.compareBooleans(boolean, boolean) instruction_simplifier$after_bce (after)
     56   /// CHECK-NOT:                     Select
     57 
     58   private static int compareBooleans(boolean x, boolean y) {
     59     return Integer.compare((x ? 1 : 0), (y ? 1 : 0));
     60   }
     61 
     62   private static int compareBooleansSmali(boolean x, boolean y) throws Exception {
     63     Class<?> c = Class.forName("Smali");
     64     Method m = c.getMethod("compareBooleans", boolean.class, boolean.class);
     65     return (Integer) m.invoke(null, x, y);
     66   }
     67 
     68   /// CHECK-START: int Main.compareBytes(byte, byte) builder (after)
     69   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
     70   /// CHECK-DAG:                     Return [<<Result>>]
     71 
     72   /// CHECK-START: int Main.compareBytes(byte, byte) instruction_simplifier (after)
     73   /// CHECK-DAG:     <<Result:i\d+>> Compare
     74   /// CHECK-DAG:                     Return [<<Result>>]
     75 
     76   /// CHECK-START: int Main.compareBytes(byte, byte) instruction_simplifier (after)
     77   /// CHECK-NOT:                     InvokeStaticOrDirect
     78 
     79   private static int compareBytes(byte x, byte y) {
     80     return Integer.compare(x, y);
     81   }
     82 
     83   /// CHECK-START: int Main.compareShorts(short, short) builder (after)
     84   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
     85   /// CHECK-DAG:                     Return [<<Result>>]
     86 
     87   /// CHECK-START: int Main.compareShorts(short, short) instruction_simplifier (after)
     88   /// CHECK-DAG:     <<Result:i\d+>> Compare
     89   /// CHECK-DAG:                     Return [<<Result>>]
     90 
     91   /// CHECK-START: int Main.compareShorts(short, short) instruction_simplifier (after)
     92   /// CHECK-NOT:                     InvokeStaticOrDirect
     93 
     94   private static int compareShorts(short x, short y) {
     95     return Integer.compare(x, y);
     96   }
     97 
     98   /// CHECK-START: int Main.compareChars(char, char) builder (after)
     99   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    100   /// CHECK-DAG:                     Return [<<Result>>]
    101 
    102   /// CHECK-START: int Main.compareChars(char, char) instruction_simplifier (after)
    103   /// CHECK-DAG:     <<Result:i\d+>> Compare
    104   /// CHECK-DAG:                     Return [<<Result>>]
    105 
    106   /// CHECK-START: int Main.compareChars(char, char) instruction_simplifier (after)
    107   /// CHECK-NOT:                     InvokeStaticOrDirect
    108 
    109   private static int compareChars(char x, char y) {
    110     return Integer.compare(x, y);
    111   }
    112 
    113   /// CHECK-START: int Main.compareInts(int, int) builder (after)
    114   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    115   /// CHECK-DAG:                     Return [<<Result>>]
    116 
    117   /// CHECK-START: int Main.compareInts(int, int) instruction_simplifier (after)
    118   /// CHECK-DAG:     <<Result:i\d+>> Compare
    119   /// CHECK-DAG:                     Return [<<Result>>]
    120 
    121   /// CHECK-START: int Main.compareInts(int, int) instruction_simplifier (after)
    122   /// CHECK-NOT:                     InvokeStaticOrDirect
    123 
    124   private static int compareInts(int x, int y) {
    125     return Integer.compare(x, y);
    126   }
    127 
    128   /// CHECK-START: int Main.compareLongs(long, long) builder (after)
    129   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:LongCompare
    130   /// CHECK-DAG:                     Return [<<Result>>]
    131 
    132   /// CHECK-START: int Main.compareLongs(long, long) instruction_simplifier (after)
    133   /// CHECK-DAG:     <<Result:i\d+>> Compare
    134   /// CHECK-DAG:                     Return [<<Result>>]
    135 
    136   /// CHECK-START: int Main.compareLongs(long, long) instruction_simplifier (after)
    137   /// CHECK-NOT:                     InvokeStaticOrDirect
    138 
    139   private static int compareLongs(long x, long y) {
    140     return Long.compare(x, y);
    141   }
    142 
    143 
    144   /// CHECK-START: int Main.compareByteShort(byte, short) builder (after)
    145   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    146   /// CHECK-DAG:                     Return [<<Result>>]
    147 
    148   /// CHECK-START: int Main.compareByteShort(byte, short) instruction_simplifier (after)
    149   /// CHECK-DAG:     <<Result:i\d+>> Compare
    150   /// CHECK-DAG:                     Return [<<Result>>]
    151 
    152   /// CHECK-START: int Main.compareByteShort(byte, short) instruction_simplifier (after)
    153   /// CHECK-NOT:                     InvokeStaticOrDirect
    154 
    155   public static int compareByteShort(byte x, short y) {
    156     return Integer.compare(x, y);
    157   }
    158 
    159   /// CHECK-START: int Main.compareByteChar(byte, char) builder (after)
    160   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    161   /// CHECK-DAG:                     Return [<<Result>>]
    162 
    163   /// CHECK-START: int Main.compareByteChar(byte, char) instruction_simplifier (after)
    164   /// CHECK-DAG:     <<Result:i\d+>> Compare
    165   /// CHECK-DAG:                     Return [<<Result>>]
    166 
    167   /// CHECK-START: int Main.compareByteChar(byte, char) instruction_simplifier (after)
    168   /// CHECK-NOT:                     InvokeStaticOrDirect
    169 
    170   public static int compareByteChar(byte x, char y) {
    171     return Integer.compare(x, y);
    172   }
    173 
    174   /// CHECK-START: int Main.compareByteInt(byte, int) builder (after)
    175   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    176   /// CHECK-DAG:                     Return [<<Result>>]
    177 
    178   /// CHECK-START: int Main.compareByteInt(byte, int) instruction_simplifier (after)
    179   /// CHECK-DAG:     <<Result:i\d+>> Compare
    180   /// CHECK-DAG:                     Return [<<Result>>]
    181 
    182   /// CHECK-START: int Main.compareByteInt(byte, int) instruction_simplifier (after)
    183   /// CHECK-NOT:                     InvokeStaticOrDirect
    184 
    185   public static int compareByteInt(byte x, int y) {
    186     return Integer.compare(x, y);
    187   }
    188 
    189 
    190   /// CHECK-START: int Main.compareShortByte(short, byte) builder (after)
    191   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    192   /// CHECK-DAG:                     Return [<<Result>>]
    193 
    194   /// CHECK-START: int Main.compareShortByte(short, byte) instruction_simplifier (after)
    195   /// CHECK-DAG:     <<Result:i\d+>> Compare
    196   /// CHECK-DAG:                     Return [<<Result>>]
    197 
    198   /// CHECK-START: int Main.compareShortByte(short, byte) instruction_simplifier (after)
    199   /// CHECK-NOT:                     InvokeStaticOrDirect
    200 
    201   public static int compareShortByte(short x, byte y) {
    202     return Integer.compare(x, y);
    203   }
    204 
    205   /// CHECK-START: int Main.compareShortChar(short, char) builder (after)
    206   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    207   /// CHECK-DAG:                     Return [<<Result>>]
    208 
    209   /// CHECK-START: int Main.compareShortChar(short, char) instruction_simplifier (after)
    210   /// CHECK-DAG:     <<Result:i\d+>> Compare
    211   /// CHECK-DAG:                     Return [<<Result>>]
    212 
    213   /// CHECK-START: int Main.compareShortChar(short, char) instruction_simplifier (after)
    214   /// CHECK-NOT:                     InvokeStaticOrDirect
    215 
    216   public static int compareShortChar(short x, char y) {
    217     return Integer.compare(x, y);
    218   }
    219 
    220   /// CHECK-START: int Main.compareShortInt(short, int) builder (after)
    221   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    222   /// CHECK-DAG:                     Return [<<Result>>]
    223 
    224   /// CHECK-START: int Main.compareShortInt(short, int) instruction_simplifier (after)
    225   /// CHECK-DAG:     <<Result:i\d+>> Compare
    226   /// CHECK-DAG:                     Return [<<Result>>]
    227 
    228   /// CHECK-START: int Main.compareShortInt(short, int) instruction_simplifier (after)
    229   /// CHECK-NOT:                     InvokeStaticOrDirect
    230 
    231   public static int compareShortInt(short x, int y) {
    232     return Integer.compare(x, y);
    233   }
    234 
    235 
    236   /// CHECK-START: int Main.compareCharByte(char, byte) builder (after)
    237   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    238   /// CHECK-DAG:                     Return [<<Result>>]
    239 
    240   /// CHECK-START: int Main.compareCharByte(char, byte) instruction_simplifier (after)
    241   /// CHECK-DAG:     <<Result:i\d+>> Compare
    242   /// CHECK-DAG:                     Return [<<Result>>]
    243 
    244   /// CHECK-START: int Main.compareCharByte(char, byte) instruction_simplifier (after)
    245   /// CHECK-NOT:                     InvokeStaticOrDirect
    246 
    247   public static int compareCharByte(char x, byte y) {
    248     return Integer.compare(x, y);
    249   }
    250 
    251   /// CHECK-START: int Main.compareCharShort(char, short) builder (after)
    252   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    253   /// CHECK-DAG:                     Return [<<Result>>]
    254 
    255   /// CHECK-START: int Main.compareCharShort(char, short) instruction_simplifier (after)
    256   /// CHECK-DAG:     <<Result:i\d+>> Compare
    257   /// CHECK-DAG:                     Return [<<Result>>]
    258 
    259   /// CHECK-START: int Main.compareCharShort(char, short) instruction_simplifier (after)
    260   /// CHECK-NOT:                     InvokeStaticOrDirect
    261 
    262   public static int compareCharShort(char x, short y) {
    263     return Integer.compare(x, y);
    264   }
    265 
    266   /// CHECK-START: int Main.compareCharInt(char, int) builder (after)
    267   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    268   /// CHECK-DAG:                     Return [<<Result>>]
    269 
    270   /// CHECK-START: int Main.compareCharInt(char, int) instruction_simplifier (after)
    271   /// CHECK-DAG:     <<Result:i\d+>> Compare
    272   /// CHECK-DAG:                     Return [<<Result>>]
    273 
    274   /// CHECK-START: int Main.compareCharInt(char, int) instruction_simplifier (after)
    275   /// CHECK-NOT:                     InvokeStaticOrDirect
    276 
    277   public static int compareCharInt(char x, int y) {
    278     return Integer.compare(x, y);
    279   }
    280 
    281 
    282   /// CHECK-START: int Main.compareIntByte(int, byte) builder (after)
    283   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    284   /// CHECK-DAG:                     Return [<<Result>>]
    285 
    286   /// CHECK-START: int Main.compareIntByte(int, byte) instruction_simplifier (after)
    287   /// CHECK-DAG:     <<Result:i\d+>> Compare
    288   /// CHECK-DAG:                     Return [<<Result>>]
    289 
    290   /// CHECK-START: int Main.compareIntByte(int, byte) instruction_simplifier (after)
    291   /// CHECK-NOT:                     InvokeStaticOrDirect
    292 
    293   public static int compareIntByte(int x, byte y) {
    294     return Integer.compare(x, y);
    295   }
    296 
    297   /// CHECK-START: int Main.compareIntShort(int, short) builder (after)
    298   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    299   /// CHECK-DAG:                     Return [<<Result>>]
    300 
    301   /// CHECK-START: int Main.compareIntShort(int, short) instruction_simplifier (after)
    302   /// CHECK-DAG:     <<Result:i\d+>> Compare
    303   /// CHECK-DAG:                     Return [<<Result>>]
    304 
    305   /// CHECK-START: int Main.compareIntShort(int, short) instruction_simplifier (after)
    306   /// CHECK-NOT:                     InvokeStaticOrDirect
    307 
    308   public static int compareIntShort(int x, short y) {
    309     return Integer.compare(x, y);
    310   }
    311 
    312   /// CHECK-START: int Main.compareIntChar(int, char) builder (after)
    313   /// CHECK-DAG:     <<Result:i\d+>> InvokeStaticOrDirect intrinsic:IntegerCompare
    314   /// CHECK-DAG:                     Return [<<Result>>]
    315 
    316   /// CHECK-START: int Main.compareIntChar(int, char) instruction_simplifier (after)
    317   /// CHECK-DAG:     <<Result:i\d+>> Compare
    318   /// CHECK-DAG:                     Return [<<Result>>]
    319 
    320   /// CHECK-START: int Main.compareIntChar(int, char) instruction_simplifier (after)
    321   /// CHECK-NOT:                     InvokeStaticOrDirect
    322 
    323   public static int compareIntChar(int x, char y) {
    324     return Integer.compare(x, y);
    325   }
    326 
    327 
    328   public static void testCompareBooleans() throws Exception {
    329     expectEquals(-1, compareBooleans(false, true));
    330     expectEquals(-1, compareBooleansSmali(false, true));
    331 
    332     expectEquals(0, compareBooleans(false, false));
    333     expectEquals(0, compareBooleans(true, true));
    334     expectEquals(0, compareBooleansSmali(false, false));
    335     expectEquals(0, compareBooleansSmali(true, true));
    336 
    337     expectEquals(1, compareBooleans(true, false));
    338     expectEquals(1, compareBooleansSmali(true, false));
    339   }
    340 
    341   public static void testCompareBytes() {
    342     expectEquals(-1, compareBytes(Byte.MIN_VALUE, (byte)(Byte.MIN_VALUE + 1)));
    343     expectEquals(-1, compareBytes(Byte.MIN_VALUE, (byte)-1));
    344     expectEquals(-1, compareBytes(Byte.MIN_VALUE, (byte)0));
    345     expectEquals(-1, compareBytes(Byte.MIN_VALUE, (byte)1));
    346     expectEquals(-1, compareBytes(Byte.MIN_VALUE, Byte.MAX_VALUE));
    347     expectEquals(-1, compareBytes((byte)-1, (byte)0));
    348     expectEquals(-1, compareBytes((byte)-1, (byte)1));
    349     expectEquals(-1, compareBytes((byte)0, (byte)1));
    350 
    351     expectEquals(0, compareBytes(Byte.MIN_VALUE, Byte.MIN_VALUE));
    352     expectEquals(0, compareBytes((byte)-1, (byte)-1));
    353     expectEquals(0, compareBytes((byte)0, (byte)0));
    354     expectEquals(0, compareBytes((byte)1, (byte)1));
    355     expectEquals(0, compareBytes(Byte.MAX_VALUE, Byte.MAX_VALUE));
    356 
    357     expectEquals(1, compareBytes((byte)0, (byte)-1));
    358     expectEquals(1, compareBytes((byte)1, (byte)-1));
    359     expectEquals(1, compareBytes((byte)1, (byte)0));
    360     expectEquals(1, compareBytes(Byte.MAX_VALUE, Byte.MIN_VALUE));
    361     expectEquals(1, compareBytes(Byte.MAX_VALUE, (byte)-1));
    362     expectEquals(1, compareBytes(Byte.MAX_VALUE, (byte)0));
    363     expectEquals(1, compareBytes(Byte.MAX_VALUE, (byte)1));
    364     expectEquals(1, compareBytes(Byte.MAX_VALUE, (byte)(Byte.MAX_VALUE - 1)));
    365 
    366     for (byte i = -11; i <= 11; i++) {
    367       for (byte j = -11; j <= 11; j++) {
    368         int expected = 0;
    369         if (i < j) expected = -1;
    370         else if (i > j) expected = 1;
    371         expectEquals(expected, compareBytes(i, j));
    372       }
    373     }
    374   }
    375 
    376   public static void testCompareShorts() {
    377     expectEquals(-1, compareShorts(Short.MIN_VALUE, (short)(Short.MIN_VALUE + 1)));
    378     expectEquals(-1, compareShorts(Short.MIN_VALUE, (short)-1));
    379     expectEquals(-1, compareShorts(Short.MIN_VALUE, (short)0));
    380     expectEquals(-1, compareShorts(Short.MIN_VALUE, (short)1));
    381     expectEquals(-1, compareShorts(Short.MIN_VALUE, (short)Short.MAX_VALUE));
    382     expectEquals(-1, compareShorts((short)-1, (short)0));
    383     expectEquals(-1, compareShorts((short)-1, (short)1));
    384     expectEquals(-1, compareShorts((short)0, (short)1));
    385 
    386     expectEquals(0, compareShorts(Short.MIN_VALUE, Short.MIN_VALUE));
    387     expectEquals(0, compareShorts((short)-1, (short)-1));
    388     expectEquals(0, compareShorts((short)0, (short)0));
    389     expectEquals(0, compareShorts((short)1, (short)1));
    390     expectEquals(0, compareShorts(Short.MAX_VALUE, Short.MAX_VALUE));
    391 
    392     expectEquals(1, compareShorts((short)0, (short)-1));
    393     expectEquals(1, compareShorts((short)1, (short)-1));
    394     expectEquals(1, compareShorts((short)1, (short)0));
    395     expectEquals(1, compareShorts(Short.MAX_VALUE, Short.MIN_VALUE));
    396     expectEquals(1, compareShorts(Short.MAX_VALUE, (short)-1));
    397     expectEquals(1, compareShorts(Short.MAX_VALUE, (short)0));
    398     expectEquals(1, compareShorts(Short.MAX_VALUE, (short)1));
    399     expectEquals(1, compareShorts(Short.MAX_VALUE, (short)(Short.MAX_VALUE - 1)));
    400 
    401     for (short i = -11; i <= 11; i++) {
    402       for (short j = -11; j <= 11; j++) {
    403         int expected = 0;
    404         if (i < j) expected = -1;
    405         else if (i > j) expected = 1;
    406         expectEquals(expected, compareShorts(i, j));
    407       }
    408     }
    409   }
    410 
    411   public static void testCompareChars() {
    412     expectEquals(-1, compareChars((char)0, Character.MAX_VALUE));
    413     expectEquals(-1, compareChars((char)0, (char)1));
    414 
    415     expectEquals(0, compareChars((char)0, (char)0));
    416     expectEquals(0, compareChars((char)1, (char)1));
    417     expectEquals(0, compareChars(Character.MAX_VALUE, Character.MAX_VALUE));
    418 
    419     expectEquals(1, compareChars((char)1, (char)0));
    420     expectEquals(1, compareChars(Character.MAX_VALUE, (char)0));
    421     expectEquals(1, compareChars(Character.MAX_VALUE, (char)1));
    422     expectEquals(1, compareChars(Character.MAX_VALUE, (char)(Character.MAX_VALUE - 1)));
    423 
    424     for (char i = 0; i <= 11; i++) {
    425       for (char j = 0; j <= 11; j++) {
    426         int expected = 0;
    427         if (i < j) expected = -1;
    428         else if (i > j) expected = 1;
    429         expectEquals(expected, compareChars(i, j));
    430       }
    431     }
    432   }
    433 
    434   public static void testCompareInts() {
    435     expectEquals(-1, compareInts(Integer.MIN_VALUE, Integer.MIN_VALUE + 1));
    436     expectEquals(-1, compareInts(Integer.MIN_VALUE, -1));
    437     expectEquals(-1, compareInts(Integer.MIN_VALUE, 0));
    438     expectEquals(-1, compareInts(Integer.MIN_VALUE, 1));
    439     expectEquals(-1, compareInts(Integer.MIN_VALUE, Integer.MAX_VALUE));
    440     expectEquals(-1, compareInts(-1, 0));
    441     expectEquals(-1, compareInts(-1, 1));
    442     expectEquals(-1, compareInts(0, 1));
    443 
    444     expectEquals(0, compareInts(Integer.MIN_VALUE, Integer.MIN_VALUE));
    445     expectEquals(0, compareInts(-1, -1));
    446     expectEquals(0, compareInts(0, 0));
    447     expectEquals(0, compareInts(1, 1));
    448     expectEquals(0, compareInts(Integer.MAX_VALUE, Integer.MAX_VALUE));
    449 
    450     expectEquals(1, compareInts(0, -1));
    451     expectEquals(1, compareInts(1, -1));
    452     expectEquals(1, compareInts(1, 0));
    453     expectEquals(1, compareInts(Integer.MAX_VALUE, Integer.MIN_VALUE));
    454     expectEquals(1, compareInts(Integer.MAX_VALUE, -1));
    455     expectEquals(1, compareInts(Integer.MAX_VALUE, 0));
    456     expectEquals(1, compareInts(Integer.MAX_VALUE, 1));
    457     expectEquals(1, compareInts(Integer.MAX_VALUE, Integer.MAX_VALUE - 1));
    458 
    459     for (int i = -11; i <= 11; i++) {
    460       for (int j = -11; j <= 11; j++) {
    461         int expected = 0;
    462         if (i < j) expected = -1;
    463         else if (i > j) expected = 1;
    464         expectEquals(expected, compareInts(i, j));
    465       }
    466     }
    467   }
    468 
    469   public static void testCompareLongs() {
    470     expectEquals(-1, compareLongs(Long.MIN_VALUE, Long.MIN_VALUE + 1L));
    471     expectEquals(-1, compareLongs(Long.MIN_VALUE, -1L));
    472     expectEquals(-1, compareLongs(Long.MIN_VALUE, 0L));
    473     expectEquals(-1, compareLongs(Long.MIN_VALUE, 1L));
    474     expectEquals(-1, compareLongs(Long.MIN_VALUE, Long.MAX_VALUE));
    475     expectEquals(-1, compareLongs(-1L, 0L));
    476     expectEquals(-1, compareLongs(-1L, 1L));
    477     expectEquals(-1, compareLongs(0L, 1L));
    478 
    479     expectEquals(0, compareLongs(Long.MIN_VALUE, Long.MIN_VALUE));
    480     expectEquals(0, compareLongs(-1L, -1L));
    481     expectEquals(0, compareLongs(0L, 0L));
    482     expectEquals(0, compareLongs(1L, 1L));
    483     expectEquals(0, compareLongs(Long.MAX_VALUE, Long.MAX_VALUE));
    484 
    485     expectEquals(1, compareLongs(0L, -1L));
    486     expectEquals(1, compareLongs(1L, -1L));
    487     expectEquals(1, compareLongs(1L, 0L));
    488     expectEquals(1, compareLongs(Long.MAX_VALUE, Long.MIN_VALUE));
    489     expectEquals(1, compareLongs(Long.MAX_VALUE, -1L));
    490     expectEquals(1, compareLongs(Long.MAX_VALUE, 0L));
    491     expectEquals(1, compareLongs(Long.MAX_VALUE, 1L));
    492     expectEquals(1, compareLongs(Long.MAX_VALUE, Long.MAX_VALUE - 1L));
    493 
    494     expectEquals(-1, compareLongs(0x111111117FFFFFFFL, 0x11111111FFFFFFFFL));
    495     expectEquals(0, compareLongs(0x111111117FFFFFFFL, 0x111111117FFFFFFFL));
    496     expectEquals(1, compareLongs(0x11111111FFFFFFFFL, 0x111111117FFFFFFFL));
    497 
    498     for (long i = -11L; i <= 11L; i++) {
    499       for (long j = -11L; j <= 11L; j++) {
    500         int expected = 0;
    501         if (i < j) expected = -1;
    502         else if (i > j) expected = 1;
    503         expectEquals(expected, compareLongs(i, j));
    504       }
    505     }
    506 
    507     for (long i = Long.MIN_VALUE; i <= Long.MIN_VALUE + 11L; i++) {
    508       expectEquals(-1, compareLongs(i, 0));
    509     }
    510 
    511     for (long i = Long.MAX_VALUE; i >= Long.MAX_VALUE - 11L; i--) {
    512       expectEquals(1, compareLongs(i, 0));
    513     }
    514   }
    515 
    516 
    517   public static void testCompareByteShort() {
    518     expectEquals(-1, compareByteShort(Byte.MIN_VALUE, (short)-1));
    519     expectEquals(-1, compareByteShort(Byte.MIN_VALUE, (short)0));
    520     expectEquals(-1, compareByteShort(Byte.MIN_VALUE, (short)1));
    521     expectEquals(-1, compareByteShort(Byte.MIN_VALUE, Short.MAX_VALUE));
    522     expectEquals(-1, compareByteShort((byte)-1, (short)0));
    523     expectEquals(-1, compareByteShort((byte)-1, (short)1));
    524     expectEquals(-1, compareByteShort((byte)0, (short)1));
    525     expectEquals(-1, compareByteShort(Byte.MAX_VALUE, (short)(Short.MAX_VALUE - 1)));
    526     expectEquals(-1, compareByteShort(Byte.MAX_VALUE, Short.MAX_VALUE));
    527 
    528     expectEquals(0, compareByteShort((byte)-1, (short)-1));
    529     expectEquals(0, compareByteShort((byte)0, (short)0));
    530     expectEquals(0, compareByteShort((byte)1, (short)1));
    531 
    532     expectEquals(1, compareByteShort(Byte.MIN_VALUE, Short.MIN_VALUE));
    533     expectEquals(1, compareByteShort(Byte.MIN_VALUE, (short)(Short.MIN_VALUE + 1)));
    534     expectEquals(1, compareByteShort((byte)0, (short)-1));
    535     expectEquals(1, compareByteShort((byte)1, (short)-1));
    536     expectEquals(1, compareByteShort((byte)1, (short)0));
    537     expectEquals(1, compareByteShort(Byte.MAX_VALUE, Short.MIN_VALUE));
    538     expectEquals(1, compareByteShort(Byte.MAX_VALUE, (short)-1));
    539     expectEquals(1, compareByteShort(Byte.MAX_VALUE, (short)0));
    540     expectEquals(1, compareByteShort(Byte.MAX_VALUE, (short)1));
    541 
    542     for (byte i = -11; i <= 11; i++) {
    543       for (short j = -11; j <= 11; j++) {
    544         int expected = 0;
    545         if (i < j) expected = -1;
    546         else if (i > j) expected = 1;
    547         expectEquals(expected, compareByteShort(i, j));
    548       }
    549     }
    550   }
    551 
    552   public static void testCompareByteChar() {
    553     expectEquals(-1, compareByteChar(Byte.MIN_VALUE, (char)0));
    554     expectEquals(-1, compareByteChar(Byte.MIN_VALUE, (char)1));
    555     expectEquals(-1, compareByteChar(Byte.MIN_VALUE, Character.MAX_VALUE));
    556     expectEquals(-1, compareByteChar((byte)-1, (char)0));
    557     expectEquals(-1, compareByteChar((byte)-1, (char)1));
    558     expectEquals(-1, compareByteChar((byte)0, (char)1));
    559     expectEquals(-1, compareByteChar(Byte.MAX_VALUE, (char)(Character.MAX_VALUE - 1)));
    560     expectEquals(-1, compareByteChar(Byte.MAX_VALUE, Character.MAX_VALUE));
    561 
    562     expectEquals(0, compareByteChar((byte)0, (char)0));
    563     expectEquals(0, compareByteChar((byte)1, (char)1));
    564 
    565     expectEquals(1, compareByteChar((byte)1, (char)0));
    566     expectEquals(1, compareByteChar(Byte.MAX_VALUE, (char)0));
    567     expectEquals(1, compareByteChar(Byte.MAX_VALUE, (char)1));
    568 
    569     for (byte i = -11; i <= 11; i++) {
    570       for (char j = 0; j <= 11; j++) {
    571         int expected = 0;
    572         if (i < j) expected = -1;
    573         else if (i > j) expected = 1;
    574         expectEquals(expected, compareByteChar(i, j));
    575       }
    576     }
    577   }
    578 
    579   public static void testCompareByteInt() {
    580     expectEquals(-1, compareByteInt(Byte.MIN_VALUE, -1));
    581     expectEquals(-1, compareByteInt(Byte.MIN_VALUE, 0));
    582     expectEquals(-1, compareByteInt(Byte.MIN_VALUE, 1));
    583     expectEquals(-1, compareByteInt(Byte.MIN_VALUE, Integer.MAX_VALUE));
    584     expectEquals(-1, compareByteInt((byte)-1, 0));
    585     expectEquals(-1, compareByteInt((byte)-1, 1));
    586     expectEquals(-1, compareByteInt((byte)0, 1));
    587     expectEquals(-1, compareByteInt(Byte.MAX_VALUE, Integer.MAX_VALUE - 1));
    588     expectEquals(-1, compareByteInt(Byte.MAX_VALUE, Integer.MAX_VALUE));
    589 
    590     expectEquals(0, compareByteInt((byte)-1, -1));
    591     expectEquals(0, compareByteInt((byte)0, 0));
    592     expectEquals(0, compareByteInt((byte)1, 1));
    593 
    594     expectEquals(1, compareByteInt(Byte.MIN_VALUE, Integer.MIN_VALUE));
    595     expectEquals(1, compareByteInt(Byte.MIN_VALUE, Integer.MIN_VALUE + 1));
    596     expectEquals(1, compareByteInt((byte)0, -1));
    597     expectEquals(1, compareByteInt((byte)1, -1));
    598     expectEquals(1, compareByteInt((byte)1, 0));
    599     expectEquals(1, compareByteInt(Byte.MAX_VALUE, Integer.MIN_VALUE));
    600     expectEquals(1, compareByteInt(Byte.MAX_VALUE, -1));
    601     expectEquals(1, compareByteInt(Byte.MAX_VALUE, 0));
    602     expectEquals(1, compareByteInt(Byte.MAX_VALUE, 1));
    603 
    604     for (byte i = -11; i <= 11; i++) {
    605       for (int j = -11; j <= 11; j++) {
    606         int expected = 0;
    607         if (i < j) expected = -1;
    608         else if (i > j) expected = 1;
    609         expectEquals(expected, compareByteInt(i, j));
    610       }
    611     }
    612   }
    613 
    614 
    615   public static void testCompareShortByte() {
    616     expectEquals(-1, compareShortByte(Short.MIN_VALUE, Byte.MIN_VALUE));
    617     expectEquals(-1, compareShortByte(Short.MIN_VALUE, (byte)(Byte.MIN_VALUE + 1)));
    618     expectEquals(-1, compareShortByte(Short.MIN_VALUE, (byte)-1));
    619     expectEquals(-1, compareShortByte(Short.MIN_VALUE, (byte)0));
    620     expectEquals(-1, compareShortByte(Short.MIN_VALUE, (byte)1));
    621     expectEquals(-1, compareShortByte(Short.MIN_VALUE, Byte.MAX_VALUE));
    622     expectEquals(-1, compareShortByte((short)-1, (byte)0));
    623     expectEquals(-1, compareShortByte((short)-1, (byte)1));
    624     expectEquals(-1, compareShortByte((short)0, (byte)1));
    625 
    626     expectEquals(0, compareShortByte((short)-1, (byte)-1));
    627     expectEquals(0, compareShortByte((short)0, (byte)0));
    628     expectEquals(0, compareShortByte((short)1, (byte)1));
    629 
    630     expectEquals(1, compareShortByte((short)0, (byte)-1));
    631     expectEquals(1, compareShortByte((short)1, (byte)-1));
    632     expectEquals(1, compareShortByte((short)1, (byte)0));
    633     expectEquals(1, compareShortByte(Short.MAX_VALUE, Byte.MIN_VALUE));
    634     expectEquals(1, compareShortByte(Short.MAX_VALUE, (byte)-1));
    635     expectEquals(1, compareShortByte(Short.MAX_VALUE, (byte)0));
    636     expectEquals(1, compareShortByte(Short.MAX_VALUE, (byte)1));
    637     expectEquals(1, compareShortByte(Short.MAX_VALUE, (byte)(Byte.MAX_VALUE - 1)));
    638     expectEquals(1, compareShortByte(Short.MAX_VALUE, Byte.MAX_VALUE));
    639 
    640     for (short i = -11; i <= 11; i++) {
    641       for (byte j = -11; j <= 11; j++) {
    642         int expected = 0;
    643         if (i < j) expected = -1;
    644         else if (i > j) expected = 1;
    645         expectEquals(expected, compareShortByte(i, j));
    646       }
    647     }
    648   }
    649 
    650   public static void testCompareShortChar() {
    651     expectEquals(-1, compareShortChar(Short.MIN_VALUE, (char)0));
    652     expectEquals(-1, compareShortChar(Short.MIN_VALUE, (char)1));
    653     expectEquals(-1, compareShortChar(Short.MIN_VALUE, Character.MAX_VALUE));
    654     expectEquals(-1, compareShortChar((short)-1, (char)0));
    655     expectEquals(-1, compareShortChar((short)-1, (char)1));
    656     expectEquals(-1, compareShortChar((short)0, (char)1));
    657     expectEquals(-1, compareShortChar(Short.MAX_VALUE, (char)(Character.MAX_VALUE - 1)));
    658     expectEquals(-1, compareShortChar(Short.MAX_VALUE, Character.MAX_VALUE));
    659 
    660     expectEquals(0, compareShortChar((short)0, (char)0));
    661     expectEquals(0, compareShortChar((short)1, (char)1));
    662 
    663     expectEquals(1, compareShortChar((short)1, (char)0));
    664     expectEquals(1, compareShortChar(Short.MAX_VALUE, (char)0));
    665     expectEquals(1, compareShortChar(Short.MAX_VALUE, (char)1));
    666 
    667     for (short i = -11; i <= 11; i++) {
    668       for (char j = 0; j <= 11; j++) {
    669         int expected = 0;
    670         if (i < j) expected = -1;
    671         else if (i > j) expected = 1;
    672         expectEquals(expected, compareShortChar(i, j));
    673       }
    674     }
    675   }
    676 
    677   public static void testCompareShortInt() {
    678     expectEquals(-1, compareShortInt(Short.MIN_VALUE, -1));
    679     expectEquals(-1, compareShortInt(Short.MIN_VALUE, 0));
    680     expectEquals(-1, compareShortInt(Short.MIN_VALUE, 1));
    681     expectEquals(-1, compareShortInt(Short.MIN_VALUE, Integer.MAX_VALUE));
    682     expectEquals(-1, compareShortInt((short)-1, 0));
    683     expectEquals(-1, compareShortInt((short)-1, 1));
    684     expectEquals(-1, compareShortInt((short)0, 1));
    685     expectEquals(-1, compareShortInt(Short.MAX_VALUE, Integer.MAX_VALUE - 1));
    686     expectEquals(-1, compareShortInt(Short.MAX_VALUE, Integer.MAX_VALUE));
    687 
    688     expectEquals(0, compareShortInt((short)-1, -1));
    689     expectEquals(0, compareShortInt((short)0, 0));
    690     expectEquals(0, compareShortInt((short)1, 1));
    691 
    692     expectEquals(1, compareShortInt(Short.MIN_VALUE, Integer.MIN_VALUE));
    693     expectEquals(1, compareShortInt(Short.MIN_VALUE, Integer.MIN_VALUE + 1));
    694     expectEquals(1, compareShortInt((short)0, -1));
    695     expectEquals(1, compareShortInt((short)1, -1));
    696     expectEquals(1, compareShortInt((short)1, 0));
    697     expectEquals(1, compareShortInt(Short.MAX_VALUE, Integer.MIN_VALUE));
    698     expectEquals(1, compareShortInt(Short.MAX_VALUE, -1));
    699     expectEquals(1, compareShortInt(Short.MAX_VALUE, 0));
    700     expectEquals(1, compareShortInt(Short.MAX_VALUE, 1));
    701 
    702     for (short i = -11; i <= 11; i++) {
    703       for (int j = -11; j <= 11; j++) {
    704         int expected = 0;
    705         if (i < j) expected = -1;
    706         else if (i > j) expected = 1;
    707         expectEquals(expected, compareShortInt(i, j));
    708       }
    709     }
    710   }
    711 
    712 
    713   public static void testCompareCharByte() {
    714     expectEquals(-1, compareCharByte((char)0, (byte)1));
    715     expectEquals(-1, compareCharByte((char)0, Byte.MAX_VALUE));
    716 
    717     expectEquals(0, compareCharByte((char)0, (byte)0));
    718     expectEquals(0, compareCharByte((char)1, (byte)1));
    719 
    720     expectEquals(1, compareCharByte((char)0, Byte.MIN_VALUE));
    721     expectEquals(1, compareCharByte((char)0, (byte)(Byte.MIN_VALUE + 1)));
    722     expectEquals(1, compareCharByte((char)0, (byte)-1));
    723     expectEquals(1, compareCharByte((char)1, (byte)-1));
    724     expectEquals(1, compareCharByte((char)1, (byte)0));
    725     expectEquals(1, compareCharByte(Character.MAX_VALUE, Byte.MIN_VALUE));
    726     expectEquals(1, compareCharByte(Character.MAX_VALUE, (byte)-1));
    727     expectEquals(1, compareCharByte(Character.MAX_VALUE, (byte)0));
    728     expectEquals(1, compareCharByte(Character.MAX_VALUE, (byte)1));
    729     expectEquals(1, compareCharByte(Character.MAX_VALUE, (byte)(Byte.MAX_VALUE - 1)));
    730     expectEquals(1, compareCharByte(Character.MAX_VALUE, Byte.MAX_VALUE));
    731 
    732     for (char i = 0; i <= 11; i++) {
    733       for (byte j = -11; j <= 11; j++) {
    734         int expected = 0;
    735         if (i < j) expected = -1;
    736         else if (i > j) expected = 1;
    737         expectEquals(expected, compareCharByte(i, j));
    738       }
    739     }
    740   }
    741 
    742   public static void testCompareCharShort() {
    743     expectEquals(-1, compareCharShort((char)0, (short)1));
    744     expectEquals(-1, compareCharShort((char)0, Short.MAX_VALUE));
    745 
    746     expectEquals(0, compareCharShort((char)0, (short)0));
    747     expectEquals(0, compareCharShort((char)1, (short)1));
    748 
    749     expectEquals(1, compareCharShort((char)0, Short.MIN_VALUE));
    750     expectEquals(1, compareCharShort((char)0, (short)(Short.MIN_VALUE + 1)));
    751     expectEquals(1, compareCharShort((char)0, (short)-1));
    752     expectEquals(1, compareCharShort((char)1, (short)-1));
    753     expectEquals(1, compareCharShort((char)1, (short)0));
    754     expectEquals(1, compareCharShort(Character.MAX_VALUE, Short.MIN_VALUE));
    755     expectEquals(1, compareCharShort(Character.MAX_VALUE, (short)-1));
    756     expectEquals(1, compareCharShort(Character.MAX_VALUE, (short)0));
    757     expectEquals(1, compareCharShort(Character.MAX_VALUE, (short)1));
    758     expectEquals(1, compareCharShort(Character.MAX_VALUE, (short)(Short.MAX_VALUE - 1)));
    759     expectEquals(1, compareCharShort(Character.MAX_VALUE, Short.MAX_VALUE));
    760 
    761     for (char i = 0; i <= 11; i++) {
    762       for (short j = -11; j <= 11; j++) {
    763         int expected = 0;
    764         if (i < j) expected = -1;
    765         else if (i > j) expected = 1;
    766         expectEquals(expected, compareCharShort(i, j));
    767       }
    768     }
    769   }
    770 
    771   public static void testCompareCharInt() {
    772     expectEquals(-1, compareCharInt((char)0, 1));
    773     expectEquals(-1, compareCharInt((char)0, Integer.MAX_VALUE));
    774     expectEquals(-1, compareCharInt(Character.MAX_VALUE, Integer.MAX_VALUE - 1));
    775     expectEquals(-1, compareCharInt(Character.MAX_VALUE, Integer.MAX_VALUE));
    776 
    777     expectEquals(0, compareCharInt((char)0, 0));
    778     expectEquals(0, compareCharInt((char)1, 1));
    779 
    780     expectEquals(1, compareCharInt((char)0, Integer.MIN_VALUE));
    781     expectEquals(1, compareCharInt((char)0, Integer.MIN_VALUE + 1));
    782     expectEquals(1, compareCharInt((char)0, -1));
    783     expectEquals(1, compareCharInt((char)1, -1));
    784     expectEquals(1, compareCharInt((char)1, 0));
    785     expectEquals(1, compareCharInt(Character.MAX_VALUE, Integer.MIN_VALUE));
    786     expectEquals(1, compareCharInt(Character.MAX_VALUE, -1));
    787     expectEquals(1, compareCharInt(Character.MAX_VALUE, 0));
    788     expectEquals(1, compareCharInt(Character.MAX_VALUE, 1));
    789 
    790     for (char i = 0; i <= 11; i++) {
    791       for (int j = -11; j <= 11; j++) {
    792         int expected = 0;
    793         if (i < j) expected = -1;
    794         else if (i > j) expected = 1;
    795         expectEquals(expected, compareCharInt(i, j));
    796       }
    797     }
    798   }
    799 
    800 
    801   public static void testCompareIntByte() {
    802     expectEquals(-1, compareIntByte(Integer.MIN_VALUE, Byte.MIN_VALUE));
    803     expectEquals(-1, compareIntByte(Integer.MIN_VALUE, (byte)(Byte.MIN_VALUE + 1)));
    804     expectEquals(-1, compareIntByte(Integer.MIN_VALUE, (byte)-1));
    805     expectEquals(-1, compareIntByte(Integer.MIN_VALUE, (byte)0));
    806     expectEquals(-1, compareIntByte(Integer.MIN_VALUE, (byte)1));
    807     expectEquals(-1, compareIntByte(Integer.MIN_VALUE, Byte.MAX_VALUE));
    808     expectEquals(-1, compareIntByte(-1, (byte)0));
    809     expectEquals(-1, compareIntByte(-1, (byte)1));
    810     expectEquals(-1, compareIntByte(0, (byte)1));
    811 
    812     expectEquals(0, compareIntByte(-1, (byte)-1));
    813     expectEquals(0, compareIntByte(0, (byte)0));
    814     expectEquals(0, compareIntByte(1, (byte)1));
    815 
    816     expectEquals(1, compareIntByte(0, (byte)-1));
    817     expectEquals(1, compareIntByte(1, (byte)-1));
    818     expectEquals(1, compareIntByte(1, (byte)0));
    819     expectEquals(1, compareIntByte(Integer.MAX_VALUE, Byte.MIN_VALUE));
    820     expectEquals(1, compareIntByte(Integer.MAX_VALUE, (byte)-1));
    821     expectEquals(1, compareIntByte(Integer.MAX_VALUE, (byte)0));
    822     expectEquals(1, compareIntByte(Integer.MAX_VALUE, (byte)1));
    823     expectEquals(1, compareIntByte(Integer.MAX_VALUE, (byte)(Byte.MAX_VALUE - 1)));
    824     expectEquals(1, compareIntByte(Integer.MAX_VALUE, Byte.MAX_VALUE));
    825 
    826     for (int i = -11; i <= 11; i++) {
    827       for (byte j = -11; j <= 11; j++) {
    828         int expected = 0;
    829         if (i < j) expected = -1;
    830         else if (i > j) expected = 1;
    831         expectEquals(expected, compareIntByte(i, j));
    832       }
    833     }
    834   }
    835 
    836   public static void testCompareIntShort() {
    837     expectEquals(-1, compareIntShort(Integer.MIN_VALUE, Short.MIN_VALUE));
    838     expectEquals(-1, compareIntShort(Integer.MIN_VALUE, (short)(Short.MIN_VALUE + 1)));
    839     expectEquals(-1, compareIntShort(Integer.MIN_VALUE, (short)-1));
    840     expectEquals(-1, compareIntShort(Integer.MIN_VALUE, (short)0));
    841     expectEquals(-1, compareIntShort(Integer.MIN_VALUE, (short)1));
    842     expectEquals(-1, compareIntShort(Integer.MIN_VALUE, Short.MAX_VALUE));
    843     expectEquals(-1, compareIntShort(-1, (short)0));
    844     expectEquals(-1, compareIntShort(-1, (short)1));
    845     expectEquals(-1, compareIntShort(0, (short)1));
    846 
    847     expectEquals(0, compareIntShort(-1, (short)-1));
    848     expectEquals(0, compareIntShort(0, (short)0));
    849     expectEquals(0, compareIntShort(1, (short)1));
    850 
    851     expectEquals(1, compareIntShort(0, (short)-1));
    852     expectEquals(1, compareIntShort(1, (short)-1));
    853     expectEquals(1, compareIntShort(1, (short)0));
    854     expectEquals(1, compareIntShort(Integer.MAX_VALUE, Short.MIN_VALUE));
    855     expectEquals(1, compareIntShort(Integer.MAX_VALUE, (short)-1));
    856     expectEquals(1, compareIntShort(Integer.MAX_VALUE, (short)0));
    857     expectEquals(1, compareIntShort(Integer.MAX_VALUE, (short)1));
    858     expectEquals(1, compareIntShort(Integer.MAX_VALUE, (short)(Short.MAX_VALUE - 1)));
    859     expectEquals(1, compareIntShort(Integer.MAX_VALUE, Short.MAX_VALUE));
    860 
    861     for (int i = -11; i <= 11; i++) {
    862       for (short j = -11; j <= 11; j++) {
    863         int expected = 0;
    864         if (i < j) expected = -1;
    865         else if (i > j) expected = 1;
    866         expectEquals(expected, compareIntShort(i, j));
    867       }
    868     }
    869   }
    870 
    871   public static void testCompareIntChar() {
    872     expectEquals(-1, compareIntChar(Integer.MIN_VALUE, (char)0));
    873     expectEquals(-1, compareIntChar(Integer.MIN_VALUE, (char)1));
    874     expectEquals(-1, compareIntChar(Integer.MIN_VALUE, Character.MAX_VALUE));
    875     expectEquals(-1, compareIntChar(-1, (char)0));
    876     expectEquals(-1, compareIntChar(-1, (char)1));
    877     expectEquals(-1, compareIntChar(0, (char)1));
    878 
    879     expectEquals(0, compareIntChar(0, (char)0));
    880     expectEquals(0, compareIntChar(1, (char)1));
    881 
    882     expectEquals(1, compareIntChar(1, (char)0));
    883     expectEquals(1, compareIntChar(Integer.MAX_VALUE, (char)0));
    884     expectEquals(1, compareIntChar(Integer.MAX_VALUE, (char)1));
    885     expectEquals(1, compareIntChar(Integer.MAX_VALUE, (char)(Character.MAX_VALUE - 1)));
    886     expectEquals(1, compareIntChar(Integer.MAX_VALUE, Character.MAX_VALUE));
    887 
    888     for (int i = -11; i <= 11; i++) {
    889       for (char j = 0; j <= 11; j++) {
    890         int expected = 0;
    891         if (i < j) expected = -1;
    892         else if (i > j) expected = 1;
    893         expectEquals(expected, compareIntChar(i, j));
    894       }
    895     }
    896   }
    897 
    898 
    899   public static void main(String args[]) throws Exception {
    900     $opt$noinline$testReplaceInputWithItself(42);
    901 
    902     testCompareBooleans();
    903     testCompareBytes();
    904     testCompareShorts();
    905     testCompareChars();
    906     testCompareInts();
    907     testCompareLongs();
    908 
    909     testCompareByteShort();
    910     testCompareByteChar();
    911     testCompareByteInt();
    912 
    913     testCompareShortByte();
    914     testCompareShortChar();
    915     testCompareShortInt();
    916 
    917     testCompareCharByte();
    918     testCompareCharShort();
    919     testCompareCharInt();
    920 
    921     testCompareIntByte();
    922     testCompareIntShort();
    923     testCompareIntChar();
    924 
    925     System.out.println("passed");
    926   }
    927 
    928   private static void expectEquals(int expected, int result) {
    929     if (expected != result) {
    930       throw new Error("Expected: " + expected + ", found: " + result);
    931     }
    932   }
    933 }
    934