1cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath/*
2cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Licensed to the Apache Software Foundation (ASF) under one or more
3cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  contributor license agreements.  See the NOTICE file distributed with
4cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  this work for additional information regarding copyright ownership.
5cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  The ASF licenses this file to You under the Apache License, Version 2.0
6cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  (the "License"); you may not use this file except in compliance with
7cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  the License.  You may obtain a copy of the License at
8cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
9cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *     http://www.apache.org/licenses/LICENSE-2.0
10cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *
11cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  Unless required by applicable law or agreed to in writing, software
12cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  distributed under the License is distributed on an "AS IS" BASIS,
13cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  See the License for the specific language governing permissions and
15cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath *  limitations under the License.
16cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */
17cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
18ab762bb740405d0fefcccf4a0899a234f995be13Narayan Kamathpackage org.apache.harmony.tests.java.lang;
19cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
20cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamathpublic class MathTest extends junit.framework.TestCase {
21cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
22cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    double HYP = Math.sqrt(2.0);
23cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
24cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    double OPP = 1.0;
25cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
26cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    double ADJ = 1.0;
27cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
28cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /* Required to make previous preprocessor flags work - do not remove */
29cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    int unused = 0;
30cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
31cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
32cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#abs(double)
33cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
34cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_absD() {
35cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.abs(double)
36cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
37cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect double abs value",
38cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (Math.abs(-1908.8976) == 1908.8976));
39cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect double abs value",
40cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (Math.abs(1908.8976) == 1908.8976));
41cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
42cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
43cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
44cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#abs(float)
45cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
46cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_absF() {
47cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method float java.lang.Math.abs(float)
48cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float abs value",
49cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (Math.abs(-1908.8976f) == 1908.8976f));
50cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float abs value",
51cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (Math.abs(1908.8976f) == 1908.8976f));
52cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
53cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
54cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
55cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#abs(int)
56cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
57cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_absI() {
58cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.lang.Math.abs(int)
59cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect int abs value", (Math.abs(-1908897) == 1908897));
60cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect int abs value", (Math.abs(1908897) == 1908897));
61cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
62cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
63cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
64cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#abs(long)
65cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
66cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_absJ() {
67cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method long java.lang.Math.abs(long)
68cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect long abs value",
69cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (Math.abs(-19088976000089L) == 19088976000089L));
70cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect long abs value",
71cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (Math.abs(19088976000089L) == 19088976000089L));
72cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
73cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
74cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
75cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#acos(double)
76cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
77cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_acosD() {
78cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.acos(double)
79cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double r = Math.cos(Math.acos(ADJ / HYP));
80cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long lr = Double.doubleToLongBits(r);
81cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long t = Double.doubleToLongBits(ADJ / HYP);
82cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Returned incorrect arc cosine", lr == t || (lr + 1) == t
83cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                || (lr - 1) == t);
84cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
85cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
86cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
87cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#asin(double)
88cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
89cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_asinD() {
90cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.asin(double)
91cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double r = Math.sin(Math.asin(OPP / HYP));
92cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long lr = Double.doubleToLongBits(r);
93cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long t = Double.doubleToLongBits(OPP / HYP);
94cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Returned incorrect arc sine", lr == t || (lr + 1) == t
95cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                || (lr - 1) == t);
96cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
97cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
98cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
99cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#atan(double)
100cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
101cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_atanD() {
102cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.atan(double)
103cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double answer = Math.tan(Math.atan(1.0));
104cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Returned incorrect arc tangent: " + answer, answer <= 1.0
105cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                && answer >= 9.9999999999999983E-1);
106cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
107cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
108cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
109cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#atan2(double, double)
110cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
111cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_atan2DD() {
112cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.atan2(double, double)
113cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double answer = Math.atan(Math.tan(1.0));
114cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Returned incorrect arc tangent: " + answer, answer <= 1.0
115cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                && answer >= 9.9999999999999983E-1);
116cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
117cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
118cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
119cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#cbrt(double)
120cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
121cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_cbrt_D() {
122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        //Test for special situations
1238afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertTrue(Double.isNaN(Math.cbrt(Double.NaN)));
1248afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.POSITIVE_INFINITY, Math.cbrt(Double.POSITIVE_INFINITY), 0D);
1258afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.NEGATIVE_INFINITY, Math.cbrt(Double.NEGATIVE_INFINITY), 0D);
1268afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math.cbrt(0.0)));
1278afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.doubleToLongBits(+0.0), Double.doubleToLongBits(Math.cbrt(+0.0)));
1288afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.doubleToLongBits(-0.0), Double.doubleToLongBits(Math.cbrt(-0.0)));
1298afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes
1308afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(3.0, Math.cbrt(27.0), 0D);
1318afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(23.111993172558684, Math.cbrt(12345.6), Math.ulp(23.111993172558684));
1328afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(5.643803094122362E102, Math.cbrt(Double.MAX_VALUE), 0D);
1338afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(0.01, Math.cbrt(0.000001), 0D);
1348afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes
1358afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(-3.0, Math.cbrt(-27.0), 0D);
1368afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(-23.111993172558684, Math.cbrt(-12345.6), Math.ulp(-23.111993172558684));
1378afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(1.7031839360032603E-108, Math.cbrt(Double.MIN_VALUE), 0D);
1388afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(-0.01, Math.cbrt(-0.000001), 0D);
139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#ceil(double)
143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ceilD() {
145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.ceil(double)
146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect ceiling for double",
147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                79, Math.ceil(78.89), 0);
148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect ceiling for double",
149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -78, Math.ceil(-78.89), 0);
150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * cases for test_copySign_DD in MathTest/StrictMathTest
154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final double[] COPYSIGN_DD_CASES = new double[] {
156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.POSITIVE_INFINITY, Double.MAX_VALUE, 3.4E302, 2.3,
157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_NORMAL, Double.MIN_NORMAL / 2, Double.MIN_VALUE, +0.0,
158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            0.0, -0.0, -Double.MIN_VALUE, -Double.MIN_NORMAL / 2,
159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -Double.MIN_NORMAL, -4.5, -3.4E102, -Double.MAX_VALUE,
160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.NEGATIVE_INFINITY };
161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#copySign(double, double)}
164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_copySign_DD() {
168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < COPYSIGN_DD_CASES.length; i++) {
169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final double magnitude = COPYSIGN_DD_CASES[i];
170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final long absMagnitudeBits = Double.doubleToLongBits(Math
171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .abs(magnitude));
172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final long negMagnitudeBits = Double.doubleToLongBits(-Math
173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .abs(magnitude));
174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // cases for NaN
176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("If the sign is NaN, the result should be positive.",
177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    absMagnitudeBits, Double.doubleToLongBits(Math.copySign(
178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    magnitude, Double.NaN)));
179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("The result should be NaN.", Double.isNaN(Math.copySign(
180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Double.NaN, magnitude)));
181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int j = 0; j < COPYSIGN_DD_CASES.length; j++) {
183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final double sign = COPYSIGN_DD_CASES[j];
184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final long resultBits = Double.doubleToLongBits(Math.copySign(
185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        magnitude, sign));
186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (sign > 0 || Double.valueOf(+0.0).equals(sign)
188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        || Double.valueOf(0.0).equals(sign)) {
189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(
190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            "If the sign is positive, the result should be positive.",
191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            absMagnitudeBits, resultBits);
192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (sign < 0 || Double.valueOf(-0.0).equals(sign)) {
194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(
195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            "If the sign is negative, the result should be negative.",
196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            negMagnitudeBits, resultBits);
197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("The result should be NaN.", Double.isNaN(Math.copySign(
202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NaN, Double.NaN)));
203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.copySign((Double) null, 2.3);
206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.copySign(2.3, (Double) null);
212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.copySign((Double) null, (Double) null);
218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * cases for test_copySign_FF in MathTest/StrictMathTest
226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final float[] COPYSIGN_FF_CASES = new float[] {
228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.POSITIVE_INFINITY, Float.MAX_VALUE, 3.4E12f, 2.3f,
229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_NORMAL, Float.MIN_NORMAL / 2, Float.MIN_VALUE, +0.0f,
230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            0.0f, -0.0f, -Float.MIN_VALUE, -Float.MIN_NORMAL / 2,
231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -Float.MIN_NORMAL, -4.5f, -5.6442E21f, -Float.MAX_VALUE,
232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.NEGATIVE_INFINITY };
233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#copySign(float, float)}
236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_copySign_FF() {
240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < COPYSIGN_FF_CASES.length; i++) {
241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final float magnitude = COPYSIGN_FF_CASES[i];
242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int absMagnitudeBits = Float.floatToIntBits(Math
243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .abs(magnitude));
244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int negMagnitudeBits = Float.floatToIntBits(-Math
245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .abs(magnitude));
246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // cases for NaN
248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("If the sign is NaN, the result should be positive.",
249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    absMagnitudeBits, Float.floatToIntBits(Math.copySign(
250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    magnitude, Float.NaN)));
251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("The result should be NaN.", Float.isNaN(Math.copySign(
252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Float.NaN, magnitude)));
253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int j = 0; j < COPYSIGN_FF_CASES.length; j++) {
255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final float sign = COPYSIGN_FF_CASES[j];
256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final int resultBits = Float.floatToIntBits(Math.copySign(
257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        magnitude, sign));
258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (sign > 0 || Float.valueOf(+0.0f).equals(sign)
259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        || Float.valueOf(0.0f).equals(sign)) {
260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(
261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            "If the sign is positive, the result should be positive.",
262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            absMagnitudeBits, resultBits);
263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (sign < 0 || Float.valueOf(-0.0f).equals(sign)) {
265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(
266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            "If the sign is negative, the result should be negative.",
267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            negMagnitudeBits, resultBits);
268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("The result should be NaN.", Float.isNaN(Math.copySign(
273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.NaN, Float.NaN)));
274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.copySign((Float) null, 2.3f);
277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.copySign(2.3f, (Float) null);
283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.copySign((Float) null, (Float) null);
289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#cos(double)
297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_cosD() {
299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.cos(double)
300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect answer", 1.0, Math.cos(0), 0D);
301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect answer", 0.5403023058681398, Math.cos(1), 0D);
302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#cosh(double)
306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_cosh_D() {
308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special situations
309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.cosh(Double.NaN)));
310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.cosh(Double.POSITIVE_INFINITY), 0D);
312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.cosh(Double.NEGATIVE_INFINITY), 0D);
314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0", 1.0, Math.cosh(+0.0), 0D);
315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0", 1.0, Math.cosh(-0.0), 0D);
316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.cosh(1234.56), 0D);
319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.cosh(-1234.56), 0D);
321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0000000000005", 1.0000000000005, Math
322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .cosh(0.000001), 0D);
323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0000000000005", 1.0000000000005, Math
324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .cosh(-0.000001), 0D);
325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 5.212214351945598", 5.212214351945598, Math
326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .cosh(2.33482), 0D);
327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.cosh(Double.MAX_VALUE), 0D);
330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0", 1.0, Math.cosh(Double.MIN_VALUE), 0D);
331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#exp(double)
335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_expD() {
337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.exp(double)
338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect answer returned for simple power", Math.abs(Math
339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .exp(4D)
340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                - Math.E * Math.E * Math.E * Math.E) < 0.1D);
341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect answer returned for larger power", Math.log(Math
342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .abs(Math.exp(5.5D)) - 5.5D) < 10.0D);
343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#expm1(double)
347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_expm1_D() {
349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special cases
350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should return NaN", Double.isNaN(Math.expm1(Double.NaN)));
351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.expm1(Double.POSITIVE_INFINITY), 0D);
353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return -1.0", -1.0, Math
354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .expm1(Double.NEGATIVE_INFINITY), 0D);
355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math
356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .expm1(0.0)));
357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(+0.0), Double
358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.expm1(+0.0)));
359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(-0.0), Double
360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.expm1(-0.0)));
361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return -9.999950000166666E-6",
363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -9.999950000166666E-6, Math.expm1(-0.00001), 0D);
364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0145103074469635E60",
365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                1.0145103074469635E60, Math.expm1(138.16951162), 0D);
366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math
368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .expm1(123456789123456789123456789.4521584223), 0D);
369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.expm1(Double.MAX_VALUE), 0D);
371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return MIN_VALUE", Double.MIN_VALUE, Math
372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .expm1(Double.MIN_VALUE), 0D);
373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#floor(double)
377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_floorD() {
379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect floor for int", 42, Math.floor(42), 0);
380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect floor for -int", -2, Math.floor(-2), 0);
381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect floor for zero", 0d, Math.floor(0d), 0);
382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect floor for +double", 78, Math.floor(78.89), 0);
384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect floor for -double", -79, Math.floor(-78.89), 0);
385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("floor large +double", 3.7314645675925406E19, Math.floor(3.7314645675925406E19), 0);
386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("floor large -double", -8.173521839218E12, Math.floor(-8.173521839218E12), 0);
387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("floor small double", 0.0d, Math.floor(1.11895241315E-102), 0);
388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Compare toString representations here since -0.0 = +0.0, and
390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN != NaN and we need to distinguish
391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Floor failed for NaN",
392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.toString(Double.NaN), Double.toString(Math.floor(Double.NaN)));
393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Floor failed for +0.0",
394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.toString(+0.0d), Double.toString(Math.floor(+0.0d)));
395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Floor failed for -0.0",
396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.toString(-0.0d), Double.toString(Math.floor(-0.0d)));
397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Floor failed for +infinity",
398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.toString(Double.POSITIVE_INFINITY), Double.toString(Math.floor(Double.POSITIVE_INFINITY)));
399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Floor failed for -infinity",
400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.toString(Double.NEGATIVE_INFINITY), Double.toString(Math.floor(Double.NEGATIVE_INFINITY)));
401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * cases for test_getExponent_D in MathTest/StrictMathTest
405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final double GETEXPONENT_D_CASES[] = new double[] {
407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY,
408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MAX_VALUE, -Double.MAX_VALUE, 2.342E231, -2.342E231, 2800.0,
409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -2800.0, 5.323, -5.323, 1.323, -1.323, 0.623, -0.623, 0.323,
410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -0.323, Double.MIN_NORMAL * 24, -Double.MIN_NORMAL * 24,
411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_NORMAL, -Double.MIN_NORMAL, Double.MIN_NORMAL / 2,
412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -Double.MIN_NORMAL / 2, Double.MIN_VALUE, -Double.MIN_VALUE, +0.0,
413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            0.0, -0.0, Double.NaN };
414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * result for test_getExponent_D in MathTest/StrictMathTest
417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final int GETEXPONENT_D_RESULTS[] = new int[] {
419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MAX_EXPONENT + 1, Double.MAX_EXPONENT + 1,
420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MAX_EXPONENT, Double.MAX_EXPONENT, 768, 768, 11, 11, 2, 2,
421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            0, 0, -1, -1, -2, -2, -1018, -1018, Double.MIN_EXPONENT,
422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_EXPONENT, Double.MIN_EXPONENT - 1,
423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_EXPONENT - 1, Double.MIN_EXPONENT - 1,
424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_EXPONENT - 1, Double.MIN_EXPONENT - 1,
425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_EXPONENT - 1, Double.MIN_EXPONENT - 1,
426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MAX_EXPONENT + 1 };
427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#getExponent(double)}
430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getExponent_D() {
434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < GETEXPONENT_D_CASES.length; i++) {
435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final double number = GETEXPONENT_D_CASES[i];
436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int result = GETEXPONENT_D_RESULTS[i];
437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrong result of getExponent(double).", result, Math
438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .getExponent(number));
439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.getExponent((Double) null);
443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * cases for test_getExponent_F in MathTest/StrictMathTest
451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final float GETEXPONENT_F_CASES[] = new float[] {
453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY, Float.MAX_VALUE,
454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -Float.MAX_VALUE, 3.4256E23f, -3.4256E23f, 2800.0f, -2800.0f,
455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            5.323f, -5.323f, 1.323f, -1.323f, 0.623f, -0.623f, 0.323f, -0.323f,
456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_NORMAL * 24, -Float.MIN_NORMAL * 24, Float.MIN_NORMAL,
457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -Float.MIN_NORMAL, Float.MIN_NORMAL / 2, -Float.MIN_NORMAL / 2,
458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_VALUE, -Float.MIN_VALUE, +0.0f, 0.0f, -0.0f, Float.NaN, 1, Float.MIN_NORMAL * 1.5f };
459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * result for test_getExponent_F in MathTest/StrictMathTest
462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final int GETEXPONENT_F_RESULTS[] = new int[] {
464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MAX_EXPONENT + 1, Float.MAX_EXPONENT + 1, Float.MAX_EXPONENT,
465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MAX_EXPONENT, 78, 78, 11, 11, 2, 2, 0, 0, -1, -1, -2, -2,
466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -122, -122, Float.MIN_EXPONENT, Float.MIN_EXPONENT,
467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_EXPONENT - 1, Float.MIN_EXPONENT - 1,
468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_EXPONENT - 1, Float.MIN_EXPONENT - 1,
469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_EXPONENT - 1, Float.MIN_EXPONENT - 1,
470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Float.MIN_EXPONENT - 1, Float.MAX_EXPONENT + 1, 0, Float.MIN_EXPONENT };
471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#getExponent(float)}
474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_getExponent_F() {
478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < GETEXPONENT_F_CASES.length; i++) {
479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final float number = GETEXPONENT_F_CASES[i];
480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int result = GETEXPONENT_F_RESULTS[i];
481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Wrong result of getExponent(float).", result, Math
482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .getExponent(number));
483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.getExponent((Float) null);
486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#hypot(double, double)
494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_hypot_DD() {
496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special cases
497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.hypot(Double.POSITIVE_INFINITY,
499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                1.0), 0D);
500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.hypot(Double.NEGATIVE_INFINITY,
502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                123.324), 0D);
503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.hypot(-758.2587,
505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY), 0D);
506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.hypot(5687.21,
508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NEGATIVE_INFINITY), 0D);
509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.hypot(Double.POSITIVE_INFINITY,
511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NEGATIVE_INFINITY), 0D);
512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.hypot(Double.NEGATIVE_INFINITY,
514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY), 0D);
515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should be NaN", Double.isNaN(Math.hypot(Double.NaN,
516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                2342301.89843)));
517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should be NaN", Double.isNaN(Math.hypot(-345.2680,
518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NaN)));
519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 2396424.905416697", 2396424.905416697, Math
521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .hypot(12322.12, -2396393.2258), 0D);
522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 138.16958070558556", 138.16958070558556,
523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.hypot(-138.16951162, 0.13817035864), 0D);
524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.7976931348623157E308",
525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                1.7976931348623157E308, Math.hypot(Double.MAX_VALUE, 211370.35), 0D);
526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 5413.7185", 5413.7185, Math.hypot(
527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -5413.7185, Double.MIN_VALUE), 0D);
528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#IEEEremainder(double, double)
532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_IEEEremainderDD() {
534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.IEEEremainder(double, double)
535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect remainder returned",
536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                0.0, Math.IEEEremainder(1.0, 1.0), 0D);
537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect remainder returned", Math.IEEEremainder(1.32,
538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                89.765) >= 1.4705063220631647E-2
539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                || Math.IEEEremainder(1.32, 89.765) >= 1.4705063220631649E-2);
540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#log(double)
544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_logD() {
546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.log(double)
547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (double d = 10; d >= -10; d -= 0.5) {
548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            double answer = Math.log(Math.exp(d));
549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Answer does not equal expected answer for d = " + d
550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + " answer = " + answer, Math.abs(answer - d) <= Math
551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .abs(d * 0.00000001));
552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#log10(double)
557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_log10_D() {
560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special cases
561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.log10(Double.NaN)));
562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.log10(-2541.05745687234187532)));
563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.log10(-0.1)));
564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.log10(Double.POSITIVE_INFINITY));
565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.log10(0.0));
566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.log10(+0.0));
567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.log10(-0.0));
568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.0, Math.log10(1000.0));
570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(14.0, Math.log10(Math.pow(10, 14)));
571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.7389561269540406, Math.log10(5482.2158));
572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(14.661551142893833, Math.log10(458723662312872.125782332587));
573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-0.9083828622192334, Math.log10(0.12348583358871));
574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(308.25471555991675, Math.log10(Double.MAX_VALUE));
575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-323.3062153431158, Math.log10(Double.MIN_VALUE));
576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#log1p(double)
580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_log1p_D() {
582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special cases
583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should return NaN", Double.isNaN(Math.log1p(Double.NaN)));
584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should return NaN", Double.isNaN(Math.log1p(-32.0482175)));
585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return POSITIVE_INFINITY",
586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, Math.log1p(Double.POSITIVE_INFINITY), 0D);
587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math
588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .log1p(0.0)));
589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(+0.0), Double
590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.log1p(+0.0)));
591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(-0.0), Double
592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.log1p(-0.0)));
593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return -0.2941782295312541", -0.2941782295312541,
595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.log1p(-0.254856327), 0D);
596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 7.368050685564151", 7.368050685564151, Math
597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .log1p(1583.542), 0D);
598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 0.4633708685409921", 0.4633708685409921,
599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.log1p(0.5894227), 0D);
600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 709.782712893384", 709.782712893384, Math
601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .log1p(Double.MAX_VALUE), 0D);
602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return Double.MIN_VALUE", Double.MIN_VALUE, Math
603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .log1p(Double.MIN_VALUE), 0D);
604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
6062729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    public void test_maxDD_Math() {
6072729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        test_maxDD(true /* use Math */);
6082729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    }
6092729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath
6102729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    public void test_maxDD_Double() {
6112729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        test_maxDD(false /* use Math */);
6122729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    }
6132729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath
614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#max(double, double)
616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
6172729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    private static void test_maxDD(boolean useMath) {
618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.max(double, double)
6192729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        assertEquals("Incorrect double max value", 1908897.6000089,
6202729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                max(-1908897.6000089, 1908897.6000089, useMath), 0D);
621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect double max value",
6222729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                1908897.6000089, max(2.0, 1908897.6000089, useMath), 0D);
6232729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        assertEquals("Incorrect double max value", -2.0, max(-2.0, -1908897.6000089, useMath), 0D);
624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Compare toString representations here since -0.0 = +0.0, and
626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN != NaN and we need to distinguish
627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for NaN",
6282729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(Double.NaN), Double.toString(max(Double.NaN, 42.0d, useMath)));
629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for NaN",
6302729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(Double.NaN), Double.toString(max(42.0d, Double.NaN, useMath)));
631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for 0.0",
6322729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(+0.0d), Double.toString(max(+0.0d, -0.0d, useMath)));
633cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for 0.0",
6342729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(+0.0d), Double.toString(max(-0.0d, +0.0d, useMath)));
635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for -0.0d",
6362729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(-0.0d), Double.toString(max(-0.0d, -0.0d, useMath)));
637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for 0.0",
6382729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(+0.0d), Double.toString(max(+0.0d, +0.0d, useMath)));
639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#max(float, float)
643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_maxFF() {
645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method float java.lang.Math.max(float, float)
646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float max value", Math.max(-1908897.600f,
647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                1908897.600f) == 1908897.600f);
648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float max value",
649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.max(2.0f, 1908897.600f) == 1908897.600f);
650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float max value",
651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.max(-2.0f, -1908897.600f) == -2.0f);
652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Compare toString representations here since -0.0 = +0.0, and
654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN != NaN and we need to distinguish
655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for NaN",
656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(Float.NaN), Float.toString(Math.max(Float.NaN, 42.0f)));
657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for NaN",
658cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(Float.NaN), Float.toString(Math.max(42.0f, Float.NaN)));
659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for 0.0",
660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(+0.0f), Float.toString(Math.max(+0.0f, -0.0f)));
661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for 0.0",
662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(+0.0f), Float.toString(Math.max(-0.0f, +0.0f)));
663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for -0.0f",
664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(-0.0f), Float.toString(Math.max(-0.0f, -0.0f)));
665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Max failed for 0.0",
666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(+0.0f), Float.toString(Math.max(+0.0f, +0.0f)));
667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#max(int, int)
671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_maxII() {
673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.lang.Math.max(int, int)
674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect int max value",
675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                19088976, Math.max(-19088976, 19088976));
676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect int max value",
677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                19088976, Math.max(20, 19088976));
678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect int max value", -20, Math.max(-20, -19088976));
679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#max(long, long)
683cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
684cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_maxJJ() {
685cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method long java.lang.Math.max(long, long)
686cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect long max value", 19088976000089L, Math.max(-19088976000089L,
687cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                19088976000089L));
688cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect long max value",
689cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                19088976000089L, Math.max(20, 19088976000089L));
690cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect long max value",
691cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -20, Math.max(-20, -19088976000089L));
692cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
693cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
6942729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    public void test_minDD_Math() {
6952729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        test_minDD(true /* useMath */);
6962729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    }
6972729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath
6982729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    public void test_minDD_Double() {
6992729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        test_minDD(false /* useMath */);
7002729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    }
7012729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath
702cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
703cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#min(double, double)
704cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
7052729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    private static void test_minDD(boolean useMath) {
706cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.min(double, double)
7072729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        assertEquals("Incorrect double min value", -1908897.6000089,
7082729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                min(-1908897.6000089, 1908897.6000089, useMath), 0D);
709cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect double min value",
7102729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                2.0, min(2.0, 1908897.6000089, useMath), 0D);
7112729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        assertEquals("Incorrect double min value", -1908897.6000089,
7122729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                min(-2.0, -1908897.6000089, useMath), 0D);
713cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect double min value", 1.0d, Math.min(1.0d, 1.0d));
714cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
715cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Compare toString representations here since -0.0 = +0.0, and
716cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN != NaN and we need to distinguish
717cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for NaN",
7182729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(Double.NaN), Double.toString(min(Double.NaN, 42.0d, useMath)));
719cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for NaN",
7202729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(Double.NaN), Double.toString(min(42.0d, Double.NaN, useMath)));
721cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for -0.0",
7222729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(-0.0d), Double.toString(min(+0.0d, -0.0d, useMath)));
723cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for -0.0",
7242729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(-0.0d), Double.toString(min(-0.0d, +0.0d, useMath)));
725cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for -0.0d",
7262729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(-0.0d), Double.toString(min(-0.0d, -0.0d, useMath)));
727cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for 0.0",
7282729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath                Double.toString(+0.0d), Double.toString(min(+0.0d, +0.0d, useMath)));
7292729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    }
7302729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath
7312729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    private static double min(double a, double b, boolean useMath) {
7322729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        if (useMath) {
7332729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath            return Math.min(a, b);
7342729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        } else {
7352729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath            return Double.min(a, b);
7362729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        }
7372729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    }
7382729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath
7392729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath    private static double max(double a, double b, boolean useMath) {
7402729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        if (useMath) {
7412729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath            return Math.max(a, b);
7422729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        } else {
7432729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath            return Double.max(a, b);
7442729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath        }
745cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
746cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
747cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
748cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#min(float, float)
749cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
750cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_minFF() {
751cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method float java.lang.Math.min(float, float)
752cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float min value", Math.min(-1908897.600f,
753cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                1908897.600f) == -1908897.600f);
754cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float min value",
755cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.min(2.0f, 1908897.600f) == 2.0f);
756cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Incorrect float min value",
757cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.min(-2.0f, -1908897.600f) == -1908897.600f);
758cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect float min value", 1.0f, Math.min(1.0f, 1.0f));
759cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
760cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Compare toString representations here since -0.0 = +0.0, and
761cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN != NaN and we need to distinguish
762cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for NaN",
763cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(Float.NaN), Float.toString(Math.min(Float.NaN, 42.0f)));
764cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for NaN",
765cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(Float.NaN), Float.toString(Math.min(42.0f, Float.NaN)));
766cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for -0.0",
767cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(-0.0f), Float.toString(Math.min(+0.0f, -0.0f)));
768cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for -0.0",
769cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(-0.0f), Float.toString(Math.min(-0.0f, +0.0f)));
770cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for -0.0f",
771cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(-0.0f), Float.toString(Math.min(-0.0f, -0.0f)));
772cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Min failed for 0.0",
773cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.toString(+0.0f), Float.toString(Math.min(+0.0f, +0.0f)));
774cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
775cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
776cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
777cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#min(int, int)
778cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
779cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_minII() {
780cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.lang.Math.min(int, int)
781cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect int min value",
782cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -19088976, Math.min(-19088976, 19088976));
783cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect int min value", 20, Math.min(20, 19088976));
784cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect int min value",
785cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -19088976, Math.min(-20, -19088976));
786cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
787cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
788cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
789cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
790cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#min(long, long)
791cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
792cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_minJJ() {
793cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method long java.lang.Math.min(long, long)
794cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect long min value", -19088976000089L, Math.min(-19088976000089L,
795cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                19088976000089L));
796cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect long min value",
797cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                20, Math.min(20, 19088976000089L));
798cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect long min value",
799cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -19088976000089L, Math.min(-20, -19088976000089L));
800cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
801cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
802cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
803cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * start number cases for test_nextAfter_DD in MathTest/StrictMathTest
804cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * NEXTAFTER_DD_START_CASES[i][0] is the start number
805cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * NEXTAFTER_DD_START_CASES[i][1] is the nextUp of start number
806cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * NEXTAFTER_DD_START_CASES[i][2] is the nextDown of start number
807cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
808cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final double NEXTAFTER_DD_START_CASES[][] = new double[][] {
809cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { 3.4, 3.4000000000000004, 3.3999999999999995 },
810cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -3.4, -3.3999999999999995, -3.4000000000000004 },
811cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { 3.4233E109, 3.4233000000000005E109, 3.4232999999999996E109 },
812cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -3.4233E109, -3.4232999999999996E109, -3.4233000000000005E109 },
813cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { +0.0, Double.MIN_VALUE, -Double.MIN_VALUE },
814cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { 0.0, Double.MIN_VALUE, -Double.MIN_VALUE },
815cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -0.0, Double.MIN_VALUE, -Double.MIN_VALUE },
816cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Double.MIN_VALUE, 1.0E-323, +0.0 },
817cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -Double.MIN_VALUE, -0.0, -1.0E-323 },
818cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Double.MIN_NORMAL, 2.225073858507202E-308, 2.225073858507201E-308 },
819cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -Double.MIN_NORMAL, -2.225073858507201E-308,
820cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    -2.225073858507202E-308 },
821cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Double.MAX_VALUE, Double.POSITIVE_INFINITY,
822cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    1.7976931348623155E308 },
823cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -Double.MAX_VALUE, -1.7976931348623155E308,
824cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Double.NEGATIVE_INFINITY },
825cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY,
826cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Double.MAX_VALUE },
827cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Double.NEGATIVE_INFINITY, -Double.MAX_VALUE,
828cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Double.NEGATIVE_INFINITY } };
829cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
830cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
831cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * direction number cases for test_nextAfter_DD/test_nextAfter_FD in
832cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * MathTest/StrictMathTest
833cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
834cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final double NEXTAFTER_DD_FD_DIRECTION_CASES[] = new double[] {
835cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.POSITIVE_INFINITY, Double.MAX_VALUE, 8.8, 3.4, 1.4,
836cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.MIN_NORMAL, Double.MIN_NORMAL / 2, Double.MIN_VALUE, +0.0,
837cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            0.0, -0.0, -Double.MIN_VALUE, -Double.MIN_NORMAL / 2,
838cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            -Double.MIN_NORMAL, -1.4, -3.4, -8.8, -Double.MAX_VALUE,
839cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Double.NEGATIVE_INFINITY };
840cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
841cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
842cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#nextAfter(double, double)}
843cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
844cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
845cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
846cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_nextAfter_DD() {
847cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for most cases without exception
848cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_DD_START_CASES.length; i++) {
849cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final double start = NEXTAFTER_DD_START_CASES[i][0];
850cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final long nextUpBits = Double
851cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .doubleToLongBits(NEXTAFTER_DD_START_CASES[i][1]);
852cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final long nextDownBits = Double
853cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .doubleToLongBits(NEXTAFTER_DD_START_CASES[i][2]);
854cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
855cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int j = 0; j < NEXTAFTER_DD_FD_DIRECTION_CASES.length; j++) {
856cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final double direction = NEXTAFTER_DD_FD_DIRECTION_CASES[j];
857cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final long resultBits = Double.doubleToLongBits(Math.nextAfter(
858cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        start, direction));
859cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final long directionBits = Double.doubleToLongBits(direction);
860cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (direction > start) {
861cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be next up-number.",
862cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            nextUpBits, resultBits);
863cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } else if (direction < start) {
864cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be next down-number.",
865cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            nextDownBits, resultBits);
866cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } else {
867cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be direction.", directionBits,
868cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            resultBits);
869cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
870cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
871cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
872cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
873cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for cases with NaN
874cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_DD_START_CASES.length; i++) {
875cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("The result should be NaN.", Double.isNaN(Math
876cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .nextAfter(NEXTAFTER_DD_START_CASES[i][0], Double.NaN)));
877cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
878cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_DD_FD_DIRECTION_CASES.length; i++) {
879cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("The result should be NaN.", Double.isNaN(Math
880cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .nextAfter(Double.NaN, NEXTAFTER_DD_FD_DIRECTION_CASES[i])));
881cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
882cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("The result should be NaN.", Double.isNaN(Math.nextAfter(
883cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NaN, Double.NaN)));
884cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
885cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for exception
886cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
887cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextAfter((Double) null, 2.3);
888cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
889cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
890cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
891cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
892cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
893cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextAfter(2.3, (Double) null);
894cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
895cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
896cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
897cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
898cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
899cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextAfter((Double) null, (Double) null);
900cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
901cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
902cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
903cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
904cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
905cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
906cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
907cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * start number cases for test_nextAfter_FD in MathTest/StrictMathTest
908cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * NEXTAFTER_FD_START_CASES[i][0] is the start number
909cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * NEXTAFTER_FD_START_CASES[i][1] is the nextUp of start number
910cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * NEXTAFTER_FD_START_CASES[i][2] is the nextDown of start number
911cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
912cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    static final float NEXTAFTER_FD_START_CASES[][] = new float[][] {
913cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { 3.4f, 3.4000003f, 3.3999999f },
914cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -3.4f, -3.3999999f, -3.4000003f },
915cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { 3.4233E19f, 3.4233002E19f, 3.4232998E19f },
916cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -3.4233E19f, -3.4232998E19f, -3.4233002E19f },
917cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { +0.0f, Float.MIN_VALUE, -Float.MIN_VALUE },
918cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { 0.0f, Float.MIN_VALUE, -Float.MIN_VALUE },
919cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -0.0f, Float.MIN_VALUE, -Float.MIN_VALUE },
920cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Float.MIN_VALUE, 2.8E-45f, +0.0f },
921cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -Float.MIN_VALUE, -0.0f, -2.8E-45f },
922cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Float.MIN_NORMAL, 1.1754945E-38f, 1.1754942E-38f },
923cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -Float.MIN_NORMAL, -1.1754942E-38f, -1.1754945E-38f },
924cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Float.MAX_VALUE, Float.POSITIVE_INFINITY, 3.4028233E38f },
925cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { -Float.MAX_VALUE, -3.4028233E38f, Float.NEGATIVE_INFINITY },
926cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY, Float.MAX_VALUE },
927cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            { Float.NEGATIVE_INFINITY, -Float.MAX_VALUE,
928cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Float.NEGATIVE_INFINITY } };
929cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
930cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
931cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#nextAfter(float, double)}
932cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
933cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
934cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
935cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_nextAfter_FD() {
936cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for most cases without exception
937cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_FD_START_CASES.length; i++) {
938cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final float start = NEXTAFTER_FD_START_CASES[i][0];
939cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int nextUpBits = Float
940cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .floatToIntBits(NEXTAFTER_FD_START_CASES[i][1]);
941cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int nextDownBits = Float
942cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .floatToIntBits(NEXTAFTER_FD_START_CASES[i][2]);
943cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
944cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            for (int j = 0; j < NEXTAFTER_DD_FD_DIRECTION_CASES.length; j++) {
945cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final double direction = NEXTAFTER_DD_FD_DIRECTION_CASES[j];
946cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                final int resultBits = Float.floatToIntBits(Math.nextAfter(
947cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        start, direction));
948cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (direction > start) {
949cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be next up-number.",
950cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            nextUpBits, resultBits);
951cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } else if (direction < start) {
952cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be next down-number.",
953cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            nextDownBits, resultBits);
954cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                } else {
955cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    final int equivalentBits = Float.floatToIntBits(new Float(
956cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            direction));
957cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(
958cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            "Result should be a number equivalent to direction.",
959cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            equivalentBits, resultBits);
960cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
961cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
962cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
963cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
964cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for cases with NaN
965cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_FD_START_CASES.length; i++) {
966cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("The result should be NaN.", Float.isNaN(Math.nextAfter(
967cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    NEXTAFTER_FD_START_CASES[i][0], Float.NaN)));
968cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
969cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_DD_FD_DIRECTION_CASES.length; i++) {
970cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("The result should be NaN.", Float.isNaN(Math.nextAfter(
971cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Float.NaN, NEXTAFTER_DD_FD_DIRECTION_CASES[i])));
972cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
973cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("The result should be NaN.", Float.isNaN(Math.nextAfter(
974cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.NaN, Float.NaN)));
975cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
976cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for exception
977cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
978cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextAfter((Float) null, 2.3);
979cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
980cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
981cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
982cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
983cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
984cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextAfter(2.3, (Float) null);
985cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
986cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
987cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
988cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
989cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
990cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextAfter((Float) null, (Float) null);
991cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
992cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
993cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
994cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
995cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
996cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
997cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
998cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#nextUp(double)}
999cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
1000cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1001cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
1002cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_nextUp_D() {
1003cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // This method is semantically equivalent to nextAfter(d,
1004cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Double.POSITIVE_INFINITY),
1005cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // so we use the data of test_nextAfter_DD
1006cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_DD_START_CASES.length; i++) {
1007cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final double start = NEXTAFTER_DD_START_CASES[i][0];
1008cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final long nextUpBits = Double
1009cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .doubleToLongBits(NEXTAFTER_DD_START_CASES[i][1]);
1010cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final long resultBits = Double.doubleToLongBits(Math.nextUp(start));
1011cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be next up-number.", nextUpBits,
1012cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    resultBits);
1013cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1014cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1015cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for cases with NaN
1016cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("The result should be NaN.", Double.isNaN(Math
1017cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .nextUp(Double.NaN)));
1018cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1019cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for exception
1020cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1021cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextUp((Double) null);
1022cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1023cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1024cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1025cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1026cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1027cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1028cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1029cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#nextUp(float)}
1030cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
1031cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1032cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
1033cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_nextUp_F() {
1034cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // This method is semantically equivalent to nextAfter(f,
1035cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Float.POSITIVE_INFINITY),
1036cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // so we use the data of test_nextAfter_FD
1037cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < NEXTAFTER_FD_START_CASES.length; i++) {
1038cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final float start = NEXTAFTER_FD_START_CASES[i][0];
1039cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int nextUpBits = Float
1040cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .floatToIntBits(NEXTAFTER_FD_START_CASES[i][1]);
1041cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            final int resultBits = Float.floatToIntBits(Math.nextUp(start));
1042cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be next up-number.", nextUpBits,
1043cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    resultBits);
1044cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1045cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1046cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for cases with NaN
1047cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("The result should be NaN.", Float.isNaN(Math
1048cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .nextUp(Float.NaN)));
1049cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1050cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for exception
1051cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1052cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.nextUp((Float) null);
1053cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1054cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1055cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1056cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1057cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1058cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1059cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1060e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong     * {@link java.lang.Math#nextDown(double)}
1061e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong     * @since 1.8
1062e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong     */
1063e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    @SuppressWarnings("boxing")
1064e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    public void test_nextDown_D() {
1065e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // This method is semantically equivalent to nextAfter(d,
1066e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // Double.NEGATIVE_INFINITY),
1067e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // so we use the data of test_nextAfter_DD
1068e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        for (int i = 0; i < NEXTAFTER_DD_START_CASES.length; i++) {
1069e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            final double start = NEXTAFTER_DD_START_CASES[i][0];
1070e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            final long nextDownBits = Double
1071e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong                    .doubleToLongBits(NEXTAFTER_DD_START_CASES[i][2]);
1072e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            final long resultBits = Double.doubleToLongBits(Math.nextDown(start));
1073e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            assertEquals("Result should be next down-number.", nextDownBits,
1074e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong                    resultBits);
1075e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        }
1076e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong
1077e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // test for cases with NaN
1078e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        assertTrue("The result should be NaN.", Double.isNaN(Math
1079e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong                .nextDown(Double.NaN)));
1080e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong
1081e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // test for exception
1082e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        try {
1083e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            Math.nextDown((Double) null);
1084e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            fail("Should throw NullPointerException");
1085e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        } catch (NullPointerException e) {
1086e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            // Expected
1087e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        }
1088e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    }
1089e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong
1090e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    /**
1091e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong     * {@link java.lang.Math#nextDown(float)}
1092e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong     * @since 1.8
1093e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong     */
1094e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    @SuppressWarnings("boxing")
1095e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    public void test_nextDown_F() {
1096e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // This method is semantically equivalent to nextAfter(f,
1097e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // Float.NEGATIVE_INFINITY),
1098e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // so we use the data of test_nextAfter_FD
1099e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        for (int i = 0; i < NEXTAFTER_FD_START_CASES.length; i++) {
1100e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            final float start = NEXTAFTER_FD_START_CASES[i][0];
1101e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            final int nextDownBits = Float
1102e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong                    .floatToIntBits(NEXTAFTER_FD_START_CASES[i][2]);
1103e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            final int resultBits = Float.floatToIntBits(Math.nextDown(start));
1104e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            assertEquals("Result should be next down-number.", nextDownBits,
1105e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong                    resultBits);
1106e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        }
1107e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong
1108e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // test for cases with NaN
1109e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        assertTrue("The result should be NaN.", Float.isNaN(Math
1110e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong                .nextDown(Float.NaN)));
1111e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong
1112e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        // test for exception
1113e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        try {
1114e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            Math.nextDown((Float) null);
1115e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            fail("Should throw NullPointerException");
1116e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        } catch (NullPointerException e) {
1117e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong            // Expected
1118e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong        }
1119e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    }
1120e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong
1121e9d9ae3d5e57a60e20c2c01e3dceb3e51de8b9f4Yi Kong    /**
1122cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#pow(double, double)
1123cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1124cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_powDD() {
1125cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.pow(double, double)
1126cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double NZERO = longTodouble(doubleTolong(0.0) ^ 0x8000000000000000L);
1127cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p1 = 1.0;
1128cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p2 = 2.0;
1129cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p3 = 3.0;
1130cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p4 = 4.0;
1131cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p5 = 5.0;
1132cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p6 = 6.0;
1133cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p7 = 7.0;
1134cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p8 = 8.0;
1135cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p9 = 9.0;
1136cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p10 = 10.0;
1137cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p11 = 11.0;
1138cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p12 = 12.0;
1139cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p13 = 13.0;
1140cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p14 = 14.0;
1141cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p15 = 15.0;
1142cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double p16 = 16.0;
1143cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double[] values = { p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12,
1144cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                p13, p14, p15, p16 };
1145cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1146cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int x = 0; x < values.length; x++) {
1147cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            double dval = values[x];
1148cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            double nagateDval = negateDouble(dval);
1149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (nagateDval == Double.NaN) {
1150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                continue;
1151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // If the second argument is positive or negative zero, then the
1154cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // result is 1.0.
1155cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + dval
1156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ",-0.0)=+1.0", 1.0, Math.pow(dval, NZERO));
1157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + nagateDval
1158cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ",-0.0)=+1.0", 1.0, Math.pow(nagateDval, NZERO));
1159cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + dval
1160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ",+0.0)=+1.0", 1.0, Math.pow(dval, +0.0));
1161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + nagateDval
1162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ",+0.0)=+1.0", 1.0, Math.pow(nagateDval, +0.0));
1163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // If the second argument is 1.0, then the result is the same as the
1165cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // first argument.
1166cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + dval + "," + 1.0 + ")="
1167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + dval, dval, Math.pow(dval, 1.0));
1168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + nagateDval + "," + 1.0
1169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ")=" + nagateDval, nagateDval, Math.pow(nagateDval, 1.0));
1170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1171cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // If the second argument is NaN, then the result is NaN.
1172cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + dval + "," + Double.NaN
1173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ")=" + Double.NaN, Double.NaN, Math.pow(dval, Double.NaN));
1174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + nagateDval + ","
1175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + Double.NaN + ")=" + Double.NaN, Double.NaN, Math.pow(nagateDval,
1176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Double.NaN));
1177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (dval > 1) {
1179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // If the first argument is NaN and the second argument is
1180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // nonzero,
1181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // then the result is NaN.
1182cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + Double.NaN + ","
1183cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + dval + ")=" + Double.NaN, Double.NaN, Math.pow(Double.NaN, dval));
1184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + Double.NaN + ","
1185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + nagateDval + ")=" + Double.NaN, Double.NaN, Math.pow(Double.NaN,
1186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        nagateDval));
1187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                /*
1189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * If the first argument is positive zero and the second
1190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * argument is greater than zero, or the first argument is
1191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * positive infinity and the second argument is less than zero,
1192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * then the result is positive zero.
1193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 */
1194cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + 0.0 + "," + dval
1195cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + ")=" + 0.0, +0.0, Math.pow(0.0, dval));
1196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow("
1197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY + "," + nagateDval + ")="
1198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + 0.0, +0.0, Math.pow(Double.POSITIVE_INFINITY, nagateDval));
1199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                /*
1201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * If the first argument is positive zero and the second
1202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * argument is less than zero, or the first argument is positive
1203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * infinity and the second argument is greater than zero, then
1204cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * the result is positive infinity.
1205cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 */
1206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + 0.0 + ","
1207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + nagateDval + ")=" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY,
1208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        Math.pow(0.0, nagateDval));
1209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow("
1210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY + "," + dval + ")="
1211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow(
1212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        Double.POSITIVE_INFINITY, dval));
1213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // Not a finite odd integer
1215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (dval % 2 == 0) {
1216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    /*
1217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * If the first argument is negative zero and the second
1218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is greater than zero but not a finite odd
1219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * integer, or the first argument is negative infinity and
1220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * the second argument is less than zero but not a finite
1221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * odd integer, then the result is positive zero.
1222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     */
1223cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow(" + NZERO + ","
1224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + dval + ")=" + 0.0, +0.0, Math.pow(NZERO, dval));
1225cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow("
1226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + Double.NEGATIVE_INFINITY + "," + nagateDval
1227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + ")=" + 0.0, +0.0, Math.pow(Double.NEGATIVE_INFINITY,
1228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            nagateDval));
1229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    /*
1231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * If the first argument is negative zero and the second
1232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is less than zero but not a finite odd integer,
1233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * or the first argument is negative infinity and the second
1234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is greater than zero but not a finite odd
1235cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * integer, then the result is positive infinity.
1236cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     */
1237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow(" + NZERO + ","
1238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + nagateDval + ")=" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY,
1239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            Math.pow(NZERO, nagateDval));
1240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow("
1241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + Double.NEGATIVE_INFINITY + "," + dval + ")="
1242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow(
1243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            Double.NEGATIVE_INFINITY, dval));
1244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
1245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // finite odd integer
1247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                if (dval % 2 != 0) {
1248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    /*
1249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * If the first argument is negative zero and the second
1250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is a positive finite odd integer, or the first
1251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is negative infinity and the second argument is
1252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * a negative finite odd integer, then the result is
1253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * negative zero.
1254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     */
1255cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow(" + NZERO + ","
1256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + dval + ")=" + NZERO, NZERO, Math.pow(NZERO, dval));
1257cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow("
1258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + Double.NEGATIVE_INFINITY + "," + nagateDval
1259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + ")=" + NZERO, NZERO, Math.pow(Double.NEGATIVE_INFINITY,
1260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            nagateDval));
1261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    /*
1262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * If the first argument is negative zero and the second
1263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is a negative finite odd integer, or the first
1264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * argument is negative infinity and the second argument is
1265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * a positive finite odd integer then the result is negative
1266cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     * infinity.
1267cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                     */
1268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow(" + NZERO + ","
1269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + nagateDval + ")=" + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY,
1270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            Math.pow(NZERO, nagateDval));
1271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals("Result should be Math.pow("
1272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + Double.NEGATIVE_INFINITY + "," + dval + ")="
1273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Math.pow(
1274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            Double.NEGATIVE_INFINITY, dval));
1275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
1276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                /**
1278cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * 1. If the first argument is finite and less than zero if the
1279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * second argument is a finite even integer, the result is equal
1280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * to the result of raising the absolute value of the first
1281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * argument to the power of the second argument
1282cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 *
1283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * 2. if the second argument is a finite odd integer, the result is equal to the
1284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * negative of the result of raising the absolute value of the
1285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * first argument to the power of the second argument
1286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 *
1287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * 3. if the second argument is finite and not an integer, then the result
1288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * is NaN.
1289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 */
1290cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                for (int j = 1; j < values.length; j++) {
1291cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    double jval = values[j];
1292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    if (jval % 2.0 == 0.0) {
1293cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        assertEquals("" + nagateDval + " " + jval, Math.pow(
1294cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                                dval, jval), Math.pow(nagateDval, jval));
1295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    } else {
1296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        assertEquals("" + nagateDval + " " + jval, -1.0
1297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                                * Math.pow(dval, jval), Math.pow(nagateDval,
1298cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                                jval));
1299cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    }
1300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(Double.NaN, Math
1301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            .pow(nagateDval, jval / 0.5467));
1302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    assertEquals(Double.NaN, Math.pow(nagateDval, -1.0 * jval
1303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                            / 0.5467));
1304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                }
1305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // If the absolute value of the first argument equals 1 and the
1308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // second argument is infinite, then the result is NaN.
1309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (dval == 1) {
1310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + dval + ","
1311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math
1312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        .pow(dval, Double.POSITIVE_INFINITY));
1313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + dval + ","
1314cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.NEGATIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math
1315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        .pow(dval, Double.NEGATIVE_INFINITY));
1316cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1317cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + nagateDval + ","
1318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math
1319cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        .pow(nagateDval, Double.POSITIVE_INFINITY));
1320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + nagateDval + ","
1321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.NEGATIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math
1322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        .pow(nagateDval, Double.NEGATIVE_INFINITY));
1323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            if (dval > 1) {
1326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                /*
1327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * If the absolute value of the first argument is greater than 1
1328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * and the second argument is positive infinity, or the absolute
1329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * value of the first argument is less than 1 and the second
1330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * argument is negative infinity, then the result is positive
1331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * infinity.
1332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 */
1333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + dval + ","
1334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY + ")="
1335cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow(dval,
1336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        Double.POSITIVE_INFINITY));
1337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + nagateDval + ","
1339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.NEGATIVE_INFINITY + ")="
1340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow(-0.13456,
1341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        Double.NEGATIVE_INFINITY));
1342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                /*
1344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * If the absolute value of the first argument is greater than 1
1345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * and the second argument is negative infinity, or the absolute
1346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * value of the first argument is less than 1 and the second
1347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * argument is positive infinity, then the result is positive
1348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 * zero.
1349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                 */
1350cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + dval + ","
1351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.NEGATIVE_INFINITY + ")= +0.0", +0.0, Math.pow(dval,
1352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        Double.NEGATIVE_INFINITY));
1353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                assertEquals("Result should be Math.pow(" + nagateDval + ","
1354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        + Double.POSITIVE_INFINITY + ")= +0.0", +0.0, Math.pow(
1355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                        -0.13456, Double.POSITIVE_INFINITY));
1356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + 0.0 + "," + dval + ")="
1359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + 0.0, 0.0, Math.pow(0.0, dval));
1360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals("Result should be Math.pow(" + Double.NaN + "," + dval
1361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    + ")=" + Double.NaN, Double.NaN, Math.pow(Double.NaN, dval));
1362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("pow returned incorrect value",
1364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                (long) Math.pow(2, 8) == 256l);
1365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("pow returned incorrect value",
1366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.pow(2, -8) == 0.00390625d);
1367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect root returned1",
1368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                2, Math.sqrt(Math.pow(Math.sqrt(2), 4)), 0);
1369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.pow(-10.0, 3.093403029238847E15));
1371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.pow(10.0, 3.093403029238847E15));
1372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private double longTodouble(long longvalue) {
1375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return Double.longBitsToDouble(longvalue);
1376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private long doubleTolong(double doublevalue) {
1379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return Double.doubleToLongBits(doublevalue);
1380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    private double negateDouble(double doublevalue) {
1383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        return doublevalue * -1.0;
1384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#rint(double)
1388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_rintD() {
1390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.rint(double)
1391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to round properly - up to odd",
1392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                3.0, Math.rint(2.9), 0D);
1393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to round properly - NaN", Double.isNaN(Math
1394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .rint(Double.NaN)));
1395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Failed to round properly down  to even",
1396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                2.0, Math.rint(2.1), 0D);
1397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to round properly " + 2.5 + " to even", Math
1398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .rint(2.5) == 2.0);
1399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to round properly " + (+0.0d),
1400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.rint(+0.0d) == +0.0d);
1401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Failed to round properly " + (-0.0d),
1402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.rint(-0.0d) == -0.0d);
1403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#round(double)
1407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_roundD() {
1409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method long java.lang.Math.round(double)
1410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect rounding of a float", -91, Math.round(-90.89d));
1411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#round(float)
1415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_roundF() {
1417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method int java.lang.Math.round(float)
1418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect rounding of a float", -91, Math.round(-90.89f));
1419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#scalb(double, int)}
1423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
1424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
1426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_scalb_DI() {
1427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // result is normal
1428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(4.1422946304E7, Math.scalb(1.2345, 25));
1429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.679096698760986E-8, Math.scalb(1.2345, -25));
1430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.2345, Math.scalb(1.2345, 0));
1431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(7868514.304, Math.scalb(0.2345, 25));
1432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double normal = Math.scalb(0.2345, -25);
1434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(6.98864459991455E-9, normal);
1435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // precision kept
1436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(0.2345, Math.scalb(normal, 25));
1437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(0.2345, Math.scalb(0.2345, 0));
1439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-4.1422946304E7, Math.scalb(-1.2345, 25));
1440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-6.98864459991455E-9, Math.scalb(-0.2345, -25));
1441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(2.0, Math.scalb(Double.MIN_NORMAL / 2, 1024));
1442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(64.0, Math.scalb(Double.MIN_VALUE, 1080));
1443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(234, Math.getExponent(Math.scalb(1.0, 234)));
1444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.9999999999999996, Math.scalb(Double.MAX_VALUE,
1445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_EXPONENT));
1446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // result is near infinity
1448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double halfMax = Math.scalb(1.0, Double.MAX_EXPONENT);
1449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(8.98846567431158E307, halfMax);
1450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.MAX_VALUE, halfMax - Math.ulp(halfMax) + halfMax);
1451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, halfMax + halfMax);
1452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.7976931348623155E308, Math.scalb(1.0 - Math.ulp(1.0),
1453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MAX_EXPONENT + 1));
1454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(1.0 - Math.ulp(1.0),
1455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MAX_EXPONENT + 2));
1456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        halfMax = Math.scalb(-1.0, Double.MAX_EXPONENT);
1458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-8.98846567431158E307, halfMax);
1459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-Double.MAX_VALUE, halfMax + Math.ulp(halfMax) + halfMax);
1460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, halfMax + halfMax);
1461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(0.345, 1234));
1463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(44.345E102, 934));
1464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.scalb(-44.345E102, 934));
1465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(
1467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_NORMAL / 2, 4000));
1468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(Double.MIN_VALUE,
1469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                8000));
1470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(Double.MAX_VALUE, 1));
1471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(
1472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, 0));
1473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.POSITIVE_INFINITY, Math.scalb(
1474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.POSITIVE_INFINITY, -1));
1475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.scalb(
1476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NEGATIVE_INFINITY, -1));
1477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.NEGATIVE_INFINITY, Math.scalb(
1478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.NEGATIVE_INFINITY, Double.MIN_EXPONENT));
1479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // result is subnormal/zero
1481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long posZeroBits = Double.doubleToLongBits(+0.0);
1482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long negZeroBits = Double.doubleToLongBits(-0.0);
1483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(+0.0,
1484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Integer.MAX_VALUE)));
1485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math
1486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .scalb(+0.0, -123)));
1487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(+0.0, 0)));
1488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double
1489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.scalb(-0.0, 123)));
1490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(-0.0,
1491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Integer.MIN_VALUE)));
1492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.MIN_VALUE, Math.scalb(1.0, -1074));
1494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math
1495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .scalb(1.0, -1075)));
1496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(-1.0,
1497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -1075)));
1498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // precision lost
1500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Math.scalb(21.405, -1078), Math.scalb(21.405, -1079));
1501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.MIN_VALUE, Math.scalb(21.405, -1079));
1502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-Double.MIN_VALUE, Math.scalb(-21.405, -1079));
1503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(21.405,
1504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -1080)));
1505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(-21.405,
1506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -1080)));
1507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(
1508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_VALUE, -1)));
1509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(
1510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Double.MIN_VALUE, -1)));
1511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.MIN_VALUE, Math.scalb(Double.MIN_NORMAL, -52));
1512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(
1513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_NORMAL, -53)));
1514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(
1515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Double.MIN_NORMAL, -53)));
1516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.MIN_VALUE, Math.scalb(Double.MAX_VALUE, -2098));
1517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(
1518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MAX_VALUE, -2099)));
1519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(
1520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Double.MAX_VALUE, -2099)));
1521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.MIN_VALUE, Math.scalb(Double.MIN_NORMAL / 3, -51));
1522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(
1523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_NORMAL / 3, -52)));
1524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(
1525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Double.MIN_NORMAL / 3, -52)));
1526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        double subnormal = Math.scalb(Double.MIN_NORMAL / 3, -25);
1527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(2.2104123E-316, subnormal);
1528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // precision lost
1529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertFalse(Double.MIN_NORMAL / 3 == Math.scalb(subnormal, 25));
1530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN
1532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.scalb(Double.NaN, 1)));
1533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.scalb(Double.NaN, 0)));
1534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.scalb(Double.NaN, -120)));
1535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1283457024, Double.doubleToLongBits(Math.scalb(
1537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_VALUE * 153, 23)));
1538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-9223372035571318784L, Double.doubleToLongBits(Math.scalb(
1539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Double.MIN_VALUE * 153, 23)));
1540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(36908406321184768L, Double.doubleToLongBits(Math.scalb(
1541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Double.MIN_VALUE * 153, 52)));
1542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-9186463630533591040L, Double.doubleToLongBits(Math.scalb(
1543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Double.MIN_VALUE * 153, 52)));
1544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for exception
1546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.scalb((Double) null, (Integer) null);
1548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.scalb(1.0, (Integer) null);
1554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.scalb((Double) null, 1);
1560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long b1em1022 = 0x0010000000000000L; // bit representation of
1566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Double.MIN_NORMAL
1567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        long b1em1023 = 0x0008000000000000L; // bit representation of half of
1568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Double.MIN_NORMAL
1569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // assert exact identity
1570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(b1em1023, Double.doubleToLongBits(Math.scalb(Double
1571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .longBitsToDouble(b1em1022), -1)));
1572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#scalb(float, int)}
1576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
1577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
1579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_scalb_FI() {
1580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // result is normal
1581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(4.1422946304E7f, Math.scalb(1.2345f, 25));
1582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.679096698760986E-8f, Math.scalb(1.2345f, -25));
1583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.2345f, Math.scalb(1.2345f, 0));
1584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(7868514.304f, Math.scalb(0.2345f, 25));
1585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        float normal = Math.scalb(0.2345f, -25);
1587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(6.98864459991455E-9f, normal);
1588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // precision kept
1589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(0.2345f, Math.scalb(normal, 25));
1590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(0.2345f, Math.scalb(0.2345f, 0));
1592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-4.1422946304E7f, Math.scalb(-1.2345f, 25));
1593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-6.98864459991455E-9f, Math.scalb(-0.2345f, -25));
1594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(2.0f, Math.scalb(Float.MIN_NORMAL / 2, 128));
1595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(64.0f, Math.scalb(Float.MIN_VALUE, 155));
1596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(34, Math.getExponent(Math.scalb(1.0f, 34)));
1597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.9999998f, Math
1598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .scalb(Float.MAX_VALUE, Float.MIN_EXPONENT));
1599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // result is near infinity
1601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        float halfMax = Math.scalb(1.0f, Float.MAX_EXPONENT);
1602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.7014118E38f, halfMax);
1603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.MAX_VALUE, halfMax - Math.ulp(halfMax) + halfMax);
1604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, halfMax + halfMax);
1605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(3.4028233E38f, Math.scalb(1.0f - Math.ulp(1.0f),
1606cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MAX_EXPONENT + 1));
1607cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(1.0f - Math.ulp(1.0f),
1608cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MAX_EXPONENT + 2));
1609cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1610cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        halfMax = Math.scalb(-1.0f, Float.MAX_EXPONENT);
1611cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.7014118E38f, halfMax);
1612cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-Float.MAX_VALUE, halfMax + Math.ulp(halfMax) + halfMax);
1613cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.NEGATIVE_INFINITY, halfMax + halfMax);
1614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(0.345f, 1234));
1616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(44.345E10f, 934));
1617cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.NEGATIVE_INFINITY, Math.scalb(-44.345E10f, 934));
1618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1619cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(Float.MIN_NORMAL / 2,
1620cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                400));
1621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(Float.MIN_VALUE, 800));
1622cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(Float.MAX_VALUE, 1));
1623cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(
1624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.POSITIVE_INFINITY, 0));
1625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.POSITIVE_INFINITY, Math.scalb(
1626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.POSITIVE_INFINITY, -1));
1627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.NEGATIVE_INFINITY, Math.scalb(
1628cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.NEGATIVE_INFINITY, -1));
1629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.NEGATIVE_INFINITY, Math.scalb(
1630cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.NEGATIVE_INFINITY, Float.MIN_EXPONENT));
1631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1632cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // result is subnormal/zero
1633cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int posZeroBits = Float.floatToIntBits(+0.0f);
1634cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int negZeroBits = Float.floatToIntBits(-0.0f);
1635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(+0.0f,
1636cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Integer.MAX_VALUE)));
1637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(+0.0f, -123)));
1638cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(+0.0f, 0)));
1639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-0.0f, 123)));
1640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-0.0f,
1641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Integer.MIN_VALUE)));
1642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.MIN_VALUE, Math.scalb(1.0f, -149));
1644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(1.0f, -150)));
1645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-1.0f, -150)));
1646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // precision lost
1648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Math.scalb(21.405f, -154), Math.scalb(21.405f, -153));
1649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.MIN_VALUE, Math.scalb(21.405f, -154));
1650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-Float.MIN_VALUE, Math.scalb(-21.405f, -154));
1651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math
1652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .scalb(21.405f, -155)));
1653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-21.405f,
1654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -155)));
1655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(
1656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MIN_VALUE, -1)));
1657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(
1658cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Float.MIN_VALUE, -1)));
1659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.MIN_VALUE, Math.scalb(Float.MIN_NORMAL, -23));
1660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(
1661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MIN_NORMAL, -24)));
1662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(
1663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Float.MIN_NORMAL, -24)));
1664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.MIN_VALUE, Math.scalb(Float.MAX_VALUE, -277));
1665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(
1666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MAX_VALUE, -278)));
1667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(
1668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Float.MAX_VALUE, -278)));
1669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.MIN_VALUE, Math.scalb(Float.MIN_NORMAL / 3, -22));
1670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(
1671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MIN_NORMAL / 3, -23)));
1672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(
1673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Float.MIN_NORMAL / 3, -23)));
1674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        float subnormal = Math.scalb(Float.MIN_NORMAL / 3, -11);
1675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.913E-42f, subnormal);
1676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // precision lost
1677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertFalse(Float.MIN_NORMAL / 3 == Math.scalb(subnormal, 11));
1678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(68747264, Float.floatToIntBits(Math.scalb(
1680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MIN_VALUE * 153, 23)));
1681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-2078736384, Float.floatToIntBits(Math.scalb(
1682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Float.MIN_VALUE * 153, 23)));
1683cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1684cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(4896, Float.floatToIntBits(Math.scalb(
1685cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Float.MIN_VALUE * 153, 5)));
1686cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-2147478752, Float.floatToIntBits(Math.scalb(
1687cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                -Float.MIN_VALUE * 153, 5)));
1688cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1689cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // NaN
1690cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Float.isNaN(Math.scalb(Float.NaN, 1)));
1691cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Float.isNaN(Math.scalb(Float.NaN, 0)));
1692cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Float.isNaN(Math.scalb(Float.NaN, -120)));
1693cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1694cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // test for exception
1695cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1696cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.scalb((Float) null, (Integer) null);
1697cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1698cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1699cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1700cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1701cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1702cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.scalb(1.0f, (Integer) null);
1703cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1704cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1705cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1706cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1707cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        try {
1708cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Math.scalb((Float) null, 1);
1709cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            fail("Should throw NullPointerException");
1710cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        } catch (NullPointerException e) {
1711cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            // Expected
1712cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1713cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1714cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int b1em126 = 0x00800000; // bit representation of Float.MIN_NORMAL
1715cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        int b1em127 = 0x00400000; // bit representation of half
1716cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Float.MIN_NORMAL
1717cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // assert exact identity
1718cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(b1em127, Float.floatToIntBits(Math.scalb(Float
1719cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .intBitsToFloat(b1em126), -1)));
1720cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1721cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1722cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1723cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#signum(double)
1724cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1725cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_signum_D() {
1726cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.signum(Double.NaN)));
1727cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Double.isNaN(Math.signum(Double.NaN)));
1728cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math
1729cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .signum(0.0)));
1730cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(+0.0), Double
1731cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.signum(+0.0)));
1732cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(-0.0), Double
1733cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.signum(-0.0)));
1734cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1735cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0, Math.signum(253681.2187962), 0D);
1736cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0, Math.signum(-125874693.56), 0D);
1737cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0, Math.signum(1.2587E-308), 0D);
1738cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0, Math.signum(-1.2587E-308), 0D);
1739cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1740cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0, Math.signum(Double.MAX_VALUE), 0D);
1741cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0, Math.signum(Double.MIN_VALUE), 0D);
1742cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0, Math.signum(-Double.MAX_VALUE), 0D);
1743cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0, Math.signum(-Double.MIN_VALUE), 0D);
1744cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0, Math.signum(Double.POSITIVE_INFINITY), 0D);
1745cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0, Math.signum(Double.NEGATIVE_INFINITY), 0D);
1746cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1747cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1748cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1749cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#signum(float)
1750cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1751cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_signum_F() {
1752cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue(Float.isNaN(Math.signum(Float.NaN)));
1753cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.floatToIntBits(0.0f), Float
1754cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .floatToIntBits(Math.signum(0.0f)));
1755cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.floatToIntBits(+0.0f), Float
1756cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .floatToIntBits(Math.signum(+0.0f)));
1757cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Float.floatToIntBits(-0.0f), Float
1758cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .floatToIntBits(Math.signum(-0.0f)));
1759cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1760cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0f, Math.signum(253681.2187962f), 0f);
1761cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0f, Math.signum(-125874693.56f), 0f);
1762cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0f, Math.signum(1.2587E-11f), 0f);
1763cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0f, Math.signum(-1.2587E-11f), 0f);
1764cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1765cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0f, Math.signum(Float.MAX_VALUE), 0f);
1766cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0f, Math.signum(Float.MIN_VALUE), 0f);
1767cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0f, Math.signum(-Float.MAX_VALUE), 0f);
1768cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0f, Math.signum(-Float.MIN_VALUE), 0f);
1769cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(1.0f, Math.signum(Float.POSITIVE_INFINITY), 0f);
1770cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(-1.0f, Math.signum(Float.NEGATIVE_INFINITY), 0f);
1771cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1772cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1773cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1774cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#sin(double)
1775cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1776cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_sinD() {
1777cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.sin(double)
1778cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect answer", 0.0, Math.sin(0), 0D);
1779cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect answer", 0.8414709848078965, Math.sin(1), 0D);
1780cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1781cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1782cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1783cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#sinh(double)
1784cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1785cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_sinh_D() {
1786cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special situations
17878afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertTrue(Double.isNaN(Math.sinh(Double.NaN)));
17888afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.POSITIVE_INFINITY, Math.sinh(Double.POSITIVE_INFINITY), 0D);
17898afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.NEGATIVE_INFINITY, Math.sinh(Double.NEGATIVE_INFINITY), 0D);
17908afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math.sinh(0.0)));
17918afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.doubleToLongBits(+0.0), Double.doubleToLongBits(Math.sinh(+0.0)));
17928afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.doubleToLongBits(-0.0), Double.doubleToLongBits(Math.sinh(-0.0)));
17938afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes
17948afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.POSITIVE_INFINITY, Math.sinh(1234.56), 0D);
17958afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.NEGATIVE_INFINITY, Math.sinh(-1234.56), 0D);
17968afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(1.0000000000001666E-6, Math.sinh(0.000001), 0D);
17978afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(-1.0000000000001666E-6, Math.sinh(-0.000001), 0D);
17988afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(5.115386441963859, Math.sinh(2.33482), Math.ulp(5.115386441963859));
17998afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(Double.POSITIVE_INFINITY, Math.sinh(Double.MAX_VALUE), 0D);
18008afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes        assertEquals(4.9E-324, Math.sinh(Double.MIN_VALUE), 0D);
1801cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1802cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1803cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1804cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#sqrt(double)
1805cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1806cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_sqrtD() {
1807cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.sqrt(double)
1808cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect root returned2", 7, Math.sqrt(49), 0);
1809cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1810cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1811cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1812cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#tan(double)
1813cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1814cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_tanD() {
1815cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for method double java.lang.Math.tan(double)
1816cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect answer", 0.0, Math.tan(0), 0D);
1817cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Incorrect answer", 1.5574077246549023, Math.tan(1), 0D);
1818cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1819cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1820cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1821cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1822cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#tanh(double)
1823cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1824cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_tanh_D() {
1825cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special situations
1826cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should return NaN", Double.isNaN(Math.tanh(Double.NaN)));
1827cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return +1.0", +1.0, Math
1828cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .tanh(Double.POSITIVE_INFINITY), 0D);
1829cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return -1.0", -1.0, Math
1830cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .tanh(Double.NEGATIVE_INFINITY), 0D);
1831cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math
1832cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .tanh(0.0)));
1833cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(+0.0), Double
1834cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.tanh(+0.0)));
1835cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals(Double.doubleToLongBits(-0.0), Double
1836cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .doubleToLongBits(Math.tanh(-0.0)));
1837cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1838cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0", 1.0, Math.tanh(1234.56), 0D);
1839cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return -1.0", -1.0, Math.tanh(-1234.56), 0D);
1840cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 9.999999999996666E-7",
1841cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                9.999999999996666E-7, Math.tanh(0.000001), 0D);
1842cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 0.981422884124941", 0.981422884124941, Math
1843cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .tanh(2.33482), 0D);
1844cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 1.0", 1.0, Math.tanh(Double.MAX_VALUE), 0D);
1845cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Should return 4.9E-324", 4.9E-324, Math
1846cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .tanh(Double.MIN_VALUE), 0D);
1847cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1848cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1849cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1850cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#random()
1851cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1852cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_random() {
1853cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // There isn't a place for these tests so just stick them here
1854cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrong value E",
1855cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                4613303445314885481L, Double.doubleToLongBits(Math.E));
1856cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Wrong value PI",
1857cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                4614256656552045848L, Double.doubleToLongBits(Math.PI));
1858cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1859cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 500; i >= 0; i--) {
1860cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            double d = Math.random();
1861cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Generated number is out of range: " + d, d >= 0.0
1862cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    && d < 1.0);
1863cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1864cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1865cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1866cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1867cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#toRadians(double)
1868cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1869cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toRadiansD() {
1870cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (double d = 500; d >= 0; d -= 1.0) {
1871cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            double converted = Math.toDegrees(Math.toRadians(d));
1872cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Converted number not equal to original. d = " + d,
1873cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    converted >= d * 0.99999999 && converted <= d * 1.00000001);
1874cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1875cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1876cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1877cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1878cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#toDegrees(double)
1879cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1880cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_toDegreesD() {
1881cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (double d = 500; d >= 0; d -= 1.0) {
1882cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            double converted = Math.toRadians(Math.toDegrees(d));
1883cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertTrue("Converted number not equal to original. d = " + d,
1884cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    converted >= d * 0.99999999 && converted <= d * 1.00000001);
1885cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1886cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1887cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1888cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1889cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#ulp(double)
1890cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1891cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
1892cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ulp_D() {
1893cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special cases
1894cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should return NaN", Double.isNaN(Math.ulp(Double.NaN)));
1895cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, Math
1896cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Double.POSITIVE_INFINITY), 0D);
1897cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, Math
1898cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Double.NEGATIVE_INFINITY), 0D);
1899cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.MIN_VALUE, Math
1900cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(0.0), 0D);
1901cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.MIN_VALUE, Math
1902cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(+0.0), 0D);
1903cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.MIN_VALUE, Math
1904cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-0.0), 0D);
1905cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Math.pow(2, 971), Math
1906cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Double.MAX_VALUE), 0D);
1907cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Math.pow(2, 971), Math
1908cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-Double.MAX_VALUE), 0D);
1909cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1910cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.MIN_VALUE, Math
1911cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Double.MIN_VALUE), 0D);
1912cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Double.MIN_VALUE, Math
1913cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-Double.MIN_VALUE), 0D);
1914cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1915cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 2.220446049250313E-16, Math
1916cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(1.0), 0D);
1917cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 2.220446049250313E-16, Math
1918cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-1.0), 0D);
1919cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 2.2737367544323206E-13, Math
1920cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(1153.0), 0D);
1921cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1922cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1923cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1924cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * java.lang.Math#ulp(float)
1925cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1926cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    @SuppressWarnings("boxing")
1927cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_ulp_f() {
1928cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        // Test for special cases
1929cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertTrue("Should return NaN", Float.isNaN(Math.ulp(Float.NaN)));
1930cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Float.POSITIVE_INFINITY, Math
1931cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Float.POSITIVE_INFINITY), 0f);
1932cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Float.POSITIVE_INFINITY, Math
1933cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Float.NEGATIVE_INFINITY), 0f);
1934cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Float.MIN_VALUE, Math
1935cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(0.0f), 0f);
1936cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Float.MIN_VALUE, Math
1937cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(+0.0f), 0f);
1938cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", Float.MIN_VALUE, Math
1939cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-0.0f), 0f);
1940cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 2.028241E31f, Math
1941cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Float.MAX_VALUE), 0f);
1942cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 2.028241E31f, Math
1943cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-Float.MAX_VALUE), 0f);
1944cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1945cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 1.4E-45f, Math
1946cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(Float.MIN_VALUE), 0f);
1947cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 1.4E-45f, Math
1948cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(-Float.MIN_VALUE), 0f);
1949cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1950cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 1.1920929E-7f, Math.ulp(1.0f),
1951cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                0f);
1952cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 1.1920929E-7f,
1953cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                Math.ulp(-1.0f), 0f);
1954cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 1.2207031E-4f, Math
1955cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(1153.0f), 0f);
1956cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        assertEquals("Returned incorrect value", 5.6E-45f, Math
1957cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                .ulp(9.403954E-38f), 0f);
1958cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
1959cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1960cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
1961cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#shiftIntBits(int, int)}
1962cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
1963cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
1964cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_shiftIntBits_II() {
1965cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class Tuple {
1966cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int result;
1967cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1968cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int value;
1969cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1970cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int factor;
1971cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1972cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Tuple(int result, int value, int factor) {
1973cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                this.result = result;
1974cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                this.value = value;
1975cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                this.factor = factor;
1976cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
1977cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
1978cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final Tuple[] TUPLES = new Tuple[] {
1979cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // sub-normal to sub-normal
1980cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000000, 0x00000001, -1),
1981cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to even
1982cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000002, 0x00000003, -1),
1983cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to even
1984cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000001, 0x00000005, -3),
1985cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to infinity
1986cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000002, 0x0000000d, -3),
1987cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to infinity
1988cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
1989cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // normal to sub-normal
1990cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000002, 0x01a00000, -24),
1991cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to even
1992cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000004, 0x01e00000, -24),
1993cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to even
1994cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000003, 0x01c80000, -24),
1995cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to infinity
1996cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000004, 0x01e80000, -24),
1997cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // round to infinity
1998cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
1999cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < TUPLES.length; ++i) {
2000cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Tuple tuple = TUPLES[i];
2001cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals(tuple.result, Float.floatToIntBits(Math.scalb(Float
2002cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .intBitsToFloat(tuple.value), tuple.factor)));
2003cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals(tuple.result, Float.floatToIntBits(-Math.scalb(-Float
2004cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    .intBitsToFloat(tuple.value), tuple.factor)));
2005cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
2006cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
2007cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
2008cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    /**
2009cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * {@link java.lang.Math#shiftLongBits(long, long)}
2010cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * <p/>
2011cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * Round result to nearest value on precision lost.
2012cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     * @since 1.6
2013cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath     */
2014cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    public void test_shiftLongBits_LL() {
2015cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        class Tuple {
2016cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public long result;
2017cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
2018cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public long value;
2019cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
2020cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public int factor;
2021cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
2022cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            public Tuple(long result, long value, int factor) {
2023cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                this.result = result;
2024cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                this.value = value;
2025cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                this.factor = factor;
2026cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            }
2027cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
2028cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        final Tuple[] TUPLES = new Tuple[] {
2029cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // sub-normal to sub-normal
2030cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000000L, 0x00000001L, -1),
2031cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                //round to even
2032cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000002L, 0x00000003L, -1),
2033cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                //round to even
2034cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000001L, 0x00000005L, -3),
2035cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                //round to infinity
2036cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x00000002L, 0x0000000dL, -3),
2037cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                //round to infinity
2038cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath
2039cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                // normal to sub-normal
2040cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x0000000000000002L, 0x0034000000000000L, -53), // round to even
2041cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x0000000000000004L, 0x003c000000000000L, -53), // round to even
2042cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x0000000000000003L, 0x0035000000000000L, -53), // round to infinity
2043cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                new Tuple(0x0000000000000004L, 0x003d000000000000L, -53), // round to infinity
2044cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        };
2045cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        for (int i = 0; i < TUPLES.length; ++i) {
2046cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            Tuple tuple = TUPLES[i];
2047cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals(tuple.result, Double.doubleToLongBits(Math.scalb(
2048cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    Double.longBitsToDouble(tuple.value), tuple.factor)));
2049cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath            assertEquals(tuple.result, Double.doubleToLongBits(-Math.scalb(
2050cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath                    -Double.longBitsToDouble(tuple.value), tuple.factor)));
2051cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath        }
2052cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath    }
2053cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath}
2054