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