11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.math;
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.math.MathTesting.ALL_BIGINTEGER_CANDIDATES;
41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.math.MathTesting.ALL_DOUBLE_CANDIDATES;
51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.math.MathTesting.EXPONENTS;
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport static com.google.common.math.MathTesting.FINITE_DOUBLE_CANDIDATES;
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.math.BigInteger;
91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase;
111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport sun.misc.FpUtils;
121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class DoubleUtilsTest extends TestCase {
141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public strictfp void testScalbPositiveExponent() {
151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (int k : EXPONENTS) {
161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (double d : ALL_DOUBLE_CANDIDATES) {
171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(d * StrictMath.pow(2.0, k), DoubleUtils.scalb(d, k));
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testGetExponent() {
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (double d : ALL_DOUBLE_CANDIDATES) {
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(FpUtils.getExponent(d), DoubleUtils.getExponent(d));
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNextUp() {
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (double d : FINITE_DOUBLE_CANDIDATES) {
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(FpUtils.nextUp(d), DoubleUtils.next(d, true));
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNextDown() {
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (double d : FINITE_DOUBLE_CANDIDATES) {
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(FpUtils.nextDown(d), DoubleUtils.next(d, false));
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testBigToDouble() {
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (BigInteger b : ALL_BIGINTEGER_CANDIDATES) {
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(b.doubleValue(), DoubleUtils.bigToDouble(b));
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
46