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]; 11480239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe double negateDval = negateDouble(dval); 1149cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1150cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // If the second argument is positive or negative zero, then the 1151cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is 1.0. 1152cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval 1153cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ",-0.0)=+1.0", 1.0, Math.pow(dval, NZERO)); 11540239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval 11550239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + ",-0.0)=+1.0", 1.0, Math.pow(negateDval, NZERO)); 1156cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval 1157cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ",+0.0)=+1.0", 1.0, Math.pow(dval, +0.0)); 11580239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval 11590239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + ",+0.0)=+1.0", 1.0, Math.pow(negateDval, +0.0)); 1160cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1161cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // If the second argument is 1.0, then the result is the same as the 1162cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // first argument. 1163cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval + "," + 1.0 + ")=" 1164cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + dval, dval, Math.pow(dval, 1.0)); 11650239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval + "," + 1.0 11660239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + ")=" + negateDval, negateDval, Math.pow(negateDval, 1.0)); 1167cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1168cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // If the second argument is NaN, then the result is NaN. 1169cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval + "," + Double.NaN 1170cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")=" + Double.NaN, Double.NaN, Math.pow(dval, Double.NaN)); 11710239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval + "," 11720239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + Double.NaN + ")=" + Double.NaN, Double.NaN, Math.pow(negateDval, 1173cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NaN)); 1174cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1175cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (dval > 1) { 1176cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // If the first argument is NaN and the second argument is 1177cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // nonzero, 1178cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // then the result is NaN. 1179cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + Double.NaN + "," 1180cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + dval + ")=" + Double.NaN, Double.NaN, Math.pow(Double.NaN, dval)); 1181cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + Double.NaN + "," 11820239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + negateDval + ")=" + Double.NaN, Double.NaN, Math.pow(Double.NaN, 11830239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe negateDval)); 1184cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1185cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1186cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the first argument is positive zero and the second 1187cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is greater than zero, or the first argument is 1188cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * positive infinity and the second argument is less than zero, 1189cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * then the result is positive zero. 1190cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1191cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + 0.0 + "," + dval 1192cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")=" + 0.0, +0.0, Math.pow(0.0, dval)); 1193cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" 11940239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + Double.POSITIVE_INFINITY + "," + negateDval + ")=" 11950239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + 0.0, +0.0, Math.pow(Double.POSITIVE_INFINITY, negateDval)); 1196cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1197cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1198cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the first argument is positive zero and the second 1199cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is less than zero, or the first argument is positive 1200cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * infinity and the second argument is greater than zero, then 1201cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the result is positive infinity. 1202cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1203cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + 0.0 + "," 12040239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + negateDval + ")=" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 12050239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe Math.pow(0.0, negateDval)); 1206cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" 1207cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY + "," + dval + ")=" 1208cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow( 1209cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.POSITIVE_INFINITY, dval)); 1210cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1211cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Not a finite odd integer 1212cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (dval % 2 == 0) { 1213cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1214cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the first argument is negative zero and the second 1215cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is greater than zero but not a finite odd 1216cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * integer, or the first argument is negative infinity and 1217cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * the second argument is less than zero but not a finite 1218cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * odd integer, then the result is positive zero. 1219cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1220cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + NZERO + "," 1221cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + dval + ")=" + 0.0, +0.0, Math.pow(NZERO, dval)); 1222cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" 12230239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + Double.NEGATIVE_INFINITY + "," + negateDval 1224cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")=" + 0.0, +0.0, Math.pow(Double.NEGATIVE_INFINITY, 12250239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe negateDval)); 1226cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1227cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1228cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the first argument is negative zero and the second 1229cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is less than zero but not a finite odd integer, 1230cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * or the first argument is negative infinity and the second 1231cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is greater than zero but not a finite odd 1232cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * integer, then the result is positive infinity. 1233cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1234cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + NZERO + "," 12350239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + negateDval + ")=" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, 12360239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe Math.pow(NZERO, negateDval)); 1237cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" 1238cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY + "," + dval + ")=" 1239cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow( 1240cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NEGATIVE_INFINITY, dval)); 1241cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1242cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1243cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // finite odd integer 1244cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (dval % 2 != 0) { 1245cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1246cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the first argument is negative zero and the second 1247cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is a positive finite odd integer, or the first 1248cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is negative infinity and the second argument is 1249cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * a negative finite odd integer, then the result is 1250cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * negative zero. 1251cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1252cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + NZERO + "," 1253cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + dval + ")=" + NZERO, NZERO, Math.pow(NZERO, dval)); 1254cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" 12550239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + Double.NEGATIVE_INFINITY + "," + negateDval 1256cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")=" + NZERO, NZERO, Math.pow(Double.NEGATIVE_INFINITY, 12570239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe negateDval)); 1258cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1259cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the first argument is negative zero and the second 1260cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is a negative finite odd integer, or the first 1261cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is negative infinity and the second argument is 1262cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * a positive finite odd integer then the result is negative 1263cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * infinity. 1264cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1265cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + NZERO + "," 12660239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe + negateDval + ")=" + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, 12670239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe Math.pow(NZERO, negateDval)); 1268cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" 1269cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY + "," + dval + ")=" 1270cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY, Math.pow( 1271cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NEGATIVE_INFINITY, dval)); 1272cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1273cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1274cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1275cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 1. If the first argument is finite and less than zero if the 1276cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * second argument is a finite even integer, the result is equal 1277cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * to the result of raising the absolute value of the first 12780239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe * argument to the power of the second argument 1279cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 1280cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 2. if the second argument is a finite odd integer, the result is equal to the 1281cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * negative of the result of raising the absolute value of the 12820239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe * first argument to the power of the second argument 1283cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 1284cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * 3. if the second argument is finite and not an integer, then the result 1285cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * is NaN. 1286cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1287cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int j = 1; j < values.length; j++) { 1288cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double jval = values[j]; 1289cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (jval % 2.0 == 0.0) { 12900239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("" + negateDval + " " + jval, Math.pow( 12910239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe dval, jval), Math.pow(negateDval, jval)); 1292cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } else { 12930239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("" + negateDval + " " + jval, -1.0 12940239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe * Math.pow(dval, jval), Math.pow(negateDval, 1295cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath jval)); 1296cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1297cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.NaN, Math 12980239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe .pow(negateDval, jval / 0.5467)); 12990239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals(Double.NaN, Math.pow(negateDval, -1.0 * jval 1300cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath / 0.5467)); 1301cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1302cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1303cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1304cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // If the absolute value of the first argument equals 1 and the 1305cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // second argument is infinite, then the result is NaN. 1306cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (dval == 1) { 1307cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval + "," 1308cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math 1309cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .pow(dval, Double.POSITIVE_INFINITY)); 1310cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval + "," 1311cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math 1312cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .pow(dval, Double.NEGATIVE_INFINITY)); 1313cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 13140239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval + "," 1315cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math 13160239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe .pow(negateDval, Double.POSITIVE_INFINITY)); 13170239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval + "," 1318cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY + ")=" + Double.NaN, Double.NaN, Math 13190239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe .pow(negateDval, Double.NEGATIVE_INFINITY)); 1320cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1321cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1322cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath if (dval > 1) { 1323cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1324cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the absolute value of the first argument is greater than 1 1325cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * and the second argument is positive infinity, or the absolute 1326cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * value of the first argument is less than 1 and the second 1327cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is negative infinity, then the result is positive 1328cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * infinity. 1329cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1330cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval + "," 1331cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY + ")=" 1332cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow(dval, 1333cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.POSITIVE_INFINITY)); 1334cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 13350239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval + "," 1336cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY + ")=" 1337cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY, Math.pow(-0.13456, 1338cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NEGATIVE_INFINITY)); 1339cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1340cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /* 1341cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * If the absolute value of the first argument is greater than 1 1342cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * and the second argument is negative infinity, or the absolute 1343cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * value of the first argument is less than 1 and the second 1344cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * argument is positive infinity, then the result is positive 1345cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * zero. 1346cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1347cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + dval + "," 1348cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.NEGATIVE_INFINITY + ")= +0.0", +0.0, Math.pow(dval, 1349cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NEGATIVE_INFINITY)); 13500239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe assertEquals("Result should be Math.pow(" + negateDval + "," 1351cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + Double.POSITIVE_INFINITY + ")= +0.0", +0.0, Math.pow( 1352cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -0.13456, Double.POSITIVE_INFINITY)); 1353cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1354cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1355cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + 0.0 + "," + dval + ")=" 1356cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + 0.0, 0.0, Math.pow(0.0, dval)); 1357cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Result should be Math.pow(" + Double.NaN + "," + dval 1358cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath + ")=" + Double.NaN, Double.NaN, Math.pow(Double.NaN, dval)); 1359cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1360cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("pow returned incorrect value", 1361cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath (long) Math.pow(2, 8) == 256l); 1362cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("pow returned incorrect value", 1363cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.pow(2, -8) == 0.00390625d); 1364cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect root returned1", 1365cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2, Math.sqrt(Math.pow(Math.sqrt(2), 4)), 0); 1366cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1367cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.NEGATIVE_INFINITY, Math.pow(-10.0, 3.093403029238847E15)); 1368cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.pow(10.0, 3.093403029238847E15)); 1369cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1370cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1371cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private double longTodouble(long longvalue) { 1372cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return Double.longBitsToDouble(longvalue); 1373cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1374cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1375cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private long doubleTolong(double doublevalue) { 1376cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return Double.doubleToLongBits(doublevalue); 1377cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1378cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1379cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath private double negateDouble(double doublevalue) { 1380cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath return doublevalue * -1.0; 1381cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1382cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1383cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1384cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#rint(double) 1385cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1386cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_rintD() { 1387cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method double java.lang.Math.rint(double) 1388cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Failed to round properly - up to odd", 1389cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 3.0, Math.rint(2.9), 0D); 1390cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to round properly - NaN", Double.isNaN(Math 1391cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .rint(Double.NaN))); 1392cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Failed to round properly down to even", 1393cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2.0, Math.rint(2.1), 0D); 1394cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to round properly " + 2.5 + " to even", Math 1395cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .rint(2.5) == 2.0); 1396cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to round properly " + (+0.0d), 1397cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.rint(+0.0d) == +0.0d); 1398cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Failed to round properly " + (-0.0d), 1399cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.rint(-0.0d) == -0.0d); 1400cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1401cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1402cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1403cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#round(double) 1404cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1405cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_roundD() { 1406cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method long java.lang.Math.round(double) 1407cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect rounding of a float", -91, Math.round(-90.89d)); 1408cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1409cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1410cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1411cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#round(float) 1412cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1413cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_roundF() { 1414cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method int java.lang.Math.round(float) 1415cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect rounding of a float", -91, Math.round(-90.89f)); 1416cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1417cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1418cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1419cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * {@link java.lang.Math#scalb(double, int)} 1420cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 1421cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1422cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @SuppressWarnings("boxing") 1423cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_scalb_DI() { 1424cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is normal 1425cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(4.1422946304E7, Math.scalb(1.2345, 25)); 1426cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3.679096698760986E-8, Math.scalb(1.2345, -25)); 1427cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.2345, Math.scalb(1.2345, 0)); 1428cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(7868514.304, Math.scalb(0.2345, 25)); 1429cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1430cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double normal = Math.scalb(0.2345, -25); 1431cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(6.98864459991455E-9, normal); 1432cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // precision kept 1433cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0.2345, Math.scalb(normal, 25)); 1434cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1435cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0.2345, Math.scalb(0.2345, 0)); 1436cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-4.1422946304E7, Math.scalb(-1.2345, 25)); 1437cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-6.98864459991455E-9, Math.scalb(-0.2345, -25)); 1438cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(2.0, Math.scalb(Double.MIN_NORMAL / 2, 1024)); 1439cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(64.0, Math.scalb(Double.MIN_VALUE, 1080)); 1440cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(234, Math.getExponent(Math.scalb(1.0, 234))); 1441cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3.9999999999999996, Math.scalb(Double.MAX_VALUE, 1442cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_EXPONENT)); 1443cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1444cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is near infinity 1445cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double halfMax = Math.scalb(1.0, Double.MAX_EXPONENT); 1446cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(8.98846567431158E307, halfMax); 1447cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.MAX_VALUE, halfMax - Math.ulp(halfMax) + halfMax); 1448cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, halfMax + halfMax); 1449cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.7976931348623155E308, Math.scalb(1.0 - Math.ulp(1.0), 1450cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MAX_EXPONENT + 1)); 1451cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb(1.0 - Math.ulp(1.0), 1452cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MAX_EXPONENT + 2)); 1453cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1454cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath halfMax = Math.scalb(-1.0, Double.MAX_EXPONENT); 1455cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-8.98846567431158E307, halfMax); 1456cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-Double.MAX_VALUE, halfMax + Math.ulp(halfMax) + halfMax); 1457cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.NEGATIVE_INFINITY, halfMax + halfMax); 1458cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1459cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb(0.345, 1234)); 1460cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb(44.345E102, 934)); 1461cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.NEGATIVE_INFINITY, Math.scalb(-44.345E102, 934)); 1462cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1463cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb( 1464cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_NORMAL / 2, 4000)); 1465cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb(Double.MIN_VALUE, 1466cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 8000)); 1467cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb(Double.MAX_VALUE, 1)); 1468cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb( 1469cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.POSITIVE_INFINITY, 0)); 1470cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.POSITIVE_INFINITY, Math.scalb( 1471cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.POSITIVE_INFINITY, -1)); 1472cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.NEGATIVE_INFINITY, Math.scalb( 1473cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NEGATIVE_INFINITY, -1)); 1474cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.NEGATIVE_INFINITY, Math.scalb( 1475cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.NEGATIVE_INFINITY, Double.MIN_EXPONENT)); 1476cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1477cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is subnormal/zero 1478cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long posZeroBits = Double.doubleToLongBits(+0.0); 1479cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long negZeroBits = Double.doubleToLongBits(-0.0); 1480cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(+0.0, 1481cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Integer.MAX_VALUE))); 1482cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math 1483cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .scalb(+0.0, -123))); 1484cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(+0.0, 0))); 1485cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double 1486cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .doubleToLongBits(Math.scalb(-0.0, 123))); 1487cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(-0.0, 1488cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Integer.MIN_VALUE))); 1489cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1490cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.MIN_VALUE, Math.scalb(1.0, -1074)); 1491cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math 1492cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .scalb(1.0, -1075))); 1493cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(-1.0, 1494cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -1075))); 1495cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1496cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // precision lost 1497cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Math.scalb(21.405, -1078), Math.scalb(21.405, -1079)); 1498cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.MIN_VALUE, Math.scalb(21.405, -1079)); 1499cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-Double.MIN_VALUE, Math.scalb(-21.405, -1079)); 1500cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb(21.405, 1501cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -1080))); 1502cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb(-21.405, 1503cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -1080))); 1504cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb( 1505cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_VALUE, -1))); 1506cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb( 1507cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.MIN_VALUE, -1))); 1508cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.MIN_VALUE, Math.scalb(Double.MIN_NORMAL, -52)); 1509cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb( 1510cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_NORMAL, -53))); 1511cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb( 1512cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.MIN_NORMAL, -53))); 1513cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.MIN_VALUE, Math.scalb(Double.MAX_VALUE, -2098)); 1514cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb( 1515cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MAX_VALUE, -2099))); 1516cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb( 1517cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.MAX_VALUE, -2099))); 1518cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.MIN_VALUE, Math.scalb(Double.MIN_NORMAL / 3, -51)); 1519cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Double.doubleToLongBits(Math.scalb( 1520cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_NORMAL / 3, -52))); 1521cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Double.doubleToLongBits(Math.scalb( 1522cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.MIN_NORMAL / 3, -52))); 1523cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double subnormal = Math.scalb(Double.MIN_NORMAL / 3, -25); 1524cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(2.2104123E-316, subnormal); 1525cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // precision lost 1526cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(Double.MIN_NORMAL / 3 == Math.scalb(subnormal, 25)); 1527cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1528cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // NaN 1529cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Double.isNaN(Math.scalb(Double.NaN, 1))); 1530cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Double.isNaN(Math.scalb(Double.NaN, 0))); 1531cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Double.isNaN(Math.scalb(Double.NaN, -120))); 1532cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1533cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1283457024, Double.doubleToLongBits(Math.scalb( 1534cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_VALUE * 153, 23))); 1535cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-9223372035571318784L, Double.doubleToLongBits(Math.scalb( 1536cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.MIN_VALUE * 153, 23))); 1537cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(36908406321184768L, Double.doubleToLongBits(Math.scalb( 1538cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.MIN_VALUE * 153, 52))); 1539cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-9186463630533591040L, Double.doubleToLongBits(Math.scalb( 1540cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.MIN_VALUE * 153, 52))); 1541cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1542cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // test for exception 1543cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1544cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.scalb((Double) null, (Integer) null); 1545cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 1546cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 1547cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 1548cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1549cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1550cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.scalb(1.0, (Integer) null); 1551cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 1552cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 1553cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 1554cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1555cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1556cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.scalb((Double) null, 1); 1557cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 1558cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 1559cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 1560cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1561cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1562cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long b1em1022 = 0x0010000000000000L; // bit representation of 1563cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Double.MIN_NORMAL 1564cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath long b1em1023 = 0x0008000000000000L; // bit representation of half of 1565cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Double.MIN_NORMAL 1566cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // assert exact identity 1567cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(b1em1023, Double.doubleToLongBits(Math.scalb(Double 1568cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .longBitsToDouble(b1em1022), -1))); 1569cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1570cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1571cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1572cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * {@link java.lang.Math#scalb(float, int)} 1573cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 1574cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1575cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @SuppressWarnings("boxing") 1576cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_scalb_FI() { 1577cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is normal 1578cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(4.1422946304E7f, Math.scalb(1.2345f, 25)); 1579cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3.679096698760986E-8f, Math.scalb(1.2345f, -25)); 1580cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.2345f, Math.scalb(1.2345f, 0)); 1581cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(7868514.304f, Math.scalb(0.2345f, 25)); 1582cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1583cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath float normal = Math.scalb(0.2345f, -25); 1584cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(6.98864459991455E-9f, normal); 1585cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // precision kept 1586cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0.2345f, Math.scalb(normal, 25)); 1587cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1588cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(0.2345f, Math.scalb(0.2345f, 0)); 1589cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-4.1422946304E7f, Math.scalb(-1.2345f, 25)); 1590cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-6.98864459991455E-9f, Math.scalb(-0.2345f, -25)); 1591cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(2.0f, Math.scalb(Float.MIN_NORMAL / 2, 128)); 1592cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(64.0f, Math.scalb(Float.MIN_VALUE, 155)); 1593cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(34, Math.getExponent(Math.scalb(1.0f, 34))); 1594cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3.9999998f, Math 1595cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .scalb(Float.MAX_VALUE, Float.MIN_EXPONENT)); 1596cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1597cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is near infinity 1598cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath float halfMax = Math.scalb(1.0f, Float.MAX_EXPONENT); 1599cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.7014118E38f, halfMax); 1600cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.MAX_VALUE, halfMax - Math.ulp(halfMax) + halfMax); 1601cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, halfMax + halfMax); 1602cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(3.4028233E38f, Math.scalb(1.0f - Math.ulp(1.0f), 1603cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MAX_EXPONENT + 1)); 1604cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb(1.0f - Math.ulp(1.0f), 1605cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MAX_EXPONENT + 2)); 1606cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1607cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath halfMax = Math.scalb(-1.0f, Float.MAX_EXPONENT); 1608cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.7014118E38f, halfMax); 1609cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-Float.MAX_VALUE, halfMax + Math.ulp(halfMax) + halfMax); 1610cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.NEGATIVE_INFINITY, halfMax + halfMax); 1611cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1612cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb(0.345f, 1234)); 1613cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb(44.345E10f, 934)); 1614cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.NEGATIVE_INFINITY, Math.scalb(-44.345E10f, 934)); 1615cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1616cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb(Float.MIN_NORMAL / 2, 1617cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 400)); 1618cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb(Float.MIN_VALUE, 800)); 1619cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb(Float.MAX_VALUE, 1)); 1620cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb( 1621cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.POSITIVE_INFINITY, 0)); 1622cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.POSITIVE_INFINITY, Math.scalb( 1623cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.POSITIVE_INFINITY, -1)); 1624cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.NEGATIVE_INFINITY, Math.scalb( 1625cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.NEGATIVE_INFINITY, -1)); 1626cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.NEGATIVE_INFINITY, Math.scalb( 1627cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.NEGATIVE_INFINITY, Float.MIN_EXPONENT)); 1628cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1629cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // result is subnormal/zero 1630cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int posZeroBits = Float.floatToIntBits(+0.0f); 1631cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int negZeroBits = Float.floatToIntBits(-0.0f); 1632cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(+0.0f, 1633cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Integer.MAX_VALUE))); 1634cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(+0.0f, -123))); 1635cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(+0.0f, 0))); 1636cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-0.0f, 123))); 1637cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-0.0f, 1638cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Integer.MIN_VALUE))); 1639cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1640cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.MIN_VALUE, Math.scalb(1.0f, -149)); 1641cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb(1.0f, -150))); 1642cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-1.0f, -150))); 1643cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1644cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // precision lost 1645cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Math.scalb(21.405f, -154), Math.scalb(21.405f, -153)); 1646cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.MIN_VALUE, Math.scalb(21.405f, -154)); 1647cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-Float.MIN_VALUE, Math.scalb(-21.405f, -154)); 1648cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math 1649cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .scalb(21.405f, -155))); 1650cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb(-21.405f, 1651cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -155))); 1652cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb( 1653cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MIN_VALUE, -1))); 1654cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb( 1655cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Float.MIN_VALUE, -1))); 1656cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.MIN_VALUE, Math.scalb(Float.MIN_NORMAL, -23)); 1657cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb( 1658cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MIN_NORMAL, -24))); 1659cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb( 1660cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Float.MIN_NORMAL, -24))); 1661cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.MIN_VALUE, Math.scalb(Float.MAX_VALUE, -277)); 1662cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb( 1663cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MAX_VALUE, -278))); 1664cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb( 1665cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Float.MAX_VALUE, -278))); 1666cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.MIN_VALUE, Math.scalb(Float.MIN_NORMAL / 3, -22)); 1667cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(posZeroBits, Float.floatToIntBits(Math.scalb( 1668cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MIN_NORMAL / 3, -23))); 1669cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(negZeroBits, Float.floatToIntBits(Math.scalb( 1670cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Float.MIN_NORMAL / 3, -23))); 1671cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath float subnormal = Math.scalb(Float.MIN_NORMAL / 3, -11); 1672cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.913E-42f, subnormal); 1673cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // precision lost 1674cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertFalse(Float.MIN_NORMAL / 3 == Math.scalb(subnormal, 11)); 1675cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1676cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(68747264, Float.floatToIntBits(Math.scalb( 1677cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MIN_VALUE * 153, 23))); 1678cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-2078736384, Float.floatToIntBits(Math.scalb( 1679cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Float.MIN_VALUE * 153, 23))); 1680cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1681cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(4896, Float.floatToIntBits(Math.scalb( 1682cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Float.MIN_VALUE * 153, 5))); 1683cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-2147478752, Float.floatToIntBits(Math.scalb( 1684cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Float.MIN_VALUE * 153, 5))); 1685cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1686cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // NaN 1687cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Float.isNaN(Math.scalb(Float.NaN, 1))); 1688cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Float.isNaN(Math.scalb(Float.NaN, 0))); 1689cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Float.isNaN(Math.scalb(Float.NaN, -120))); 1690cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1691cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // test for exception 1692cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1693cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.scalb((Float) null, (Integer) null); 1694cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 1695cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 1696cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 1697cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1698cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1699cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.scalb(1.0f, (Integer) null); 1700cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 1701cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 1702cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 1703cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1704cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath try { 1705cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.scalb((Float) null, 1); 1706cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath fail("Should throw NullPointerException"); 1707cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } catch (NullPointerException e) { 1708cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Expected 1709cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1710cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1711cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int b1em126 = 0x00800000; // bit representation of Float.MIN_NORMAL 1712cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath int b1em127 = 0x00400000; // bit representation of half 1713cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Float.MIN_NORMAL 1714cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // assert exact identity 1715cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(b1em127, Float.floatToIntBits(Math.scalb(Float 1716cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .intBitsToFloat(b1em126), -1))); 1717cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1718cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1719cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1720cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#signum(double) 1721cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1722cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_signum_D() { 1723cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Double.isNaN(Math.signum(Double.NaN))); 1724cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Double.isNaN(Math.signum(Double.NaN))); 1725cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math 1726cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .signum(0.0))); 1727cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.doubleToLongBits(+0.0), Double 1728cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .doubleToLongBits(Math.signum(+0.0))); 1729cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.doubleToLongBits(-0.0), Double 1730cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .doubleToLongBits(Math.signum(-0.0))); 1731cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1732cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0, Math.signum(253681.2187962), 0D); 1733cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0, Math.signum(-125874693.56), 0D); 1734cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0, Math.signum(1.2587E-308), 0D); 1735cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0, Math.signum(-1.2587E-308), 0D); 1736cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1737cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0, Math.signum(Double.MAX_VALUE), 0D); 1738cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0, Math.signum(Double.MIN_VALUE), 0D); 1739cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0, Math.signum(-Double.MAX_VALUE), 0D); 1740cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0, Math.signum(-Double.MIN_VALUE), 0D); 1741cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0, Math.signum(Double.POSITIVE_INFINITY), 0D); 1742cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0, Math.signum(Double.NEGATIVE_INFINITY), 0D); 1743cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1744cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1745cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1746cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#signum(float) 1747cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1748cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_signum_F() { 1749cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue(Float.isNaN(Math.signum(Float.NaN))); 1750cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.floatToIntBits(0.0f), Float 1751cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .floatToIntBits(Math.signum(0.0f))); 1752cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.floatToIntBits(+0.0f), Float 1753cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .floatToIntBits(Math.signum(+0.0f))); 1754cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Float.floatToIntBits(-0.0f), Float 1755cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .floatToIntBits(Math.signum(-0.0f))); 1756cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1757cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0f, Math.signum(253681.2187962f), 0f); 1758cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0f, Math.signum(-125874693.56f), 0f); 1759cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0f, Math.signum(1.2587E-11f), 0f); 1760cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0f, Math.signum(-1.2587E-11f), 0f); 1761cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1762cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0f, Math.signum(Float.MAX_VALUE), 0f); 1763cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0f, Math.signum(Float.MIN_VALUE), 0f); 1764cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0f, Math.signum(-Float.MAX_VALUE), 0f); 1765cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0f, Math.signum(-Float.MIN_VALUE), 0f); 1766cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(1.0f, Math.signum(Float.POSITIVE_INFINITY), 0f); 1767cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(-1.0f, Math.signum(Float.NEGATIVE_INFINITY), 0f); 1768cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1769cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1770cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1771cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#sin(double) 1772cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1773cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_sinD() { 1774cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method double java.lang.Math.sin(double) 1775cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect answer", 0.0, Math.sin(0), 0D); 1776cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect answer", 0.8414709848078965, Math.sin(1), 0D); 1777cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1778cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1779cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1780cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#sinh(double) 1781cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1782cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_sinh_D() { 1783cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for special situations 17848afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertTrue(Double.isNaN(Math.sinh(Double.NaN))); 17858afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.POSITIVE_INFINITY, Math.sinh(Double.POSITIVE_INFINITY), 0D); 17868afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.NEGATIVE_INFINITY, Math.sinh(Double.NEGATIVE_INFINITY), 0D); 17878afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math.sinh(0.0))); 17888afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.doubleToLongBits(+0.0), Double.doubleToLongBits(Math.sinh(+0.0))); 17898afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.doubleToLongBits(-0.0), Double.doubleToLongBits(Math.sinh(-0.0))); 17908afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes 17918afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.POSITIVE_INFINITY, Math.sinh(1234.56), 0D); 17928afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.NEGATIVE_INFINITY, Math.sinh(-1234.56), 0D); 17938afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(1.0000000000001666E-6, Math.sinh(0.000001), 0D); 17948afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(-1.0000000000001666E-6, Math.sinh(-0.000001), 0D); 17958afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(5.115386441963859, Math.sinh(2.33482), Math.ulp(5.115386441963859)); 17968afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(Double.POSITIVE_INFINITY, Math.sinh(Double.MAX_VALUE), 0D); 17978afb381342e073b3bfcc8700b370e381ac23b2e0Elliott Hughes assertEquals(4.9E-324, Math.sinh(Double.MIN_VALUE), 0D); 1798cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1799cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1800cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1801cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#sqrt(double) 1802cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1803cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_sqrtD() { 1804cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method double java.lang.Math.sqrt(double) 1805cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect root returned2", 7, Math.sqrt(49), 0); 1806cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1807cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1808cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1809cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#tan(double) 1810cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1811cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_tanD() { 1812cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for method double java.lang.Math.tan(double) 1813cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect answer", 0.0, Math.tan(0), 0D); 1814cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Incorrect answer", 1.5574077246549023, Math.tan(1), 0D); 1815cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1816cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1817cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1818cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1819cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#tanh(double) 1820cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1821cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_tanh_D() { 1822cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for special situations 1823cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Should return NaN", Double.isNaN(Math.tanh(Double.NaN))); 1824cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return +1.0", +1.0, Math 1825cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .tanh(Double.POSITIVE_INFINITY), 0D); 1826cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return -1.0", -1.0, Math 1827cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .tanh(Double.NEGATIVE_INFINITY), 0D); 1828cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.doubleToLongBits(0.0), Double.doubleToLongBits(Math 1829cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .tanh(0.0))); 1830cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.doubleToLongBits(+0.0), Double 1831cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .doubleToLongBits(Math.tanh(+0.0))); 1832cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(Double.doubleToLongBits(-0.0), Double 1833cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .doubleToLongBits(Math.tanh(-0.0))); 1834cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1835cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return 1.0", 1.0, Math.tanh(1234.56), 0D); 1836cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return -1.0", -1.0, Math.tanh(-1234.56), 0D); 1837cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return 9.999999999996666E-7", 1838cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 9.999999999996666E-7, Math.tanh(0.000001), 0D); 1839cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return 0.981422884124941", 0.981422884124941, Math 1840cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .tanh(2.33482), 0D); 1841cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return 1.0", 1.0, Math.tanh(Double.MAX_VALUE), 0D); 1842cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Should return 4.9E-324", 4.9E-324, Math 1843cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .tanh(Double.MIN_VALUE), 0D); 1844cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1845cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1846cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1847cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#random() 1848cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1849cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_random() { 1850cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // There isn't a place for these tests so just stick them here 1851cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Wrong value E", 1852cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 4613303445314885481L, Double.doubleToLongBits(Math.E)); 1853cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Wrong value PI", 1854cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 4614256656552045848L, Double.doubleToLongBits(Math.PI)); 1855cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1856cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 500; i >= 0; i--) { 1857cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double d = Math.random(); 1858cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Generated number is out of range: " + d, d >= 0.0 1859cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath && d < 1.0); 1860cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1861cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1862cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1863cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1864cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#toRadians(double) 1865cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1866cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_toRadiansD() { 1867cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (double d = 500; d >= 0; d -= 1.0) { 1868cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double converted = Math.toDegrees(Math.toRadians(d)); 1869cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Converted number not equal to original. d = " + d, 1870cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath converted >= d * 0.99999999 && converted <= d * 1.00000001); 1871cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1872cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1873cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1874cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1875cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#toDegrees(double) 1876cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1877cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_toDegreesD() { 1878cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (double d = 500; d >= 0; d -= 1.0) { 1879cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath double converted = Math.toRadians(Math.toDegrees(d)); 1880cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Converted number not equal to original. d = " + d, 1881cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath converted >= d * 0.99999999 && converted <= d * 1.00000001); 1882cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1883cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1884cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1885cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1886cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#ulp(double) 1887cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1888cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @SuppressWarnings("boxing") 1889cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ulp_D() { 1890cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for special cases 1891cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Should return NaN", Double.isNaN(Math.ulp(Double.NaN))); 1892cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, Math 1893cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Double.POSITIVE_INFINITY), 0D); 1894cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, Math 1895cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Double.NEGATIVE_INFINITY), 0D); 1896cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.MIN_VALUE, Math 1897cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(0.0), 0D); 1898cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.MIN_VALUE, Math 1899cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(+0.0), 0D); 1900cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.MIN_VALUE, Math 1901cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-0.0), 0D); 1902cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Math.pow(2, 971), Math 1903cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Double.MAX_VALUE), 0D); 1904cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Math.pow(2, 971), Math 1905cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-Double.MAX_VALUE), 0D); 1906cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1907cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.MIN_VALUE, Math 1908cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Double.MIN_VALUE), 0D); 1909cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Double.MIN_VALUE, Math 1910cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-Double.MIN_VALUE), 0D); 1911cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1912cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 2.220446049250313E-16, Math 1913cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(1.0), 0D); 1914cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 2.220446049250313E-16, Math 1915cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-1.0), 0D); 1916cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 2.2737367544323206E-13, Math 1917cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(1153.0), 0D); 1918cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1919cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1920cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1921cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * java.lang.Math#ulp(float) 1922cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1923cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath @SuppressWarnings("boxing") 1924cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_ulp_f() { 1925cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // Test for special cases 1926cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertTrue("Should return NaN", Float.isNaN(Math.ulp(Float.NaN))); 1927cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Float.POSITIVE_INFINITY, Math 1928cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Float.POSITIVE_INFINITY), 0f); 1929cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Float.POSITIVE_INFINITY, Math 1930cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Float.NEGATIVE_INFINITY), 0f); 1931cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Float.MIN_VALUE, Math 1932cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(0.0f), 0f); 1933cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Float.MIN_VALUE, Math 1934cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(+0.0f), 0f); 1935cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", Float.MIN_VALUE, Math 1936cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-0.0f), 0f); 1937cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 2.028241E31f, Math 1938cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Float.MAX_VALUE), 0f); 1939cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 2.028241E31f, Math 1940cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-Float.MAX_VALUE), 0f); 1941cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1942cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 1.4E-45f, Math 1943cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(Float.MIN_VALUE), 0f); 1944cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 1.4E-45f, Math 1945cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(-Float.MIN_VALUE), 0f); 1946cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1947cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 1.1920929E-7f, Math.ulp(1.0f), 1948cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 0f); 1949cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 1.1920929E-7f, 1950cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Math.ulp(-1.0f), 0f); 1951cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 1.2207031E-4f, Math 1952cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(1153.0f), 0f); 1953cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals("Returned incorrect value", 5.6E-45f, Math 1954cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .ulp(9.403954E-38f), 0f); 1955cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1956cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1957cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 1958cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * {@link java.lang.Math#shiftIntBits(int, int)} 1959cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 1960cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 1961cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_shiftIntBits_II() { 1962cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class Tuple { 1963cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int result; 1964cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1965cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int value; 1966cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1967cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int factor; 1968cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1969cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public Tuple(int result, int value, int factor) { 1970cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.result = result; 1971cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.value = value; 1972cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.factor = factor; 1973cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1974cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 1975cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Tuple[] TUPLES = new Tuple[] { 1976cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // sub-normal to sub-normal 1977cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000000, 0x00000001, -1), 1978cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to even 1979cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000002, 0x00000003, -1), 1980cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to even 1981cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000001, 0x00000005, -3), 1982cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to infinity 1983cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000002, 0x0000000d, -3), 1984cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to infinity 1985cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 1986cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // normal to sub-normal 1987cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000002, 0x01a00000, -24), 19880239cd8c6db469d96487c1a56033a39365c9c65bAndreas Gampe // round to even 1989cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000004, 0x01e00000, -24), 1990cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to even 1991cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000003, 0x01c80000, -24), 1992cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to infinity 1993cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000004, 0x01e80000, -24), 1994cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // round to infinity 1995cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }; 1996cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TUPLES.length; ++i) { 1997cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Tuple tuple = TUPLES[i]; 1998cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(tuple.result, Float.floatToIntBits(Math.scalb(Float 1999cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .intBitsToFloat(tuple.value), tuple.factor))); 2000cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(tuple.result, Float.floatToIntBits(-Math.scalb(-Float 2001cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath .intBitsToFloat(tuple.value), tuple.factor))); 2002cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 2003cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 2004cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2005cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath /** 2006cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * {@link java.lang.Math#shiftLongBits(long, long)} 2007cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * <p/> 2008cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * Round result to nearest value on precision lost. 2009cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath * @since 1.6 2010cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath */ 2011cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public void test_shiftLongBits_LL() { 2012cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath class Tuple { 2013cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public long result; 2014cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2015cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public long value; 2016cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2017cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public int factor; 2018cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2019cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath public Tuple(long result, long value, int factor) { 2020cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.result = result; 2021cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.value = value; 2022cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath this.factor = factor; 2023cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 2024cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 2025cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath final Tuple[] TUPLES = new Tuple[] { 2026cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // sub-normal to sub-normal 2027cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000000L, 0x00000001L, -1), 2028cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //round to even 2029cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000002L, 0x00000003L, -1), 2030cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //round to even 2031cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000001L, 0x00000005L, -3), 2032cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //round to infinity 2033cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x00000002L, 0x0000000dL, -3), 2034cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath //round to infinity 2035cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath 2036cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath // normal to sub-normal 2037cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x0000000000000002L, 0x0034000000000000L, -53), // round to even 2038cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x0000000000000004L, 0x003c000000000000L, -53), // round to even 2039cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x0000000000000003L, 0x0035000000000000L, -53), // round to infinity 2040cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath new Tuple(0x0000000000000004L, 0x003d000000000000L, -53), // round to infinity 2041cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath }; 2042cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath for (int i = 0; i < TUPLES.length; ++i) { 2043cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Tuple tuple = TUPLES[i]; 2044cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(tuple.result, Double.doubleToLongBits(Math.scalb( 2045cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath Double.longBitsToDouble(tuple.value), tuple.factor))); 2046cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath assertEquals(tuple.result, Double.doubleToLongBits(-Math.scalb( 2047cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath -Double.longBitsToDouble(tuple.value), tuple.factor))); 2048cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 2049cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath } 2050cb318c6f4fe5b0e20099fa85f1b95ccb2d24119fNarayan Kamath} 2051