1a262f7707330dccfb50af6345813083182b61043Ningsheng Jian/*
2a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * Copyright (C) 2014 The Android Open Source Project
3a262f7707330dccfb50af6345813083182b61043Ningsheng Jian *
4a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * Licensed under the Apache License, Version 2.0 (the "License");
5a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * you may not use this file except in compliance with the License.
6a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * You may obtain a copy of the License at
7a262f7707330dccfb50af6345813083182b61043Ningsheng Jian *
8a262f7707330dccfb50af6345813083182b61043Ningsheng Jian *      http://www.apache.org/licenses/LICENSE-2.0
9a262f7707330dccfb50af6345813083182b61043Ningsheng Jian *
10a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * Unless required by applicable law or agreed to in writing, software
11a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * distributed under the License is distributed on an "AS IS" BASIS,
12a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * See the License for the specific language governing permissions and
14a262f7707330dccfb50af6345813083182b61043Ningsheng Jian * limitations under the License.
15a262f7707330dccfb50af6345813083182b61043Ningsheng Jian */
16a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
17a262f7707330dccfb50af6345813083182b61043Ningsheng Jianpublic class Main {
18a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
19a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    static int imax = Integer.MAX_VALUE;
20a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    static int imin = Integer.MIN_VALUE;
21a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    static long lmax = Long.MAX_VALUE;
22a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    static long lmin = Long.MIN_VALUE;
23a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    static CA ca;
24a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
25a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public static void expectEquals(long expected, long result) {
26a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        if (expected != result) {
27a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            throw new Error("Expected: " + expected + ", found: " + result);
28a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
29a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    }
30a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
31a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public static void expectEquals(int expected, int result) {
32a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        if (expected != result) {
33a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            throw new Error("Expected: " + expected + ", found: " + result);
34a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
35a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    }
36a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
37a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public static void test_int() {
38a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int result = 0;
39a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int a = imax;
40a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int b = imin;
41a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int c = 10;
42a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int d = c;
43a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int tmp = 0;
44a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int [] ia = new int[5];
45a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        for (int i = 0; i < 100; i++) {
46a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            tmp = i*c;
47a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result += i*i;
48a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = i - tmp;
49a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
50a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -891);
51a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
52a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = c*c + (result - c);
53a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -801);
54a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
55a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = a + a*a;
56a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -2147483648);
57a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
58a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = b + b*b;
59a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -2147483648);
60a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
61a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = b - a*a;
62a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 2147483647);
63a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
64a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = d*d;
65a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        d++;
66a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result += result;
67a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 200);
68a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
69a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = c*c;
70a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        tmp++;
71a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result += result;
72a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 200);
73a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
74a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = 0;
75a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        try {
76a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = c*c;
77a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            ia[c] = d;  // array out of bound.
78a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result += d;
79a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        } catch (Exception e) {
80a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
81a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 100);
82a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
83a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        CA obj = new CA();
84a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = a*c + obj.ia;
85a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 2);
86a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
87a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = 0;
88a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        obj = ca;
89a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        try {
90a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = a*c;
91a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            tmp = obj.ia;
92a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = result + tmp;
93a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        } catch (Exception e) {
94a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
95a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -10);
96a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    }
97a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
98a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public static void test_long() {
99a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        long result = 0;
100a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        long a = lmax;
101a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        long b = lmin;
102a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        long c = 10;
103a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        long d = c;
104a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        long tmp = 0;
105a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int [] ia = new int[5];
106a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        for (long i = 0; i < 100; i++) {
107a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            tmp = i*c;
108a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result += i*i;
109a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = i - tmp;
110a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
111a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -891L);
112a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
113a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = c*c + (result - c);
114a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -801L);
115a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
116a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = a + a*a;
117a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -9223372036854775808L);
118a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
119a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = b + b*b;
120a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -9223372036854775808L);
121a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
122a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = b - a*a;
123a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 9223372036854775807L);
124a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
125a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = d*d;
126a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        d++;
127a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result += result;
128a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 200L);
129a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
130a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = c*c;
131a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        tmp++;
132a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result += result;
133a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 200L);
134a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
135a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = 0;
136a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        int index = 10;
137a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        try {
138a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = c*c;
139a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            ia[index] = 10;  // array out of bound.
140a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result += d;
141a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        } catch (Exception e) {
142a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
143a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 100L);
144a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
145a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        CA obj = new CA();
146a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = a*c + obj.la;
147a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, 113L);
148a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
149a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        result = 0;
150a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        obj = ca;
151a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        try {
152a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = a*c;
153a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            tmp = obj.la;
154a262f7707330dccfb50af6345813083182b61043Ningsheng Jian            result = result + tmp;
155a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        } catch (Exception e) {
156a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        }
157a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        expectEquals(result, -10L);
158a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    }
159a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
160a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public static void main(String[] args) {
161a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        test_int();
162a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        test_long();
163a262f7707330dccfb50af6345813083182b61043Ningsheng Jian        System.out.println("Done!");
164a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    }
165a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
166a262f7707330dccfb50af6345813083182b61043Ningsheng Jian}
167a262f7707330dccfb50af6345813083182b61043Ningsheng Jian
168a262f7707330dccfb50af6345813083182b61043Ningsheng Jianclass CA {
169a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public int ia = 12;
170a262f7707330dccfb50af6345813083182b61043Ningsheng Jian    public long la = 123L;
171a262f7707330dccfb50af6345813083182b61043Ningsheng Jian}
172