test/compiler/intrinsics/mathexact/MulExactIRepeatTest.java

Wed, 27 Apr 2016 01:25:04 +0800

author
aoqi
date
Wed, 27 Apr 2016 01:25:04 +0800
changeset 0
f90c822e73f8
child 6152
9949533a8623
permissions
-rw-r--r--

Initial load
http://hg.openjdk.java.net/jdk8u/jdk8u/hotspot/
changeset: 6782:28b50d07f6f8
tag: jdk8u25-b17

     1 /*
     2  * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     8  *
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    12  * version 2 for more details (a copy is included in the LICENSE file that
    13  * accompanied this code).
    14  *
    15  * You should have received a copy of the GNU General Public License version
    16  * 2 along with this work; if not, write to the Free Software Foundation,
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    18  *
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    20  * or visit www.oracle.com if you need additional information or have any
    21  * questions.
    22  */
    24 /*
    25  * @test
    26  * @bug 8026844
    27  * @summary Test repeating multiplyExact
    28  * @compile MulExactIRepeatTest.java Verify.java
    29  * @run main MulExactIRepeatTest
    30  *
    31  */
    33 public class MulExactIRepeatTest {
    34     public static void main(String[] args) {
    35         runTest(new Verify.MulExactI());
    36     }
    38     public static int nonExact(int x, int y, Verify.BinaryMethod method) {
    39         int result = method.unchecked(x, y);
    40         result += method.unchecked(x, y);
    41         result += method.unchecked(x, y);
    42         result += method.unchecked(x, y);
    43         return result;
    44     }
    46     public static void runTest(Verify.BinaryMethod method) {
    47         java.util.Random rnd = new java.util.Random();
    48         for (int i = 0; i < 50000; ++i) {
    49             int x = Integer.MAX_VALUE - 10;
    50             int y = Integer.MAX_VALUE - 10 + rnd.nextInt(5);
    52             int c = rnd.nextInt() / 10;
    53             int d = rnd.nextInt(9);
    55             int a = catchingExact(x, y, method);
    57             if (a != 36) {
    58                 throw new RuntimeException("a != 36 : " + a);
    59             }
    61             int b = nonExact(c, d, method);
    62             int n = exact(c, d, method);
    65             if (n != b) {
    66                 throw new RuntimeException("n != b : " + n + " != " + b);
    67             }
    68         }
    69     }
    71     public static int exact(int x, int y, Verify.BinaryMethod method) {
    72         int result = 0;
    73         result += method.checkMethod(x, y);
    74         result += method.checkMethod(x, y);
    75         result += method.checkMethod(x, y);
    76         result += method.checkMethod(x, y);
    77         return result;
    78     }
    80     public static int catchingExact(int x, int y, Verify.BinaryMethod method) {
    81         int result = 0;
    82         try {
    83             result += 5;
    84             result = method.checkMethod(x, y);
    85         } catch (ArithmeticException e) {
    86             result += 1;
    87         }
    88         try {
    89             result += 6;
    91             result += method.checkMethod(x, y);
    92         } catch (ArithmeticException e) {
    93             result += 2;
    94         }
    95         try {
    96             result += 7;
    97             result += method.checkMethod(x, y);
    98         } catch (ArithmeticException e) {
    99             result += 3;
   100         }
   101         try {
   102             result += 8;
   103             result += method.checkMethod(x, y);
   104         } catch (ArithmeticException e) {
   105             result += 4;
   106         }
   107         return result;
   108     }
   109 }

mercurial