test/nashorn/src/jdk/nashorn/internal/runtime/doubleconv/test/BignumDtoaTest.java
author hannesw
Thu, 11 Jul 2019 17:11:54 +0200
changeset 55665 70b1c1bec669
parent 47216 71c04702a3d5
permissions -rw-r--r--
8227391: Update double-conversion to version 3.1.5 Reviewed-by: attila
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33689
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     1
/*
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     4
 *
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    10
 *
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    15
 * accompanied this code).
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    16
 *
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    20
 *
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    23
 * questions.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    24
 */
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    25
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    26
// This file is available under and governed by the GNU General Public
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    27
// License version 2 only, as published by the Free Software Foundation.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    28
// However, the following notice accompanied the original version of this
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    29
// file:
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    30
//
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    31
// Copyright 2012 the V8 project authors. All rights reserved.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    32
// Redistribution and use in source and binary forms, with or without
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    33
// modification, are permitted provided that the following conditions are
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    34
// met:
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    35
//
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    36
//     * Redistributions of source code must retain the above copyright
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    37
//       notice, this list of conditions and the following disclaimer.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    38
//     * Redistributions in binary form must reproduce the above
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    39
//       copyright notice, this list of conditions and the following
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    40
//       disclaimer in the documentation and/or other materials provided
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    41
//       with the distribution.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    42
//     * Neither the name of Google Inc. nor the names of its
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    43
//       contributors may be used to endorse or promote products derived
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    44
//       from this software without specific prior written permission.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    45
//
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    46
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    47
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    48
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    49
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    50
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    51
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    52
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    53
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    54
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    55
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    56
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    57
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    58
package jdk.nashorn.internal.runtime.doubleconv.test;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    59
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    60
import java.io.BufferedReader;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    61
import java.io.InputStreamReader;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    62
import jdk.nashorn.internal.runtime.doubleconv.DoubleConversion;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    63
import jdk.nashorn.internal.runtime.doubleconv.DtoaBuffer;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    64
import jdk.nashorn.internal.runtime.doubleconv.DtoaMode;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    65
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    66
import org.testng.annotations.Test;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    67
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    68
import static org.testng.Assert.assertEquals;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    69
import static org.testng.Assert.assertTrue;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    70
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    71
/**
55665
70b1c1bec669 8227391: Update double-conversion to version 3.1.5
hannesw
parents: 47216
diff changeset
    72
 * BignumDtoa tests
33689
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    73
 */
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    74
@SuppressWarnings("javadoc")
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    75
public class BignumDtoaTest {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    76
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    77
    final static private int BUFFER_SIZE = 100;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    78
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    79
    // Removes trailing '0' digits.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    80
    // Can return the empty string if all digits are 0.
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    81
    private static String trimRepresentation(final String representation) {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    82
        final int len = representation.length();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    83
        int i;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    84
        for (i = len - 1; i >= 0; --i) {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    85
            if (representation.charAt(i) != '0') break;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    86
        }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    87
        return representation.substring(0, i + 1);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    88
    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    89
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    90
    @Test
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    91
    public void testBignumVarious() {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    92
        final DtoaBuffer buffer = new DtoaBuffer(BUFFER_SIZE);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    93
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    94
        DoubleConversion.bignumDtoa(1, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    95
        assertEquals("1", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    96
        assertEquals(1, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    97
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    98
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
    99
        DoubleConversion.bignumDtoa(1.0, DtoaMode.FIXED, 3, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   100
        assertTrue(3 >= buffer.getLength() - buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   101
        assertEquals("1", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   102
        assertEquals(1, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   103
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   104
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   105
        DoubleConversion.bignumDtoa(1.0, DtoaMode.PRECISION, 3, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   106
        assertTrue(3 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   107
        assertEquals("1", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   108
        assertEquals(1, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   109
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   110
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   111
        DoubleConversion.bignumDtoa(1.5, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   112
        assertEquals("15", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   113
        assertEquals(1, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   114
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   115
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   116
        DoubleConversion.bignumDtoa(1.5, DtoaMode.FIXED, 10, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   117
        assertTrue(10 >= buffer.getLength() - buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   118
        assertEquals("15", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   119
        assertEquals(1, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   120
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   121
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   122
        DoubleConversion.bignumDtoa(1.5, DtoaMode.PRECISION, 10, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   123
        assertTrue(10 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   124
        assertEquals("15", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   125
        assertEquals(1, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   126
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   127
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   128
        final double min_double = 5e-324;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   129
        DoubleConversion.bignumDtoa(min_double, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   130
        assertEquals("5", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   131
        assertEquals(-323, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   132
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   133
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   134
        DoubleConversion.bignumDtoa(min_double, DtoaMode.FIXED, 5, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   135
        assertTrue(5 >= buffer.getLength() - buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   136
        assertEquals("", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   137
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   138
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   139
        DoubleConversion.bignumDtoa(min_double, DtoaMode.PRECISION, 5, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   140
        assertTrue(5 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   141
        assertEquals("49407", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   142
        assertEquals(-323, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   143
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   144
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   145
        final double max_double = 1.7976931348623157e308;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   146
        DoubleConversion.bignumDtoa(max_double, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   147
        assertEquals("17976931348623157", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   148
        assertEquals(309, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   149
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   150
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   151
        DoubleConversion.bignumDtoa(max_double, DtoaMode.PRECISION, 7, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   152
        assertTrue(7 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   153
        assertEquals("1797693", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   154
        assertEquals(309, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   155
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   156
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   157
        DoubleConversion.bignumDtoa(4294967272.0, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   158
        assertEquals("4294967272", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   159
        assertEquals(10, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   160
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   161
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   162
        DoubleConversion.bignumDtoa(4294967272.0, DtoaMode.FIXED, 5, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   163
        assertEquals("429496727200000", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   164
        assertEquals(10, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   165
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   166
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   167
        DoubleConversion.bignumDtoa(4294967272.0, DtoaMode.PRECISION, 14, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   168
        assertTrue(14 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   169
        assertEquals("4294967272", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   170
        assertEquals(10, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   171
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   172
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   173
        DoubleConversion.bignumDtoa(4.1855804968213567e298, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   174
        assertEquals("4185580496821357", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   175
        assertEquals(299, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   176
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   177
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   178
        DoubleConversion.bignumDtoa(4.1855804968213567e298, DtoaMode.PRECISION, 20, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   179
        assertTrue(20 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   180
        assertEquals("41855804968213567225", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   181
        assertEquals(299, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   182
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   183
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   184
        DoubleConversion.bignumDtoa(5.5626846462680035e-309, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   185
        assertEquals("5562684646268003", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   186
        assertEquals(-308, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   187
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   188
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   189
        DoubleConversion.bignumDtoa(5.5626846462680035e-309, DtoaMode.PRECISION, 1, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   190
        assertTrue(1 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   191
        assertEquals("6", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   192
        assertEquals(-308, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   193
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   194
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   195
        DoubleConversion.bignumDtoa(2147483648.0, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   196
        assertEquals("2147483648", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   197
        assertEquals(10, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   198
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   199
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   200
        DoubleConversion.bignumDtoa(2147483648.0, DtoaMode.FIXED, 2, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   201
        assertTrue(2 >= buffer.getLength() - buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   202
        assertEquals("2147483648", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   203
        assertEquals(10, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   204
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   205
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   206
        DoubleConversion.bignumDtoa(2147483648.0, DtoaMode.PRECISION, 5, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   207
        assertTrue(5 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   208
        assertEquals("21475", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   209
        assertEquals(10, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   210
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   211
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   212
        DoubleConversion.bignumDtoa(3.5844466002796428e+298, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   213
        assertEquals("35844466002796428", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   214
        assertEquals(299, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   215
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   216
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   217
        DoubleConversion.bignumDtoa(3.5844466002796428e+298, DtoaMode.PRECISION, 10, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   218
        assertTrue(10 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   219
        assertEquals("35844466", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   220
        assertEquals(299, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   221
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   222
55665
70b1c1bec669 8227391: Update double-conversion to version 3.1.5
hannesw
parents: 47216
diff changeset
   223
        DoubleConversion.bignumDtoa(1e-23, DtoaMode.SHORTEST, 0, buffer);
70b1c1bec669 8227391: Update double-conversion to version 3.1.5
hannesw
parents: 47216
diff changeset
   224
        assertEquals("1", buffer.getRawDigits());
70b1c1bec669 8227391: Update double-conversion to version 3.1.5
hannesw
parents: 47216
diff changeset
   225
        assertEquals(-22, buffer.getDecimalPoint());
70b1c1bec669 8227391: Update double-conversion to version 3.1.5
hannesw
parents: 47216
diff changeset
   226
        buffer.reset();
70b1c1bec669 8227391: Update double-conversion to version 3.1.5
hannesw
parents: 47216
diff changeset
   227
33689
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   228
        final long smallest_normal64 = 0x0010000000000000L;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   229
        double v = Double.longBitsToDouble(smallest_normal64);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   230
        DoubleConversion.bignumDtoa(v, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   231
        assertEquals("22250738585072014", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   232
        assertEquals(-307, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   233
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   234
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   235
        DoubleConversion.bignumDtoa(v, DtoaMode.PRECISION, 20, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   236
        assertTrue(20 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   237
        assertEquals("22250738585072013831", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   238
        assertEquals(-307, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   239
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   240
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   241
        final long largest_denormal64 = 0x000FFFFFFFFFFFFFL;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   242
        v = Double.longBitsToDouble(largest_denormal64);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   243
        DoubleConversion.bignumDtoa(v, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   244
        assertEquals("2225073858507201", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   245
        assertEquals(-307, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   246
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   247
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   248
        DoubleConversion.bignumDtoa(v, DtoaMode.PRECISION, 20, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   249
        assertTrue(20 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   250
        assertEquals("2225073858507200889", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   251
        assertEquals(-307, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   252
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   253
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   254
        DoubleConversion.bignumDtoa(4128420500802942e-24, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   255
        assertEquals("4128420500802942", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   256
        assertEquals(-8, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   257
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   258
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   259
        DoubleConversion.bignumDtoa(3.9292015898194142585311918e-10, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   260
        assertEquals("39292015898194143", buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   261
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   262
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   263
        v = 4194304.0;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   264
        DoubleConversion.bignumDtoa(v, DtoaMode.FIXED, 5, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   265
        assertTrue(5 >= buffer.getLength() - buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   266
        assertEquals("4194304", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   267
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   268
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   269
        v = 3.3161339052167390562200598e-237;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   270
        DoubleConversion.bignumDtoa(v, DtoaMode.PRECISION, 19, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   271
        assertTrue(19 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   272
        assertEquals("3316133905216739056", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   273
        assertEquals(-236, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   274
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   275
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   276
        v = 7.9885183916008099497815232e+191;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   277
        DoubleConversion.bignumDtoa(v, DtoaMode.PRECISION, 4, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   278
        assertTrue(4 >= buffer.getLength());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   279
        assertEquals("7989", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   280
        assertEquals(192, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   281
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   282
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   283
        v = 1.0000000000000012800000000e+17;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   284
        DoubleConversion.bignumDtoa(v, DtoaMode.FIXED, 1, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   285
        assertTrue(1 >= buffer.getLength() - buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   286
        assertEquals("100000000000000128", trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   287
        assertEquals(18, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   288
        buffer.reset();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   289
    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   290
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   291
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   292
    @Test
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   293
    public void testBignumShortest() {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   294
        new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("resources/gay-shortest.txt")))
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   295
                .lines()
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   296
                .forEach(line -> {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   297
                    if (line.isEmpty() || line.startsWith("//")) {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   298
                        return; // comment or empty line
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   299
                    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   300
                    final String[] tokens = line.split(",\\s+");
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   301
                    assertEquals(tokens.length, 3, "*" + line + "*");
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   302
                    final double v = Double.parseDouble(tokens[0]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   303
                    final String str = tokens[1].replace('"', ' ').trim();;
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   304
                    final int point = Integer.parseInt(tokens[2]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   305
                    final DtoaBuffer buffer = new DtoaBuffer(BUFFER_SIZE);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   306
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   307
                    DoubleConversion.bignumDtoa(v, DtoaMode.SHORTEST, 0, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   308
                    assertEquals(str, buffer.getRawDigits());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   309
                    assertEquals(point, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   310
                });
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   311
    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   312
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   313
    @Test
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   314
    public void testBignumFixed()  {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   315
        new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("resources/gay-fixed.txt")))
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   316
                .lines()
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   317
                .forEach(line -> {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   318
                    if (line.isEmpty() || line.startsWith("//")) {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   319
                        return; // comment or empty line
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   320
                    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   321
                    final String[] tokens = line.split(",\\s+");
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   322
                    assertEquals(tokens.length, 4);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   323
                    final double v = Double.parseDouble(tokens[0]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   324
                    final int digits = Integer.parseInt(tokens[1]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   325
                    final String str = tokens[2].replace('"', ' ').trim();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   326
                    final int point = Integer.parseInt(tokens[3]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   327
                    final DtoaBuffer buffer = new DtoaBuffer(BUFFER_SIZE);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   328
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   329
                    DoubleConversion.bignumDtoa(v, DtoaMode.FIXED, digits, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   330
                    assertEquals(str, trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   331
                    assertEquals(point, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   332
                });
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   333
    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   334
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   335
    @Test
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   336
    public void testBignumPrecision() {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   337
        new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("resources/gay-precision.txt")))
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   338
                .lines()
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   339
                .forEach(line -> {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   340
                    if (line.isEmpty() || line.startsWith("//")) {
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   341
                        return; // comment or empty line
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   342
                    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   343
                    final String[] tokens = line.split(",\\s+");
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   344
                    assertEquals(tokens.length, 4);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   345
                    final double v = Double.parseDouble(tokens[0]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   346
                    final int digits = Integer.parseInt(tokens[1]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   347
                    final String str = tokens[2].replace('"', ' ').trim();
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   348
                    final int point = Integer.parseInt(tokens[3]);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   349
                    final DtoaBuffer buffer = new DtoaBuffer(BUFFER_SIZE);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   350
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   351
                    DoubleConversion.bignumDtoa(v, DtoaMode.PRECISION, digits, buffer);
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   352
                    assertEquals(str, trimRepresentation(buffer.getRawDigits()));
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   353
                    assertEquals(point, buffer.getDecimalPoint());
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   354
                });
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   355
    }
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   356
a42cdb474da0 8010803: Number to String conversion functionality overhaul
hannesw
parents:
diff changeset
   357
}