14c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes/* 24c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * Copyright (C) 2013 The Android Open Source Project 34c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * 44c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 54c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * you may not use this file except in compliance with the License. 64c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * You may obtain a copy of the License at 74c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * 84c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 94c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * 104c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * Unless required by applicable law or agreed to in writing, software 114c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 124c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * See the License for the specific language governing permissions and 144c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes * limitations under the License. 154c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes */ 164c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes 174c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughespublic class Main { 184c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes static final long NUM_ITERATIONS = 50000; 194c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes static volatile double negInfinity = Double.NEGATIVE_INFINITY; 204c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes 214c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes public static void main(String args[]) { 22e90501da0222717d75c126ebf89569db3976927eSerguei Katkov test1(); 23e90501da0222717d75c126ebf89569db3976927eSerguei Katkov test2(); 245078d978f21620824d9c2fdcd73063260592398cSerguei Katkov test3(); 25e90501da0222717d75c126ebf89569db3976927eSerguei Katkov } 26e90501da0222717d75c126ebf89569db3976927eSerguei Katkov 27e90501da0222717d75c126ebf89569db3976927eSerguei Katkov public static void test1() { 284c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes 294c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes long sumInf = 0; 304c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes long sumRes = 0; 314c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes 324c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes for (long i = 0 ; i < NUM_ITERATIONS ; i++) { 334c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes //Every second iteration, sumInf becomes 0 344c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes sumInf += (long) negInfinity; 354c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes 364c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes //Some extra work for compilers to make this 374c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes //loop seem important 384c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes if (sumInf == Long.MIN_VALUE) { 394c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes sumRes++; 404c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes } 414c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes } 424c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes 434c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes if (sumRes == NUM_ITERATIONS / 2) { 44e90501da0222717d75c126ebf89569db3976927eSerguei Katkov System.out.println("Iteration Result is as expected"); 454c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes } else { 464c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes System.out.println("Conversions failed over " + NUM_ITERATIONS + " iterations"); 474c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes } 484c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes } 49e90501da0222717d75c126ebf89569db3976927eSerguei Katkov 50e90501da0222717d75c126ebf89569db3976927eSerguei Katkov public static void test2() { 51e90501da0222717d75c126ebf89569db3976927eSerguei Katkov long a = 1L; 52e90501da0222717d75c126ebf89569db3976927eSerguei Katkov long b = 2L; 53e90501da0222717d75c126ebf89569db3976927eSerguei Katkov 54e90501da0222717d75c126ebf89569db3976927eSerguei Katkov float inter3 = a; 55e90501da0222717d75c126ebf89569db3976927eSerguei Katkov float inter4 = b; 56e90501da0222717d75c126ebf89569db3976927eSerguei Katkov System.out.println("inter4:" + inter4); 57e90501da0222717d75c126ebf89569db3976927eSerguei Katkov } 58e90501da0222717d75c126ebf89569db3976927eSerguei Katkov 595078d978f21620824d9c2fdcd73063260592398cSerguei Katkov public static void test3() { 605078d978f21620824d9c2fdcd73063260592398cSerguei Katkov double d = Long.MAX_VALUE; 615078d978f21620824d9c2fdcd73063260592398cSerguei Katkov System.out.println("max_long:" + (long)d); 625078d978f21620824d9c2fdcd73063260592398cSerguei Katkov } 635078d978f21620824d9c2fdcd73063260592398cSerguei Katkov 644c6aad2bbe24e5a1a95fc4d08a4b6bb4d1609669Elliott Hughes} 65