Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2015 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 public class Main {
     18 
     19   public static void assertBoolEquals(boolean expected, boolean result) {
     20     if (expected != result) {
     21       throw new Error("Expected: " + expected + ", found: " + result);
     22     }
     23   }
     24 
     25   /*
     26    * Test that integer Phis are accepted as Boolean inputs until
     27    * we implement a suitable type analysis.
     28    */
     29 
     30   /// CHECK-START: boolean Main.TestPhiAsBoolean(int) select_generator (after)
     31   /// CHECK-DAG:     <<Phi:i\d+>>     Phi
     32   /// CHECK-DAG:                      Select [{{i\d+}},{{i\d+}},<<Phi>>]
     33 
     34   public static boolean f1;
     35   public static boolean f2;
     36 
     37   public static boolean InlinePhi(int x) {
     38     return (x == 42) ? f1 : f2;
     39   }
     40 
     41   public static boolean TestPhiAsBoolean(int x) {
     42     return InlinePhi(x) != true ? true : false;
     43   }
     44 
     45   /*
     46    * Test that integer And is accepted as a Boolean input until
     47    * we implement a suitable type analysis.
     48    */
     49 
     50   /// CHECK-START: boolean Main.TestAndAsBoolean(boolean, boolean) select_generator (after)
     51   /// CHECK-DAG:     <<And:i\d+>>     And
     52   /// CHECK-DAG:                      Select [{{i\d+}},{{i\d+}},<<And>>]
     53 
     54   public static boolean InlineAnd(boolean x, boolean y) {
     55     return x & y;
     56   }
     57 
     58   public static boolean TestAndAsBoolean(boolean x, boolean y) {
     59     return InlineAnd(x, y) != true ? true : false;
     60   }
     61 
     62   /*
     63    * Test that integer Or is accepted as a Boolean input until
     64    * we implement a suitable type analysis.
     65    */
     66 
     67   /// CHECK-START: boolean Main.TestOrAsBoolean(boolean, boolean) select_generator (after)
     68   /// CHECK-DAG:     <<Or:i\d+>>      Or
     69   /// CHECK-DAG:                      Select [{{i\d+}},{{i\d+}},<<Or>>]
     70 
     71   public static boolean InlineOr(boolean x, boolean y) {
     72     return x | y;
     73   }
     74 
     75   public static boolean TestOrAsBoolean(boolean x, boolean y) {
     76     return InlineOr(x, y) != true ? true : false;
     77   }
     78 
     79   /*
     80    * Test that integer Xor is accepted as a Boolean input until
     81    * we implement a suitable type analysis.
     82    */
     83 
     84   /// CHECK-START: boolean Main.TestXorAsBoolean(boolean, boolean) select_generator (after)
     85   /// CHECK-DAG:     <<Xor:i\d+>>     Xor
     86   /// CHECK-DAG:                      Select [{{i\d+}},{{i\d+}},<<Xor>>]
     87 
     88   public static boolean InlineXor(boolean x, boolean y) {
     89     return x ^ y;
     90   }
     91 
     92   public static boolean TestXorAsBoolean(boolean x, boolean y) {
     93     return InlineXor(x, y) != true ? true : false;
     94   }
     95 
     96   public static void main(String[] args) {
     97     f1 = true;
     98     f2 = false;
     99     assertBoolEquals(true, TestPhiAsBoolean(0));
    100     assertBoolEquals(false, TestPhiAsBoolean(42));
    101     assertBoolEquals(true, TestAndAsBoolean(true, false));
    102     assertBoolEquals(false, TestAndAsBoolean(true, true));
    103     assertBoolEquals(true, TestOrAsBoolean(false, false));
    104     assertBoolEquals(false, TestOrAsBoolean(true, true));
    105     assertBoolEquals(true, TestXorAsBoolean(true, true));
    106     assertBoolEquals(false, TestXorAsBoolean(true, false));
    107   }
    108 }
    109