jdk/test/java/lang/Math/IeeeRecommendedTests.java
author darcy
Thu, 03 Dec 2009 18:19:10 -0800
changeset 4347 ab0a9f495844
parent 1826 39d505a353e8
child 5506 202f599c92aa
permissions -rw-r--r--
6907177: Update jdk tests to remove unncessary -source and -target options Reviewed-by: ohair
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1826
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     1
/*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     2
 * Copyright 2003-2005 Sun Microsystems, Inc.  All Rights Reserved.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     4
 *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     7
 * published by the Free Software Foundation.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     8
 *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    13
 * accompanied this code).
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    14
 *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    18
 *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    19
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    20
 * CA 95054 USA or visit www.sun.com if you need additional information or
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    21
 * have any questions.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    22
 */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    23
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    24
/*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    25
 * @test
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    26
 * @bug 4860891 4826732 4780454 4939441 4826652
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    27
 * @summary Tests for IEEE 754[R] recommended functions and similar methods
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    28
 * @author Joseph D. Darcy
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    29
 */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    30
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    31
import sun.misc.FpUtils;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    32
import sun.misc.DoubleConsts;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    33
import sun.misc.FloatConsts;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    34
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    35
public class IeeeRecommendedTests {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    36
    private IeeeRecommendedTests(){}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    37
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    38
    static final float  NaNf = Float.NaN;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    39
    static final double NaNd = Double.NaN;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    40
    static final float  infinityF = Float.POSITIVE_INFINITY;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    41
    static final double infinityD = Double.POSITIVE_INFINITY;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    42
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    43
    static final float  Float_MAX_VALUEmm       = 0x1.fffffcP+127f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    44
    static final float  Float_MAX_SUBNORMAL     = 0x0.fffffeP-126f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    45
    static final float  Float_MAX_SUBNORMALmm   = 0x0.fffffcP-126f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    46
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    47
    static final double Double_MAX_VALUEmm      = 0x1.ffffffffffffeP+1023;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    48
    static final double Double_MAX_SUBNORMAL    = 0x0.fffffffffffffP-1022;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    49
    static final double Double_MAX_SUBNORMALmm  = 0x0.ffffffffffffeP-1022;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    50
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    51
    // Initialize shared random number generator
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    52
    static java.util.Random rand = new java.util.Random();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    53
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    54
    /**
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    55
     * Returns a floating-point power of two in the normal range.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    56
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    57
    static double powerOfTwoD(int n) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    58
        return Double.longBitsToDouble((((long)n + (long)DoubleConsts.MAX_EXPONENT) <<
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    59
                                        (DoubleConsts.SIGNIFICAND_WIDTH-1))
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    60
                                       & DoubleConsts.EXP_BIT_MASK);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    61
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    62
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    63
    /**
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    64
     * Returns a floating-point power of two in the normal range.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    65
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    66
    static float powerOfTwoF(int n) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    67
        return Float.intBitsToFloat(((n + FloatConsts.MAX_EXPONENT) <<
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    68
                                     (FloatConsts.SIGNIFICAND_WIDTH-1))
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    69
                                    & FloatConsts.EXP_BIT_MASK);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    70
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    71
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    72
    /* ******************** getExponent tests ****************************** */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    73
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    74
    /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    75
     * The tests for getExponent should test the special values (NaN, +/-
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    76
     * infinity, etc.), test the endpoints of each binade (set of
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    77
     * floating-point values with the same exponent), and for good
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    78
     * measure, test some random values within each binade.  Testing
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    79
     * the endpoints of each binade includes testing both positive and
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    80
     * negative numbers.  Subnormal values with different normalized
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    81
     * exponents should be tested too.  Both Math and StrictMath
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    82
     * methods should return the same results.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    83
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    84
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    85
    /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    86
     * Test Math.getExponent and StrictMath.getExponent with +d and -d.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    87
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    88
    static int testGetExponentCase(float f, int expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    89
        float minus_f = -f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    90
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    91
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    92
        failures+=Tests.test("Math.getExponent(float)", f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    93
                             Math.getExponent(f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    94
        failures+=Tests.test("Math.getExponent(float)", minus_f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    95
                             Math.getExponent(minus_f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    96
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    97
        failures+=Tests.test("StrictMath.getExponent(float)", f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    98
                             StrictMath.getExponent(f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
    99
        failures+=Tests.test("StrictMath.getExponent(float)", minus_f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   100
                             StrictMath.getExponent(minus_f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   101
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   102
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   103
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   104
    /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   105
     * Test Math.getExponent and StrictMath.getExponent with +d and -d.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   106
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   107
    static int testGetExponentCase(double d, int expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   108
        double minus_d = -d;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   109
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   110
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   111
        failures+=Tests.test("Math.getExponent(double)", d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   112
                             Math.getExponent(d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   113
        failures+=Tests.test("Math.getExponent(double)", minus_d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   114
                             Math.getExponent(minus_d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   115
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   116
        failures+=Tests.test("StrictMath.getExponent(double)", d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   117
                             StrictMath.getExponent(d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   118
        failures+=Tests.test("StrictMath.getExponent(double)", minus_d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   119
                             StrictMath.getExponent(minus_d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   120
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   121
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   122
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   123
    public static int testFloatGetExponent() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   124
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   125
        float [] specialValues = {NaNf,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   126
                                   Float.POSITIVE_INFINITY,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   127
                                   +0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   128
                                  +1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   129
                                  +2.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   130
                                  +16.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   131
                                  +Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   132
                                  +Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   133
                                  +FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   134
                                  +Float.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   135
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   136
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   137
        int [] specialResults = {Float.MAX_EXPONENT + 1, // NaN results
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   138
                                 Float.MAX_EXPONENT + 1, // Infinite results
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   139
                                 Float.MIN_EXPONENT - 1, // Zero results
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   140
                                 0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   141
                                 1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   142
                                 4,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   143
                                 FloatConsts.MIN_EXPONENT - 1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   144
                                 -FloatConsts.MAX_EXPONENT,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   145
                                 FloatConsts.MIN_EXPONENT,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   146
                                 FloatConsts.MAX_EXPONENT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   147
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   148
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   149
        // Special value tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   150
        for(int i = 0; i < specialValues.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   151
            failures += testGetExponentCase(specialValues[i], specialResults[i]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   152
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   153
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   154
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   155
        // Normal exponent tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   156
        for(int i = FloatConsts.MIN_EXPONENT; i <= FloatConsts.MAX_EXPONENT; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   157
            int result;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   158
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   159
            // Create power of two
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   160
            float po2 = powerOfTwoF(i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   161
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   162
            failures += testGetExponentCase(po2, i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   163
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   164
            // Generate some random bit patterns for the significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   165
            for(int j = 0; j < 10; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   166
                int randSignif = rand.nextInt();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   167
                float randFloat;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   168
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   169
                randFloat = Float.intBitsToFloat( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   170
                                                 (Float.floatToIntBits(po2)&
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   171
                                                  (~FloatConsts.SIGNIF_BIT_MASK)) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   172
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   173
                                                 (randSignif &
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   174
                                                  FloatConsts.SIGNIF_BIT_MASK) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   175
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   176
                failures += testGetExponentCase(randFloat, i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   177
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   178
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   179
            if (i > FloatConsts.MIN_EXPONENT) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   180
                float po2minus = FpUtils.nextAfter(po2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   181
                                                 Float.NEGATIVE_INFINITY);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   182
                failures += testGetExponentCase(po2minus, i-1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   183
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   184
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   185
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   186
        // Subnormal exponent tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   187
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   188
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   189
         * Start with MIN_VALUE, left shift, test high value, low
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   190
         * values, and random in between.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   191
         *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   192
         * Use nextAfter to calculate, high value of previous binade,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   193
         * loop count i will indicate how many random bits, if any are
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   194
         * needed.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   195
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   196
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   197
        float top=Float.MIN_VALUE;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   198
        for( int i = 1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   199
            i < FloatConsts.SIGNIFICAND_WIDTH;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   200
            i++, top *= 2.0f) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   201
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   202
            failures += testGetExponentCase(top,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   203
                                            FloatConsts.MIN_EXPONENT - 1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   204
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   205
            // Test largest value in next smaller binade
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   206
            if (i >= 3) {// (i == 1) would test 0.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   207
                         // (i == 2) would just retest MIN_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   208
                testGetExponentCase(FpUtils.nextAfter(top, 0.0f),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   209
                                    FloatConsts.MIN_EXPONENT - 1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   210
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   211
                if( i >= 10) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   212
                    // create a bit mask with (i-1) 1's in the low order
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   213
                    // bits
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   214
                    int mask = ~((~0)<<(i-1));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   215
                    float randFloat = Float.intBitsToFloat( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   216
                                                 Float.floatToIntBits(top) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   217
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   218
                                                 (rand.nextInt() & mask ) ) ;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   219
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   220
                    failures += testGetExponentCase(randFloat,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   221
                                                    FloatConsts.MIN_EXPONENT - 1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   222
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   223
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   224
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   225
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   226
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   227
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   228
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   229
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   230
    public static int testDoubleGetExponent() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   231
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   232
        double [] specialValues = {NaNd,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   233
                                   infinityD,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   234
                                   +0.0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   235
                                   +1.0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   236
                                   +2.0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   237
                                   +16.0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   238
                                   +Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   239
                                   +Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   240
                                   +DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   241
                                   +Double.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   242
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   243
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   244
        int [] specialResults = {Double.MAX_EXPONENT + 1, // NaN results
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   245
                                 Double.MAX_EXPONENT + 1, // Infinite results
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   246
                                 Double.MIN_EXPONENT - 1, // Zero results
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   247
                                 0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   248
                                 1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   249
                                 4,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   250
                                 DoubleConsts.MIN_EXPONENT - 1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   251
                                 -DoubleConsts.MAX_EXPONENT,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   252
                                 DoubleConsts.MIN_EXPONENT,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   253
                                 DoubleConsts.MAX_EXPONENT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   254
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   255
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   256
        // Special value tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   257
        for(int i = 0; i < specialValues.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   258
            failures += testGetExponentCase(specialValues[i], specialResults[i]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   259
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   260
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   261
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   262
        // Normal exponent tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   263
        for(int i = DoubleConsts.MIN_EXPONENT; i <= DoubleConsts.MAX_EXPONENT; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   264
            int result;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   265
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   266
            // Create power of two
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   267
            double po2 = powerOfTwoD(i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   268
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   269
            failures += testGetExponentCase(po2, i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   270
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   271
            // Generate some random bit patterns for the significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   272
            for(int j = 0; j < 10; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   273
                long randSignif = rand.nextLong();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   274
                double randFloat;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   275
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   276
                randFloat = Double.longBitsToDouble( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   277
                                                 (Double.doubleToLongBits(po2)&
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   278
                                                  (~DoubleConsts.SIGNIF_BIT_MASK)) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   279
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   280
                                                 (randSignif &
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   281
                                                  DoubleConsts.SIGNIF_BIT_MASK) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   282
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   283
                failures += testGetExponentCase(randFloat, i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   284
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   285
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   286
            if (i > DoubleConsts.MIN_EXPONENT) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   287
                double po2minus = FpUtils.nextAfter(po2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   288
                                                    Double.NEGATIVE_INFINITY);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   289
                failures += testGetExponentCase(po2minus, i-1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   290
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   291
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   292
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   293
        // Subnormal exponent tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   294
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   295
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   296
         * Start with MIN_VALUE, left shift, test high value, low
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   297
         * values, and random in between.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   298
         *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   299
         * Use nextAfter to calculate, high value of previous binade;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   300
         * loop count i will indicate how many random bits, if any are
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   301
         * needed.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   302
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   303
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   304
        double top=Double.MIN_VALUE;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   305
        for( int i = 1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   306
            i < DoubleConsts.SIGNIFICAND_WIDTH;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   307
            i++, top *= 2.0f) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   308
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   309
            failures += testGetExponentCase(top,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   310
                                            DoubleConsts.MIN_EXPONENT - 1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   311
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   312
            // Test largest value in next smaller binade
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   313
            if (i >= 3) {// (i == 1) would test 0.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   314
                         // (i == 2) would just retest MIN_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   315
                testGetExponentCase(FpUtils.nextAfter(top, 0.0),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   316
                                    DoubleConsts.MIN_EXPONENT - 1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   317
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   318
                if( i >= 10) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   319
                    // create a bit mask with (i-1) 1's in the low order
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   320
                    // bits
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   321
                    long mask = ~((~0L)<<(i-1));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   322
                    double randFloat = Double.longBitsToDouble( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   323
                                                 Double.doubleToLongBits(top) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   324
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   325
                                                 (rand.nextLong() & mask ) ) ;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   326
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   327
                    failures += testGetExponentCase(randFloat,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   328
                                                    DoubleConsts.MIN_EXPONENT - 1);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   329
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   330
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   331
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   332
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   333
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   334
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   335
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   336
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   337
    /* ******************** nextAfter tests ****************************** */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   338
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   339
    static int testNextAfterCase(float start, double direction, float expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   340
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   341
        float minus_start = -start;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   342
        double minus_direction = -direction;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   343
        float minus_expected = -expected;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   344
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   345
        failures+=Tests.test("Math.nextAfter(float,double)", start, direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   346
                             Math.nextAfter(start, direction), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   347
        failures+=Tests.test("Math.nextAfter(float,double)", minus_start, minus_direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   348
                             Math.nextAfter(minus_start, minus_direction), minus_expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   349
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   350
        failures+=Tests.test("StrictMath.nextAfter(float,double)", start, direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   351
                             StrictMath.nextAfter(start, direction), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   352
        failures+=Tests.test("StrictMath.nextAfter(float,double)", minus_start, minus_direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   353
                             StrictMath.nextAfter(minus_start, minus_direction), minus_expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   354
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   355
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   356
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   357
    static int testNextAfterCase(double start, double direction, double expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   358
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   359
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   360
        double minus_start = -start;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   361
        double minus_direction = -direction;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   362
        double minus_expected = -expected;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   363
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   364
        failures+=Tests.test("Math.nextAfter(double,double)", start, direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   365
                             Math.nextAfter(start, direction), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   366
        failures+=Tests.test("Math.nextAfter(double,double)", minus_start, minus_direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   367
                             Math.nextAfter(minus_start, minus_direction), minus_expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   368
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   369
        failures+=Tests.test("StrictMath.nextAfter(double,double)", start, direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   370
                             StrictMath.nextAfter(start, direction), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   371
        failures+=Tests.test("StrictMath.nextAfter(double,double)", minus_start, minus_direction,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   372
                             StrictMath.nextAfter(minus_start, minus_direction), minus_expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   373
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   374
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   375
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   376
    public static int testFloatNextAfter() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   377
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   378
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   379
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   380
         * Each row of the testCases matrix represents one test case
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   381
         * for nexAfter; given the input of the first two columns, the
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   382
         * result in the last column is expected.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   383
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   384
        float [][] testCases  = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   385
            {NaNf,              NaNf,                   NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   386
            {NaNf,              0.0f,                   NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   387
            {0.0f,              NaNf,                   NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   388
            {NaNf,              infinityF,              NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   389
            {infinityF,         NaNf,                   NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   390
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   391
            {infinityF,         infinityF,              infinityF},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   392
            {infinityF,         -infinityF,             Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   393
            {infinityF,         0.0f,                   Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   394
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   395
            {Float.MAX_VALUE,   infinityF,              infinityF},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   396
            {Float.MAX_VALUE,   -infinityF,             Float_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   397
            {Float.MAX_VALUE,   Float.MAX_VALUE,        Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   398
            {Float.MAX_VALUE,   0.0f,                   Float_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   399
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   400
            {Float_MAX_VALUEmm, Float.MAX_VALUE,        Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   401
            {Float_MAX_VALUEmm, infinityF,              Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   402
            {Float_MAX_VALUEmm, Float_MAX_VALUEmm,      Float_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   403
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   404
            {FloatConsts.MIN_NORMAL,    infinityF,              FloatConsts.MIN_NORMAL+
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   405
                                                                Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   406
            {FloatConsts.MIN_NORMAL,    -infinityF,             Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   407
            {FloatConsts.MIN_NORMAL,    1.0f,                   FloatConsts.MIN_NORMAL+
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   408
                                                                Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   409
            {FloatConsts.MIN_NORMAL,    -1.0f,                  Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   410
            {FloatConsts.MIN_NORMAL,    FloatConsts.MIN_NORMAL, FloatConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   411
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   412
            {Float_MAX_SUBNORMAL,       FloatConsts.MIN_NORMAL, FloatConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   413
            {Float_MAX_SUBNORMAL,       Float_MAX_SUBNORMAL,    Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   414
            {Float_MAX_SUBNORMAL,       0.0f,                   Float_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   415
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   416
            {Float_MAX_SUBNORMALmm,     Float_MAX_SUBNORMAL,    Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   417
            {Float_MAX_SUBNORMALmm,     0.0f,                   Float_MAX_SUBNORMALmm-Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   418
            {Float_MAX_SUBNORMALmm,     Float_MAX_SUBNORMALmm,  Float_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   419
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   420
            {Float.MIN_VALUE,   0.0f,                   0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   421
            {-Float.MIN_VALUE,  0.0f,                   -0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   422
            {Float.MIN_VALUE,   Float.MIN_VALUE,        Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   423
            {Float.MIN_VALUE,   1.0f,                   2*Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   424
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   425
            // Make sure zero behavior is tested
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   426
            {0.0f,              0.0f,                   0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   427
            {0.0f,              -0.0f,                  -0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   428
            {-0.0f,             0.0f,                   0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   429
            {-0.0f,             -0.0f,                  -0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   430
            {0.0f,              infinityF,              Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   431
            {0.0f,              -infinityF,             -Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   432
            {-0.0f,             infinityF,              Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   433
            {-0.0f,             -infinityF,             -Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   434
            {0.0f,              Float.MIN_VALUE,        Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   435
            {0.0f,              -Float.MIN_VALUE,       -Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   436
            {-0.0f,             Float.MIN_VALUE,        Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   437
            {-0.0f,             -Float.MIN_VALUE,       -Float.MIN_VALUE}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   438
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   439
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   440
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   441
            failures += testNextAfterCase(testCases[i][0], testCases[i][1],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   442
                                          testCases[i][2]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   443
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   444
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   445
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   446
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   447
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   448
    public static int testDoubleNextAfter() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   449
        int failures =0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   450
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   451
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   452
         * Each row of the testCases matrix represents one test case
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   453
         * for nexAfter; given the input of the first two columns, the
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   454
         * result in the last column is expected.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   455
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   456
        double [][] testCases  = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   457
            {NaNd,              NaNd,                   NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   458
            {NaNd,              0.0d,                   NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   459
            {0.0d,              NaNd,                   NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   460
            {NaNd,              infinityD,              NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   461
            {infinityD,         NaNd,                   NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   462
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   463
            {infinityD,         infinityD,              infinityD},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   464
            {infinityD,         -infinityD,             Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   465
            {infinityD,         0.0d,                   Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   466
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   467
            {Double.MAX_VALUE,  infinityD,              infinityD},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   468
            {Double.MAX_VALUE,  -infinityD,             Double_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   469
            {Double.MAX_VALUE,  Double.MAX_VALUE,       Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   470
            {Double.MAX_VALUE,  0.0d,                   Double_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   471
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   472
            {Double_MAX_VALUEmm,        Double.MAX_VALUE,       Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   473
            {Double_MAX_VALUEmm,        infinityD,              Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   474
            {Double_MAX_VALUEmm,        Double_MAX_VALUEmm,     Double_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   475
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   476
            {DoubleConsts.MIN_NORMAL,   infinityD,              DoubleConsts.MIN_NORMAL+
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   477
                                                                Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   478
            {DoubleConsts.MIN_NORMAL,   -infinityD,             Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   479
            {DoubleConsts.MIN_NORMAL,   1.0f,                   DoubleConsts.MIN_NORMAL+
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   480
                                                                Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   481
            {DoubleConsts.MIN_NORMAL,   -1.0f,                  Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   482
            {DoubleConsts.MIN_NORMAL,   DoubleConsts.MIN_NORMAL,DoubleConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   483
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   484
            {Double_MAX_SUBNORMAL,      DoubleConsts.MIN_NORMAL,DoubleConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   485
            {Double_MAX_SUBNORMAL,      Double_MAX_SUBNORMAL,   Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   486
            {Double_MAX_SUBNORMAL,      0.0d,                   Double_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   487
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   488
            {Double_MAX_SUBNORMALmm,    Double_MAX_SUBNORMAL,   Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   489
            {Double_MAX_SUBNORMALmm,    0.0d,                   Double_MAX_SUBNORMALmm-Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   490
            {Double_MAX_SUBNORMALmm,    Double_MAX_SUBNORMALmm, Double_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   491
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   492
            {Double.MIN_VALUE,  0.0d,                   0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   493
            {-Double.MIN_VALUE, 0.0d,                   -0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   494
            {Double.MIN_VALUE,  Double.MIN_VALUE,       Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   495
            {Double.MIN_VALUE,  1.0f,                   2*Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   496
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   497
            // Make sure zero behavior is tested
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   498
            {0.0d,              0.0d,                   0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   499
            {0.0d,              -0.0d,                  -0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   500
            {-0.0d,             0.0d,                   0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   501
            {-0.0d,             -0.0d,                  -0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   502
            {0.0d,              infinityD,              Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   503
            {0.0d,              -infinityD,             -Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   504
            {-0.0d,             infinityD,              Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   505
            {-0.0d,             -infinityD,             -Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   506
            {0.0d,              Double.MIN_VALUE,       Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   507
            {0.0d,              -Double.MIN_VALUE,      -Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   508
            {-0.0d,             Double.MIN_VALUE,       Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   509
            {-0.0d,             -Double.MIN_VALUE,      -Double.MIN_VALUE}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   510
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   511
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   512
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   513
            failures += testNextAfterCase(testCases[i][0], testCases[i][1],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   514
                                          testCases[i][2]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   515
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   516
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   517
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   518
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   519
    /* ******************** nextUp tests ********************************* */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   520
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   521
    public static int testFloatNextUp() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   522
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   523
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   524
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   525
         * Each row of testCases represents one test case for nextUp;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   526
         * the first column is the input and the second column is the
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   527
         * expected result.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   528
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   529
        float testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   530
            {NaNf,                      NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   531
            {-infinityF,                -Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   532
            {-Float.MAX_VALUE,          -Float_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   533
            {-FloatConsts.MIN_NORMAL,   -Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   534
            {-Float_MAX_SUBNORMAL,      -Float_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   535
            {-Float.MIN_VALUE,          -0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   536
            {-0.0f,                     Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   537
            {+0.0f,                     Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   538
            {Float.MIN_VALUE,           Float.MIN_VALUE*2},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   539
            {Float_MAX_SUBNORMALmm,     Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   540
            {Float_MAX_SUBNORMAL,       FloatConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   541
            {FloatConsts.MIN_NORMAL,    FloatConsts.MIN_NORMAL+Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   542
            {Float_MAX_VALUEmm,         Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   543
            {Float.MAX_VALUE,           infinityF},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   544
            {infinityF,                 infinityF}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   545
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   546
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   547
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   548
            failures+=Tests.test("Math.nextUp(float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   549
                                 testCases[i][0], Math.nextUp(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   550
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   551
            failures+=Tests.test("StrictMath.nextUp(float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   552
                                 testCases[i][0], StrictMath.nextUp(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   553
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   554
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   555
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   556
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   557
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   558
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   559
    public static int testDoubleNextUp() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   560
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   561
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   562
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   563
         * Each row of testCases represents one test case for nextUp;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   564
         * the first column is the input and the second column is the
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   565
         * expected result.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   566
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   567
        double testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   568
            {NaNd,                      NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   569
            {-infinityD,                -Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   570
            {-Double.MAX_VALUE,         -Double_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   571
            {-DoubleConsts.MIN_NORMAL,  -Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   572
            {-Double_MAX_SUBNORMAL,     -Double_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   573
            {-Double.MIN_VALUE,         -0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   574
            {-0.0d,                     Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   575
            {+0.0d,                     Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   576
            {Double.MIN_VALUE,          Double.MIN_VALUE*2},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   577
            {Double_MAX_SUBNORMALmm,    Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   578
            {Double_MAX_SUBNORMAL,      DoubleConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   579
            {DoubleConsts.MIN_NORMAL,   DoubleConsts.MIN_NORMAL+Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   580
            {Double_MAX_VALUEmm,        Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   581
            {Double.MAX_VALUE,          infinityD},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   582
            {infinityD,                 infinityD}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   583
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   584
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   585
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   586
            failures+=Tests.test("Math.nextUp(double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   587
                                 testCases[i][0], Math.nextUp(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   588
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   589
            failures+=Tests.test("StrictMath.nextUp(double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   590
                                 testCases[i][0], StrictMath.nextUp(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   591
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   592
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   593
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   594
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   595
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   596
    /* ******************** nextDown tests ********************************* */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   597
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   598
    public static int testFloatNextDown() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   599
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   600
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   601
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   602
         * Each row of testCases represents one test case for nextDown;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   603
         * the first column is the input and the second column is the
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   604
         * expected result.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   605
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   606
        float testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   607
            {NaNf,                      NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   608
            {-infinityF,                -infinityF},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   609
            {-Float.MAX_VALUE,          -infinityF},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   610
            {-Float_MAX_VALUEmm,        -Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   611
            {-Float_MAX_SUBNORMAL,      -FloatConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   612
            {-Float_MAX_SUBNORMALmm,    -Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   613
            {-0.0f,                     -Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   614
            {+0.0f,                     -Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   615
            {Float.MIN_VALUE,           0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   616
            {Float.MIN_VALUE*2,         Float.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   617
            {Float_MAX_SUBNORMAL,       Float_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   618
            {FloatConsts.MIN_NORMAL,    Float_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   619
            {FloatConsts.MIN_NORMAL+
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   620
             Float.MIN_VALUE,           FloatConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   621
            {Float.MAX_VALUE,           Float_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   622
            {infinityF,                 Float.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   623
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   624
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   625
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   626
            failures+=Tests.test("FpUtils.nextDown(float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   627
                                 testCases[i][0], FpUtils.nextDown(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   628
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   629
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   630
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   631
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   632
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   633
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   634
    public static int testDoubleNextDown() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   635
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   636
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   637
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   638
         * Each row of testCases represents one test case for nextDown;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   639
         * the first column is the input and the second column is the
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   640
         * expected result.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   641
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   642
        double testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   643
            {NaNd,                      NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   644
            {-infinityD,                -infinityD},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   645
            {-Double.MAX_VALUE,         -infinityD},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   646
            {-Double_MAX_VALUEmm,       -Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   647
            {-Double_MAX_SUBNORMAL,     -DoubleConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   648
            {-Double_MAX_SUBNORMALmm,   -Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   649
            {-0.0d,                     -Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   650
            {+0.0d,                     -Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   651
            {Double.MIN_VALUE,          0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   652
            {Double.MIN_VALUE*2,        Double.MIN_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   653
            {Double_MAX_SUBNORMAL,      Double_MAX_SUBNORMALmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   654
            {DoubleConsts.MIN_NORMAL,   Double_MAX_SUBNORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   655
            {DoubleConsts.MIN_NORMAL+
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   656
             Double.MIN_VALUE,          DoubleConsts.MIN_NORMAL},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   657
            {Double.MAX_VALUE,          Double_MAX_VALUEmm},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   658
            {infinityD,                 Double.MAX_VALUE},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   659
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   660
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   661
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   662
            failures+=Tests.test("FpUtils.nextDown(double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   663
                                 testCases[i][0], FpUtils.nextDown(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   664
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   665
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   666
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   667
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   668
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   669
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   670
    /* ********************** boolean tests ****************************** */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   671
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   672
    /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   673
     * Combined tests for boolean functions, isFinite, isInfinite,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   674
     * isNaN, isUnordered.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   675
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   676
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   677
    public static int testFloatBooleanMethods() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   678
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   679
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   680
        float testCases [] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   681
            NaNf,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   682
            -infinityF,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   683
            infinityF,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   684
            -Float.MAX_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   685
            -3.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   686
            -1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   687
            -FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   688
            -Float_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   689
            -Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   690
            -Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   691
            -0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   692
            +0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   693
            Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   694
            Float_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   695
            Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   696
            FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   697
            1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   698
            3.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   699
            Float_MAX_VALUEmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   700
            Float.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   701
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   702
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   703
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   704
            // isNaN
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   705
            failures+=Tests.test("FpUtils.isNaN(float)", testCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   706
                                 FpUtils.isNaN(testCases[i]), (i ==0));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   707
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   708
            // isFinite
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   709
            failures+=Tests.test("FpUtils.isFinite(float)", testCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   710
                                 FpUtils.isFinite(testCases[i]), (i >= 3));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   711
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   712
            // isInfinite
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   713
            failures+=Tests.test("FpUtils.isInfinite(float)", testCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   714
                                 FpUtils.isInfinite(testCases[i]), (i==1 || i==2));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   715
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   716
            // isUnorderd
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   717
            for(int j = 0; j < testCases.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   718
                failures+=Tests.test("FpUtils.isUnordered(float, float)", testCases[i],testCases[j],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   719
                                     FpUtils.isUnordered(testCases[i],testCases[j]), (i==0 || j==0));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   720
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   721
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   722
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   723
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   724
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   725
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   726
    public static int testDoubleBooleanMethods() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   727
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   728
        boolean result = false;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   729
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   730
        double testCases [] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   731
            NaNd,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   732
            -infinityD,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   733
            infinityD,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   734
            -Double.MAX_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   735
            -3.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   736
            -1.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   737
            -DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   738
            -Double_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   739
            -Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   740
            -Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   741
            -0.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   742
            +0.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   743
            Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   744
            Double_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   745
            Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   746
            DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   747
            1.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   748
            3.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   749
            Double_MAX_VALUEmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   750
            Double.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   751
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   752
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   753
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   754
            // isNaN
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   755
            failures+=Tests.test("FpUtils.isNaN(double)", testCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   756
                                 FpUtils.isNaN(testCases[i]), (i ==0));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   757
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   758
            // isFinite
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   759
            failures+=Tests.test("FpUtils.isFinite(double)", testCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   760
                                 FpUtils.isFinite(testCases[i]), (i >= 3));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   761
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   762
            // isInfinite
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   763
            failures+=Tests.test("FpUtils.isInfinite(double)", testCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   764
                                 FpUtils.isInfinite(testCases[i]), (i==1 || i==2));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   765
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   766
            // isUnorderd
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   767
            for(int j = 0; j < testCases.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   768
                failures+=Tests.test("FpUtils.isUnordered(double, double)", testCases[i],testCases[j],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   769
                                     FpUtils.isUnordered(testCases[i],testCases[j]), (i==0 || j==0));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   770
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   771
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   772
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   773
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   774
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   775
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   776
    /* ******************** copySign tests******************************** */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   777
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   778
   public static int testFloatCopySign() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   779
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   780
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   781
        // testCases[0] are logically positive numbers;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   782
        // testCases[1] are negative numbers.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   783
        float testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   784
            {+0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   785
             Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   786
             Float_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   787
             Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   788
             FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   789
             1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   790
             3.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   791
             Float_MAX_VALUEmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   792
             Float.MAX_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   793
             infinityF,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   794
            },
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   795
            {-infinityF,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   796
             -Float.MAX_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   797
             -3.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   798
             -1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   799
             -FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   800
             -Float_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   801
             -Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   802
             -Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   803
             -0.0f}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   804
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   805
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   806
        float NaNs[] = {Float.intBitsToFloat(0x7fc00000),       // "positive" NaN
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   807
                        Float.intBitsToFloat(0xFfc00000)};      // "negative" NaN
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   808
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   809
        // Tests shared between raw and non-raw versions
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   810
        for(int i = 0; i < 2; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   811
            for(int j = 0; j < 2; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   812
                for(int m = 0; m < testCases[i].length; m++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   813
                    for(int n = 0; n < testCases[j].length; n++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   814
                        // copySign(magnitude, sign)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   815
                        failures+=Tests.test("Math.copySign(float,float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   816
                                             testCases[i][m],testCases[j][n],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   817
                                             Math.copySign(testCases[i][m], testCases[j][n]),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   818
                                             (j==0?1.0f:-1.0f)*Math.abs(testCases[i][m]) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   819
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   820
                        failures+=Tests.test("StrictMath.copySign(float,float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   821
                                             testCases[i][m],testCases[j][n],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   822
                                             StrictMath.copySign(testCases[i][m], testCases[j][n]),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   823
                                             (j==0?1.0f:-1.0f)*Math.abs(testCases[i][m]) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   824
                    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   825
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   826
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   827
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   828
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   829
        // For rawCopySign, NaN may effectively have either sign bit
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   830
        // while for copySign NaNs are treated as if they always have
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   831
        // a zero sign bit (i.e. as positive numbers)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   832
        for(int i = 0; i < 2; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   833
            for(int j = 0; j < NaNs.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   834
                for(int m = 0; m < testCases[i].length; m++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   835
                    // copySign(magnitude, sign)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   836
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   837
                    failures += (Math.abs(Math.copySign(testCases[i][m], NaNs[j])) ==
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   838
                                 Math.abs(testCases[i][m])) ? 0:1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   839
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   840
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   841
                    failures+=Tests.test("StrictMath.copySign(float,float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   842
                                         testCases[i][m], NaNs[j],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   843
                                         StrictMath.copySign(testCases[i][m], NaNs[j]),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   844
                                         Math.abs(testCases[i][m]) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   845
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   846
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   847
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   848
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   849
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   850
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   851
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   852
    public static int testDoubleCopySign() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   853
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   854
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   855
        // testCases[0] are logically positive numbers;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   856
        // testCases[1] are negative numbers.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   857
        double testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   858
            {+0.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   859
             Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   860
             Double_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   861
             Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   862
             DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   863
             1.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   864
             3.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   865
             Double_MAX_VALUEmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   866
             Double.MAX_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   867
             infinityD,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   868
            },
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   869
            {-infinityD,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   870
             -Double.MAX_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   871
             -3.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   872
             -1.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   873
             -DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   874
             -Double_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   875
             -Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   876
             -Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   877
             -0.0d}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   878
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   879
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   880
        double NaNs[] = {Double.longBitsToDouble(0x7ff8000000000000L),  // "positive" NaN
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   881
                         Double.longBitsToDouble(0xfff8000000000000L),  // "negative" NaN
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   882
                         Double.longBitsToDouble(0x7FF0000000000001L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   883
                         Double.longBitsToDouble(0xFFF0000000000001L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   884
                         Double.longBitsToDouble(0x7FF8555555555555L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   885
                         Double.longBitsToDouble(0xFFF8555555555555L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   886
                         Double.longBitsToDouble(0x7FFFFFFFFFFFFFFFL),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   887
                         Double.longBitsToDouble(0xFFFFFFFFFFFFFFFFL),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   888
                         Double.longBitsToDouble(0x7FFDeadBeef00000L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   889
                         Double.longBitsToDouble(0xFFFDeadBeef00000L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   890
                         Double.longBitsToDouble(0x7FFCafeBabe00000L),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   891
                         Double.longBitsToDouble(0xFFFCafeBabe00000L)};
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   892
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   893
        // Tests shared between Math and StrictMath versions
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   894
        for(int i = 0; i < 2; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   895
            for(int j = 0; j < 2; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   896
                for(int m = 0; m < testCases[i].length; m++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   897
                    for(int n = 0; n < testCases[j].length; n++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   898
                        // copySign(magnitude, sign)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   899
                        failures+=Tests.test("MathcopySign(double,double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   900
                                             testCases[i][m],testCases[j][n],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   901
                                             Math.copySign(testCases[i][m], testCases[j][n]),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   902
                                             (j==0?1.0f:-1.0f)*Math.abs(testCases[i][m]) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   903
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   904
                        failures+=Tests.test("StrictMath.copySign(double,double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   905
                                             testCases[i][m],testCases[j][n],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   906
                                             StrictMath.copySign(testCases[i][m], testCases[j][n]),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   907
                                             (j==0?1.0f:-1.0f)*Math.abs(testCases[i][m]) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   908
                    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   909
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   910
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   911
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   912
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   913
        // For Math.copySign, NaN may effectively have either sign bit
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   914
        // while for StrictMath.copySign NaNs are treated as if they
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   915
        // always have a zero sign bit (i.e. as positive numbers)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   916
        for(int i = 0; i < 2; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   917
            for(int j = 0; j < NaNs.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   918
                for(int m = 0; m < testCases[i].length; m++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   919
                    // copySign(magnitude, sign)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   920
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   921
                    failures += (Math.abs(Math.copySign(testCases[i][m], NaNs[j])) ==
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   922
                                 Math.abs(testCases[i][m])) ? 0:1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   923
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   924
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   925
                    failures+=Tests.test("StrictMath.copySign(double,double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   926
                                         testCases[i][m], NaNs[j],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   927
                                         StrictMath.copySign(testCases[i][m], NaNs[j]),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   928
                                         Math.abs(testCases[i][m]) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   929
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   930
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   931
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   932
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   933
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   934
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   935
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   936
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   937
    /* ************************ scalb tests ******************************* */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   938
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   939
    static int testScalbCase(float value, int scale_factor, float expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   940
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   941
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   942
        failures+=Tests.test("Math.scalb(float,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   943
                             value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   944
                             Math.scalb(value, scale_factor), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   945
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   946
        failures+=Tests.test("Math.scalb(float,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   947
                             -value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   948
                             Math.scalb(-value, scale_factor), -expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   949
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   950
        failures+=Tests.test("StrictMath.scalb(float,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   951
                             value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   952
                             StrictMath.scalb(value, scale_factor), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   953
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   954
        failures+=Tests.test("StrictMath.scalb(float,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   955
                             -value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   956
                             StrictMath.scalb(-value, scale_factor), -expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   957
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   958
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   959
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   960
    public static int testFloatScalb() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   961
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   962
        int MAX_SCALE = FloatConsts.MAX_EXPONENT + -FloatConsts.MIN_EXPONENT +
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   963
                        FloatConsts.SIGNIFICAND_WIDTH + 1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   964
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   965
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   966
        // Arguments x, where scalb(x,n) is x for any n.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   967
        float [] identityTestCases = {NaNf,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   968
                                      -0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   969
                                      +0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   970
                                      infinityF,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   971
                                      -infinityF
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   972
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   973
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   974
        float [] subnormalTestCases = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   975
            Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   976
            3.0f*Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   977
            Float_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   978
            Float_MAX_SUBNORMAL
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   979
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   980
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   981
        float [] someTestCases = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   982
            Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   983
            3.0f*Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   984
            Float_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   985
            Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   986
            FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   987
            1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   988
            2.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   989
            3.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   990
            (float)Math.PI,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   991
            Float_MAX_VALUEmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   992
            Float.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   993
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   994
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   995
        int [] oneMultiplyScalingFactors = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   996
            FloatConsts.MIN_EXPONENT,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   997
            FloatConsts.MIN_EXPONENT+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   998
            -3,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
   999
            -2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1000
            -1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1001
            0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1002
            1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1003
            2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1004
            3,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1005
            FloatConsts.MAX_EXPONENT-1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1006
            FloatConsts.MAX_EXPONENT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1007
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1008
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1009
        int [] manyScalingFactors = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1010
            Integer.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1011
            Integer.MIN_VALUE+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1012
            -MAX_SCALE -1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1013
            -MAX_SCALE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1014
            -MAX_SCALE+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1015
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1016
            2*FloatConsts.MIN_EXPONENT-1,       // -253
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1017
            2*FloatConsts.MIN_EXPONENT,         // -252
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1018
            2*FloatConsts.MIN_EXPONENT+1,       // -251
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1019
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1020
            FpUtils.ilogb(Float.MIN_VALUE)-1,   // -150
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1021
            FpUtils.ilogb(Float.MIN_VALUE),     // -149
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1022
            -FloatConsts.MAX_EXPONENT,          // -127
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1023
            FloatConsts.MIN_EXPONENT,           // -126
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1024
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1025
            -2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1026
            -1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1027
            0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1028
            1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1029
            2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1030
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1031
            FloatConsts.MAX_EXPONENT-1,         // 126
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1032
            FloatConsts.MAX_EXPONENT,           // 127
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1033
            FloatConsts.MAX_EXPONENT+1,         // 128
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1034
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1035
            2*FloatConsts.MAX_EXPONENT-1,       // 253
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1036
            2*FloatConsts.MAX_EXPONENT,         // 254
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1037
            2*FloatConsts.MAX_EXPONENT+1,       // 255
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1038
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1039
            MAX_SCALE-1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1040
            MAX_SCALE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1041
            MAX_SCALE+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1042
            Integer.MAX_VALUE-1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1043
            Integer.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1044
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1045
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1046
        // Test cases where scaling is always a no-op
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1047
        for(int i=0; i < identityTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1048
            for(int j=0; j < manyScalingFactors.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1049
                failures += testScalbCase(identityTestCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1050
                                          manyScalingFactors[j],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1051
                                          identityTestCases[i]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1052
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1053
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1054
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1055
        // Test cases where result is 0.0 or infinity due to magnitude
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1056
        // of the scaling factor
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1057
        for(int i=0; i < someTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1058
            for(int j=0; j < manyScalingFactors.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1059
                int scaleFactor = manyScalingFactors[j];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1060
                if (Math.abs(scaleFactor) >= MAX_SCALE) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1061
                    float value = someTestCases[i];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1062
                    failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1063
                                            scaleFactor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1064
                                            FpUtils.copySign( (scaleFactor>0?infinityF:0.0f), value) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1065
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1066
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1067
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1068
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1069
        // Test cases that could be done with one floating-point
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1070
        // multiply.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1071
        for(int i=0; i < someTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1072
            for(int j=0; j < oneMultiplyScalingFactors.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1073
                int scaleFactor = oneMultiplyScalingFactors[j];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1074
                    float value = someTestCases[i];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1075
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1076
                    failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1077
                                            scaleFactor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1078
                                            value*powerOfTwoF(scaleFactor));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1079
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1080
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1081
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1082
        // Create 2^MAX_EXPONENT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1083
        float twoToTheMaxExp = 1.0f; // 2^0
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1084
        for(int i = 0; i < FloatConsts.MAX_EXPONENT; i++)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1085
            twoToTheMaxExp *=2.0f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1086
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1087
        // Scale-up subnormal values until they all overflow
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1088
        for(int i=0; i < subnormalTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1089
            float scale = 1.0f; // 2^j
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1090
            float value = subnormalTestCases[i];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1091
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1092
            for(int j=FloatConsts.MAX_EXPONENT*2; j < MAX_SCALE; j++) { // MAX_SCALE -1 should cause overflow
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1093
                int scaleFactor = j;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1094
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1095
                failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1096
                                        scaleFactor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1097
                                        (FpUtils.ilogb(value) +j > FloatConsts.MAX_EXPONENT ) ?
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1098
                                        FpUtils.copySign(infinityF, value) : // overflow
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1099
                                        // calculate right answer
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1100
                                        twoToTheMaxExp*(twoToTheMaxExp*(scale*value)) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1101
                scale*=2.0f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1102
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1103
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1104
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1105
        // Scale down a large number until it underflows.  By scaling
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1106
        // down MAX_NORMALmm, the first subnormal result will be exact
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1107
        // but the next one will round -- all those results can be
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1108
        // checked by halving a separate value in the loop.  Actually,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1109
        // we can keep halving and checking until the product is zero
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1110
        // since:
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1111
        //
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1112
        // 1. If the scalb of MAX_VALUEmm is subnormal and *not* exact
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1113
        // it will round *up*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1114
        //
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1115
        // 2. When rounding first occurs in the expected product, it
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1116
        // too rounds up, to 2^-MAX_EXPONENT.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1117
        //
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1118
        // Halving expected after rounding happends to give the same
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1119
        // result as the scalb operation.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1120
        float expected = Float_MAX_VALUEmm *0.5f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1121
        for(int i = -1; i > -MAX_SCALE; i--) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1122
            failures+=testScalbCase(Float_MAX_VALUEmm, i, expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1123
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1124
            expected *= 0.5f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1125
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1126
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1127
        // Tricky rounding tests:
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1128
        // Scale down a large number into subnormal range such that if
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1129
        // scalb is being implemented with multiple floating-point
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1130
        // multiplies, the value would round twice if the multiplies
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1131
        // were done in the wrong order.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1132
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1133
        float value = 0x8.0000bP-5f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1134
        expected = 0x1.00001p-129f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1135
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1136
        for(int i = 0; i < 129; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1137
            failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1138
                                    -127-i,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1139
                                    expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1140
            value *=2.0f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1141
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1142
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1143
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1144
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1145
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1146
    static int testScalbCase(double value, int scale_factor, double expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1147
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1148
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1149
        failures+=Tests.test("Math.scalb(double,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1150
                             value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1151
                             Math.scalb(value, scale_factor), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1152
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1153
        failures+=Tests.test("Math.scalb(double,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1154
                             -value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1155
                             Math.scalb(-value, scale_factor), -expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1156
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1157
        failures+=Tests.test("StrictMath.scalb(double,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1158
                             value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1159
                             StrictMath.scalb(value, scale_factor), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1160
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1161
        failures+=Tests.test("StrictMath.scalb(double,int)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1162
                             -value, scale_factor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1163
                             StrictMath.scalb(-value, scale_factor), -expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1164
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1165
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1166
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1167
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1168
    public static int testDoubleScalb() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1169
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1170
        int MAX_SCALE = DoubleConsts.MAX_EXPONENT + -DoubleConsts.MIN_EXPONENT +
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1171
                        DoubleConsts.SIGNIFICAND_WIDTH + 1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1172
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1173
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1174
        // Arguments x, where scalb(x,n) is x for any n.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1175
        double [] identityTestCases = {NaNd,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1176
                                      -0.0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1177
                                      +0.0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1178
                                      infinityD,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1179
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1180
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1181
        double [] subnormalTestCases = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1182
            Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1183
            3.0d*Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1184
            Double_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1185
            Double_MAX_SUBNORMAL
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1186
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1187
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1188
        double [] someTestCases = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1189
            Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1190
            3.0d*Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1191
            Double_MAX_SUBNORMALmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1192
            Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1193
            DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1194
            1.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1195
            2.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1196
            3.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1197
            Math.PI,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1198
            Double_MAX_VALUEmm,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1199
            Double.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1200
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1201
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1202
        int [] oneMultiplyScalingFactors = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1203
            DoubleConsts.MIN_EXPONENT,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1204
            DoubleConsts.MIN_EXPONENT+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1205
            -3,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1206
            -2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1207
            -1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1208
            0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1209
            1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1210
            2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1211
            3,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1212
            DoubleConsts.MAX_EXPONENT-1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1213
            DoubleConsts.MAX_EXPONENT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1214
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1215
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1216
        int [] manyScalingFactors = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1217
            Integer.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1218
            Integer.MIN_VALUE+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1219
            -MAX_SCALE -1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1220
            -MAX_SCALE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1221
            -MAX_SCALE+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1222
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1223
            2*DoubleConsts.MIN_EXPONENT-1,      // -2045
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1224
            2*DoubleConsts.MIN_EXPONENT,        // -2044
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1225
            2*DoubleConsts.MIN_EXPONENT+1,      // -2043
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1226
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1227
            FpUtils.ilogb(Double.MIN_VALUE)-1,  // -1076
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1228
            FpUtils.ilogb(Double.MIN_VALUE),    // -1075
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1229
            -DoubleConsts.MAX_EXPONENT,         // -1023
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1230
            DoubleConsts.MIN_EXPONENT,          // -1022
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1231
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1232
            -2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1233
            -1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1234
            0,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1235
            1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1236
            2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1237
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1238
            DoubleConsts.MAX_EXPONENT-1,        // 1022
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1239
            DoubleConsts.MAX_EXPONENT,          // 1023
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1240
            DoubleConsts.MAX_EXPONENT+1,        // 1024
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1241
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1242
            2*DoubleConsts.MAX_EXPONENT-1,      // 2045
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1243
            2*DoubleConsts.MAX_EXPONENT,        // 2046
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1244
            2*DoubleConsts.MAX_EXPONENT+1,      // 2047
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1245
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1246
            MAX_SCALE-1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1247
            MAX_SCALE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1248
            MAX_SCALE+1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1249
            Integer.MAX_VALUE-1,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1250
            Integer.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1251
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1252
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1253
        // Test cases where scaling is always a no-op
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1254
        for(int i=0; i < identityTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1255
            for(int j=0; j < manyScalingFactors.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1256
                failures += testScalbCase(identityTestCases[i],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1257
                                          manyScalingFactors[j],
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1258
                                          identityTestCases[i]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1259
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1260
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1261
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1262
        // Test cases where result is 0.0 or infinity due to magnitude
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1263
        // of the scaling factor
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1264
        for(int i=0; i < someTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1265
            for(int j=0; j < manyScalingFactors.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1266
                int scaleFactor = manyScalingFactors[j];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1267
                if (Math.abs(scaleFactor) >= MAX_SCALE) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1268
                    double value = someTestCases[i];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1269
                    failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1270
                                            scaleFactor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1271
                                            FpUtils.copySign( (scaleFactor>0?infinityD:0.0), value) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1272
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1273
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1274
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1275
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1276
        // Test cases that could be done with one floating-point
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1277
        // multiply.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1278
        for(int i=0; i < someTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1279
            for(int j=0; j < oneMultiplyScalingFactors.length; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1280
                int scaleFactor = oneMultiplyScalingFactors[j];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1281
                    double value = someTestCases[i];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1282
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1283
                    failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1284
                                            scaleFactor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1285
                                            value*powerOfTwoD(scaleFactor));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1286
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1287
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1288
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1289
        // Create 2^MAX_EXPONENT
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1290
        double twoToTheMaxExp = 1.0; // 2^0
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1291
        for(int i = 0; i < DoubleConsts.MAX_EXPONENT; i++)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1292
            twoToTheMaxExp *=2.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1293
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1294
        // Scale-up subnormal values until they all overflow
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1295
        for(int i=0; i < subnormalTestCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1296
            double scale = 1.0; // 2^j
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1297
            double value = subnormalTestCases[i];
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1298
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1299
            for(int j=DoubleConsts.MAX_EXPONENT*2; j < MAX_SCALE; j++) { // MAX_SCALE -1 should cause overflow
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1300
                int scaleFactor = j;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1301
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1302
                failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1303
                                        scaleFactor,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1304
                                        (FpUtils.ilogb(value) +j > DoubleConsts.MAX_EXPONENT ) ?
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1305
                                        FpUtils.copySign(infinityD, value) : // overflow
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1306
                                        // calculate right answer
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1307
                                        twoToTheMaxExp*(twoToTheMaxExp*(scale*value)) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1308
                scale*=2.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1309
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1310
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1311
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1312
        // Scale down a large number until it underflows.  By scaling
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1313
        // down MAX_NORMALmm, the first subnormal result will be exact
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1314
        // but the next one will round -- all those results can be
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1315
        // checked by halving a separate value in the loop.  Actually,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1316
        // we can keep halving and checking until the product is zero
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1317
        // since:
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1318
        //
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1319
        // 1. If the scalb of MAX_VALUEmm is subnormal and *not* exact
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1320
        // it will round *up*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1321
        //
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1322
        // 2. When rounding first occurs in the expected product, it
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1323
        // too rounds up, to 2^-MAX_EXPONENT.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1324
        //
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1325
        // Halving expected after rounding happends to give the same
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1326
        // result as the scalb operation.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1327
        double expected = Double_MAX_VALUEmm *0.5f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1328
        for(int i = -1; i > -MAX_SCALE; i--) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1329
            failures+=testScalbCase(Double_MAX_VALUEmm, i, expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1330
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1331
            expected *= 0.5;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1332
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1333
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1334
        // Tricky rounding tests:
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1335
        // Scale down a large number into subnormal range such that if
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1336
        // scalb is being implemented with multiple floating-point
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1337
        // multiplies, the value would round twice if the multiplies
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1338
        // were done in the wrong order.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1339
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1340
        double value = 0x1.000000000000bP-1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1341
        expected     = 0x0.2000000000001P-1022;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1342
        for(int i = 0; i < DoubleConsts.MAX_EXPONENT+2; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1343
            failures+=testScalbCase(value,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1344
                                    -1024-i,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1345
                                    expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1346
            value *=2.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1347
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1348
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1349
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1350
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1351
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1352
    /* ************************* ulp tests ******************************* */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1353
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1354
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1355
    /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1356
     * Test Math.ulp and StrictMath.ulp with +d and -d.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1357
     */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1358
    static int testUlpCase(float f, float expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1359
        float minus_f = -f;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1360
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1361
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1362
        failures+=Tests.test("Math.ulp(float)", f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1363
                             Math.ulp(f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1364
        failures+=Tests.test("Math.ulp(float)", minus_f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1365
                             Math.ulp(minus_f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1366
        failures+=Tests.test("StrictMath.ulp(float)", f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1367
                             StrictMath.ulp(f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1368
        failures+=Tests.test("StrictMath.ulp(float)", minus_f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1369
                             StrictMath.ulp(minus_f), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1370
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1371
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1372
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1373
    static int testUlpCase(double d, double expected) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1374
        double minus_d = -d;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1375
        int failures=0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1376
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1377
        failures+=Tests.test("Math.ulp(double)", d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1378
                             Math.ulp(d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1379
        failures+=Tests.test("Math.ulp(double)", minus_d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1380
                             Math.ulp(minus_d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1381
        failures+=Tests.test("StrictMath.ulp(double)", d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1382
                             StrictMath.ulp(d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1383
        failures+=Tests.test("StrictMath.ulp(double)", minus_d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1384
                             StrictMath.ulp(minus_d), expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1385
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1386
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1387
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1388
    public static int testFloatUlp() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1389
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1390
        float [] specialValues = {NaNf,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1391
                                  Float.POSITIVE_INFINITY,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1392
                                  +0.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1393
                                  +1.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1394
                                  +2.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1395
                                  +16.0f,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1396
                                  +Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1397
                                  +Float_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1398
                                  +FloatConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1399
                                  +Float.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1400
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1401
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1402
        float [] specialResults = {NaNf,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1403
                                   Float.POSITIVE_INFINITY,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1404
                                   Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1405
                                   powerOfTwoF(-23),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1406
                                   powerOfTwoF(-22),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1407
                                   powerOfTwoF(-19),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1408
                                   Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1409
                                   Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1410
                                   Float.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1411
                                   powerOfTwoF(104)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1412
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1413
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1414
        // Special value tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1415
        for(int i = 0; i < specialValues.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1416
            failures += testUlpCase(specialValues[i], specialResults[i]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1417
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1418
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1419
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1420
        // Normal exponent tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1421
        for(int i = FloatConsts.MIN_EXPONENT; i <= FloatConsts.MAX_EXPONENT; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1422
            float expected;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1423
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1424
            // Create power of two
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1425
            float po2 = powerOfTwoF(i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1426
            expected = FpUtils.scalb(1.0f, i - (FloatConsts.SIGNIFICAND_WIDTH-1));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1427
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1428
            failures += testUlpCase(po2, expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1429
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1430
            // Generate some random bit patterns for the significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1431
            for(int j = 0; j < 10; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1432
                int randSignif = rand.nextInt();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1433
                float randFloat;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1434
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1435
                randFloat = Float.intBitsToFloat( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1436
                                                 (Float.floatToIntBits(po2)&
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1437
                                                  (~FloatConsts.SIGNIF_BIT_MASK)) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1438
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1439
                                                 (randSignif &
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1440
                                                  FloatConsts.SIGNIF_BIT_MASK) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1441
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1442
                failures += testUlpCase(randFloat, expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1443
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1444
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1445
            if (i > FloatConsts.MIN_EXPONENT) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1446
                float po2minus = FpUtils.nextAfter(po2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1447
                                                   Float.NEGATIVE_INFINITY);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1448
                failures += testUlpCase(po2minus, expected/2.0f);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1449
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1450
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1451
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1452
        // Subnormal tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1453
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1454
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1455
         * Start with MIN_VALUE, left shift, test high value, low
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1456
         * values, and random in between.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1457
         *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1458
         * Use nextAfter to calculate, high value of previous binade,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1459
         * loop count i will indicate how many random bits, if any are
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1460
         * needed.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1461
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1462
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1463
        float top=Float.MIN_VALUE;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1464
        for( int i = 1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1465
            i < FloatConsts.SIGNIFICAND_WIDTH;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1466
            i++, top *= 2.0f) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1467
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1468
            failures += testUlpCase(top, Float.MIN_VALUE);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1469
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1470
            // Test largest value in next smaller binade
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1471
            if (i >= 3) {// (i == 1) would test 0.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1472
                         // (i == 2) would just retest MIN_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1473
                testUlpCase(FpUtils.nextAfter(top, 0.0f),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1474
                            Float.MIN_VALUE);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1475
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1476
                if( i >= 10) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1477
                    // create a bit mask with (i-1) 1's in the low order
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1478
                    // bits
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1479
                    int mask = ~((~0)<<(i-1));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1480
                    float randFloat = Float.intBitsToFloat( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1481
                                                 Float.floatToIntBits(top) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1482
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1483
                                                 (rand.nextInt() & mask ) ) ;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1484
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1485
                    failures += testUlpCase(randFloat, Float.MIN_VALUE);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1486
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1487
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1488
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1489
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1490
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1491
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1492
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1493
    public static int testDoubleUlp() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1494
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1495
        double [] specialValues = {NaNd,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1496
                                  Double.POSITIVE_INFINITY,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1497
                                  +0.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1498
                                  +1.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1499
                                  +2.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1500
                                  +16.0d,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1501
                                  +Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1502
                                  +Double_MAX_SUBNORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1503
                                  +DoubleConsts.MIN_NORMAL,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1504
                                  +Double.MAX_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1505
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1506
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1507
        double [] specialResults = {NaNf,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1508
                                   Double.POSITIVE_INFINITY,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1509
                                   Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1510
                                   powerOfTwoD(-52),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1511
                                   powerOfTwoD(-51),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1512
                                   powerOfTwoD(-48),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1513
                                   Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1514
                                   Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1515
                                   Double.MIN_VALUE,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1516
                                   powerOfTwoD(971)
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1517
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1518
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1519
        // Special value tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1520
        for(int i = 0; i < specialValues.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1521
            failures += testUlpCase(specialValues[i], specialResults[i]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1522
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1523
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1524
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1525
        // Normal exponent tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1526
        for(int i = DoubleConsts.MIN_EXPONENT; i <= DoubleConsts.MAX_EXPONENT; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1527
            double expected;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1528
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1529
            // Create power of two
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1530
            double po2 = powerOfTwoD(i);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1531
            expected = FpUtils.scalb(1.0, i - (DoubleConsts.SIGNIFICAND_WIDTH-1));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1532
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1533
            failures += testUlpCase(po2, expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1534
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1535
            // Generate some random bit patterns for the significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1536
            for(int j = 0; j < 10; j++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1537
                long randSignif = rand.nextLong();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1538
                double randDouble;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1539
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1540
                randDouble = Double.longBitsToDouble( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1541
                                                 (Double.doubleToLongBits(po2)&
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1542
                                                  (~DoubleConsts.SIGNIF_BIT_MASK)) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1543
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1544
                                                 (randSignif &
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1545
                                                  DoubleConsts.SIGNIF_BIT_MASK) );
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1546
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1547
                failures += testUlpCase(randDouble, expected);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1548
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1549
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1550
            if (i > DoubleConsts.MIN_EXPONENT) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1551
                double po2minus = FpUtils.nextAfter(po2,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1552
                                                    Double.NEGATIVE_INFINITY);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1553
                failures += testUlpCase(po2minus, expected/2.0f);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1554
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1555
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1556
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1557
        // Subnormal tests
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1558
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1559
        /*
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1560
         * Start with MIN_VALUE, left shift, test high value, low
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1561
         * values, and random in between.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1562
         *
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1563
         * Use nextAfter to calculate, high value of previous binade,
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1564
         * loop count i will indicate how many random bits, if any are
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1565
         * needed.
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1566
         */
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1567
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1568
        double top=Double.MIN_VALUE;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1569
        for( int i = 1;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1570
            i < DoubleConsts.SIGNIFICAND_WIDTH;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1571
            i++, top *= 2.0f) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1572
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1573
            failures += testUlpCase(top, Double.MIN_VALUE);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1574
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1575
            // Test largest value in next smaller binade
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1576
            if (i >= 3) {// (i == 1) would test 0.0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1577
                         // (i == 2) would just retest MIN_VALUE
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1578
                testUlpCase(FpUtils.nextAfter(top, 0.0f),
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1579
                            Double.MIN_VALUE);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1580
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1581
                if( i >= 10) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1582
                    // create a bit mask with (i-1) 1's in the low order
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1583
                    // bits
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1584
                    int mask = ~((~0)<<(i-1));
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1585
                    double randDouble = Double.longBitsToDouble( // Exponent
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1586
                                                 Double.doubleToLongBits(top) |
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1587
                                                 // Significand
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1588
                                                 (rand.nextLong() & mask ) ) ;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1589
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1590
                    failures += testUlpCase(randDouble, Double.MIN_VALUE);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1591
                }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1592
            }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1593
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1594
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1595
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1596
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1597
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1598
    public static int testFloatSignum() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1599
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1600
        float testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1601
            {NaNf,                      NaNf},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1602
            {-infinityF,                -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1603
            {-Float.MAX_VALUE,          -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1604
            {-FloatConsts.MIN_NORMAL,   -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1605
            {-1.0f,                     -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1606
            {-2.0f,                     -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1607
            {-Float_MAX_SUBNORMAL,      -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1608
            {-Float.MIN_VALUE,          -1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1609
            {-0.0f,                     -0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1610
            {+0.0f,                     +0.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1611
            {Float.MIN_VALUE,            1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1612
            {Float_MAX_SUBNORMALmm,      1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1613
            {Float_MAX_SUBNORMAL,        1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1614
            {FloatConsts.MIN_NORMAL,     1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1615
            {1.0f,                       1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1616
            {2.0f,                       1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1617
            {Float_MAX_VALUEmm,          1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1618
            {Float.MAX_VALUE,            1.0f},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1619
            {infinityF,                  1.0f}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1620
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1621
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1622
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1623
            failures+=Tests.test("Math.signum(float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1624
                                 testCases[i][0], Math.signum(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1625
            failures+=Tests.test("StrictMath.signum(float)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1626
                                 testCases[i][0], StrictMath.signum(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1627
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1628
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1629
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1630
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1631
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1632
    public static int testDoubleSignum() {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1633
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1634
        double testCases [][] = {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1635
            {NaNd,                      NaNd},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1636
            {-infinityD,                -1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1637
            {-Double.MAX_VALUE,         -1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1638
            {-DoubleConsts.MIN_NORMAL,  -1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1639
            {-1.0,                      -1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1640
            {-2.0,                      -1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1641
            {-Double_MAX_SUBNORMAL,     -1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1642
            {-Double.MIN_VALUE,         -1.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1643
            {-0.0d,                     -0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1644
            {+0.0d,                     +0.0d},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1645
            {Double.MIN_VALUE,           1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1646
            {Double_MAX_SUBNORMALmm,     1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1647
            {Double_MAX_SUBNORMAL,       1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1648
            {DoubleConsts.MIN_NORMAL,    1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1649
            {1.0,                        1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1650
            {2.0,                        1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1651
            {Double_MAX_VALUEmm,         1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1652
            {Double.MAX_VALUE,           1.0},
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1653
            {infinityD,                  1.0}
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1654
        };
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1655
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1656
        for(int i = 0; i < testCases.length; i++) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1657
            failures+=Tests.test("Math.signum(double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1658
                                 testCases[i][0], Math.signum(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1659
            failures+=Tests.test("StrictMath.signum(double)",
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1660
                                 testCases[i][0], StrictMath.signum(testCases[i][0]), testCases[i][1]);
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1661
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1662
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1663
        return failures;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1664
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1665
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1666
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1667
    public static void main(String argv[]) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1668
        int failures = 0;
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1669
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1670
        failures += testFloatGetExponent();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1671
        failures += testDoubleGetExponent();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1672
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1673
        failures += testFloatNextAfter();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1674
        failures += testDoubleNextAfter();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1675
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1676
        failures += testFloatNextUp();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1677
        failures += testDoubleNextUp();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1678
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1679
        failures += testFloatNextDown();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1680
        failures += testDoubleNextDown();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1681
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1682
        failures += testFloatBooleanMethods();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1683
        failures += testDoubleBooleanMethods();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1684
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1685
        failures += testFloatCopySign();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1686
        failures += testDoubleCopySign();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1687
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1688
        failures += testFloatScalb();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1689
        failures += testDoubleScalb();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1690
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1691
        failures += testFloatUlp();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1692
        failures += testDoubleUlp();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1693
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1694
        failures += testFloatSignum();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1695
        failures += testDoubleSignum();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1696
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1697
        if (failures > 0) {
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1698
            System.err.println("Testing the recommended functions incurred "
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1699
                               + failures + " failures.");
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1700
            throw new RuntimeException();
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1701
        }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1702
    }
39d505a353e8 6601457: Move wrapper class tests from closed to open
darcy
parents:
diff changeset
  1703
}