diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2021-03-27 14:03:16 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2021-03-27 14:03:16 +0000 |
commit | 37791e4bdfc706aa5684745594260f243b4be7ee (patch) | |
tree | a8dd8d0976fc478074d52cd3de79e0e6b5e6a33a /src/testcases/org/apache/poi/ss/util/TestExpandedDouble.java | |
parent | 2bb3839bfe3e3bacff79f8157465633e311239ce (diff) | |
download | poi-37791e4bdfc706aa5684745594260f243b4be7ee.tar.gz poi-37791e4bdfc706aa5684745594260f243b4be7ee.zip |
65206 - Migrate ant / maven to gradle build
update gradle files and project structure along https://github.com/centic9/poi/tree/gradle_build
remove eclipse IDE project files
remove obsolete record generator files
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1888111 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/testcases/org/apache/poi/ss/util/TestExpandedDouble.java')
-rw-r--r-- | src/testcases/org/apache/poi/ss/util/TestExpandedDouble.java | 128 |
1 files changed, 0 insertions, 128 deletions
diff --git a/src/testcases/org/apache/poi/ss/util/TestExpandedDouble.java b/src/testcases/org/apache/poi/ss/util/TestExpandedDouble.java deleted file mode 100644 index 9465619b79..0000000000 --- a/src/testcases/org/apache/poi/ss/util/TestExpandedDouble.java +++ /dev/null @@ -1,128 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.ss.util; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import java.math.BigInteger; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; - -/** - * Tests for {@link ExpandedDouble} - */ -final class TestExpandedDouble { - private static final BigInteger BIG_POW_10 = BigInteger.valueOf(1000000000); - - @Test - void testNegative() { - ExpandedDouble hd = new ExpandedDouble(0xC010000000000000L); - assertNotEquals(-2046, hd.getBinaryExponent(), "identified bug - sign bit not masked out of exponent"); - assertEquals(2, hd.getBinaryExponent()); - BigInteger frac = hd.getSignificand(); - assertEquals(64, frac.bitLength()); - assertEquals(1, frac.bitCount()); - } - - @Test - void testSubnormal() { - ExpandedDouble hd = new ExpandedDouble(0x0000000000000001L); - assertNotEquals(-1023, hd.getBinaryExponent(), "identified bug - subnormal numbers not decoded properly"); - assertEquals(-1086, hd.getBinaryExponent()); - BigInteger frac = hd.getSignificand(); - assertEquals(64, frac.bitLength()); - assertEquals(1, frac.bitCount()); - } - - /** - * Tests specific values for conversion from {@link ExpandedDouble} to {@link NormalisedDecimal} and back - */ - @ParameterizedTest - @ValueSource(longs = { - 0x4010000000000004L, - 0x7010000000000004L, - 0x1010000000000004L, - 0x0010000000000001L, // near lowest normal number - 0x0010000000000000L, // lowest normal number - 0x000FFFFFFFFFFFFFL, // highest subnormal number - 0x0008000000000000L, // subnormal number - - 0xC010000000000004L, - 0xE230100010001004L, - 0x403CE0FFFFFFFFF2L, - 0x0000000000000001L, // smallest non-zero number (subnormal) - 0x6230100010000FFEL, - 0x6230100010000FFFL, - 0x6230100010001000L, - 0x403CE0FFFFFFFFF0L, // has single digit round trip error - 0x2B2BFFFF10001079L, - }) - void confirmRoundTrip(long rawBitsA) { - double a = Double.longBitsToDouble(rawBitsA); - if (a == 0.0) { - // Can't represent 0.0 or -0.0 with NormalisedDecimal - return; - } - ExpandedDouble ed1 = new ExpandedDouble(rawBitsA); - NormalisedDecimal nd2 = ed1.normaliseBaseTen(); - checkNormaliseBaseTenResult(ed1, nd2); - - ExpandedDouble ed3 = nd2.normaliseBaseTwo(); - assertEquals(ed3.getBinaryExponent(), ed1.getBinaryExponent(), "bin exp mismatch"); - - BigInteger diff = ed3.getSignificand().subtract(ed1.getSignificand()).abs(); - if (diff.signum() == 0) { - return; - } - // original quantity only has 53 bits of precision - // these quantities may have errors in the 64th bit, which hopefully don't make any difference - - // errors in the 64th bit happen from time to time - // this is well below the 53 bits of precision required - assertTrue(diff.bitLength() < 2); - } - - - private static void checkNormaliseBaseTenResult(ExpandedDouble orig, NormalisedDecimal result) { - String sigDigs = result.getSignificantDecimalDigits(); - BigInteger frac = orig.getSignificand(); - while (frac.bitLength() + orig.getBinaryExponent() < 200) { - frac = frac.multiply(BIG_POW_10); - } - int binaryExp = orig.getBinaryExponent() - orig.getSignificand().bitLength(); - - String origDigs = frac.shiftLeft(binaryExp+1).toString(10); - assertTrue(origDigs.startsWith(sigDigs)); - - double dO = Double.parseDouble("0." + origDigs.substring(sigDigs.length())); - double d1 = Double.parseDouble(result.getFractionalPart().toPlainString()); - BigInteger subDigsO = BigInteger.valueOf((int) (dO * 32768 + 0.5)); - BigInteger subDigsB = BigInteger.valueOf((int) (d1 * 32768 + 0.5)); - - if (subDigsO.equals(subDigsB)) { - return; - } - BigInteger diff = subDigsB.subtract(subDigsO).abs(); - // 100/32768 ~= 0.003 - assertTrue(diff.intValue() <= 100, "minor mistake"); - } -} |