Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2014 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     static int imax = Integer.MAX_VALUE;
     20     static int imin = Integer.MIN_VALUE;
     21     static long lmax = Long.MAX_VALUE;
     22     static long lmin = Long.MIN_VALUE;
     23     static CA ca;
     24 
     25     public static void expectEquals(long expected, long result) {
     26         if (expected != result) {
     27             throw new Error("Expected: " + expected + ", found: " + result);
     28         }
     29     }
     30 
     31     public static void expectEquals(int expected, int result) {
     32         if (expected != result) {
     33             throw new Error("Expected: " + expected + ", found: " + result);
     34         }
     35     }
     36 
     37     public static void test_int() {
     38         int result = 0;
     39         int a = imax;
     40         int b = imin;
     41         int c = 10;
     42         int d = c;
     43         int tmp = 0;
     44         int [] ia = new int[5];
     45         for (int i = 0; i < 100; i++) {
     46             tmp = i*c;
     47             result += i*i;
     48             result = i - tmp;
     49         }
     50         expectEquals(result, -891);
     51 
     52         result = c*c + (result - c);
     53         expectEquals(result, -801);
     54 
     55         result = a + a*a;
     56         expectEquals(result, -2147483648);
     57 
     58         result = b + b*b;
     59         expectEquals(result, -2147483648);
     60 
     61         result = b - a*a;
     62         expectEquals(result, 2147483647);
     63 
     64         result = d*d;
     65         d++;
     66         result += result;
     67         expectEquals(result, 200);
     68 
     69         result = c*c;
     70         tmp++;
     71         result += result;
     72         expectEquals(result, 200);
     73 
     74         result = 0;
     75         try {
     76             result = c*c;
     77             ia[c] = d;  // array out of bound.
     78             result += d;
     79         } catch (Exception e) {
     80         }
     81         expectEquals(result, 100);
     82 
     83         CA obj = new CA();
     84         result = a*c + obj.ia;
     85         expectEquals(result, 2);
     86 
     87         result = 0;
     88         obj = ca;
     89         try {
     90             result = a*c;
     91             tmp = obj.ia;
     92             result = result + tmp;
     93         } catch (Exception e) {
     94         }
     95         expectEquals(result, -10);
     96     }
     97 
     98     public static void test_long() {
     99         long result = 0;
    100         long a = lmax;
    101         long b = lmin;
    102         long c = 10;
    103         long d = c;
    104         long tmp = 0;
    105         int [] ia = new int[5];
    106         for (long i = 0; i < 100; i++) {
    107             tmp = i*c;
    108             result += i*i;
    109             result = i - tmp;
    110         }
    111         expectEquals(result, -891L);
    112 
    113         result = c*c + (result - c);
    114         expectEquals(result, -801L);
    115 
    116         result = a + a*a;
    117         expectEquals(result, -9223372036854775808L);
    118 
    119         result = b + b*b;
    120         expectEquals(result, -9223372036854775808L);
    121 
    122         result = b - a*a;
    123         expectEquals(result, 9223372036854775807L);
    124 
    125         result = d*d;
    126         d++;
    127         result += result;
    128         expectEquals(result, 200L);
    129 
    130         result = c*c;
    131         tmp++;
    132         result += result;
    133         expectEquals(result, 200L);
    134 
    135         result = 0;
    136         int index = 10;
    137         try {
    138             result = c*c;
    139             ia[index] = 10;  // array out of bound.
    140             result += d;
    141         } catch (Exception e) {
    142         }
    143         expectEquals(result, 100L);
    144 
    145         CA obj = new CA();
    146         result = a*c + obj.la;
    147         expectEquals(result, 113L);
    148 
    149         result = 0;
    150         obj = ca;
    151         try {
    152             result = a*c;
    153             tmp = obj.la;
    154             result = result + tmp;
    155         } catch (Exception e) {
    156         }
    157         expectEquals(result, -10L);
    158     }
    159 
    160     public static void main(String[] args) {
    161         test_int();
    162         test_long();
    163         System.out.println("Done!");
    164     }
    165 
    166 }
    167 
    168 class CA {
    169     public int ia = 12;
    170     public long la = 123L;
    171 }
    172