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