Home | History | Annotate | Download | only in text
      1 /*
      2  * Licensed to the Apache Software Foundation (ASF) under one or more
      3  * contributor license agreements.  See the NOTICE file distributed with
      4  * this work for additional information regarding copyright ownership.
      5  * The ASF licenses this file to You under the Apache License, Version 2.0
      6  * (the "License"); you may not use this file except in compliance with
      7  * the License.  You may obtain a copy of the License at
      8  *
      9  *     http://www.apache.org/licenses/LICENSE-2.0
     10  *
     11  * Unless required by applicable law or agreed to in writing, software
     12  * distributed under the License is distributed on an "AS IS" BASIS,
     13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14  * See the License for the specific language governing permissions and
     15  * limitations under the License.
     16  */
     17 
     18 package libcore.java.text;
     19 
     20 import java.math.BigDecimal;
     21 import java.math.BigInteger;
     22 import java.text.AttributedCharacterIterator;
     23 import java.text.DecimalFormat;
     24 import java.text.DecimalFormatSymbols;
     25 import java.text.FieldPosition;
     26 import java.text.NumberFormat;
     27 import java.text.ParseException;
     28 import java.text.ParsePosition;
     29 import java.util.BitSet;
     30 import java.util.Locale;
     31 import junit.framework.TestCase;
     32 import tests.support.Support_DecimalFormat;
     33 
     34 public class OldDecimalFormatTest extends TestCase {
     35 
     36     public void test_formatToCharacterIterator() throws Exception {
     37         AttributedCharacterIterator iterator;
     38         int[] runStarts;
     39         int[] runLimits;
     40         String result;
     41         char current;
     42 
     43         // For BigDecimal with multiplier test.
     44         DecimalFormat df = new DecimalFormat();
     45         df.setMultiplier(10);
     46         iterator = df.formatToCharacterIterator(new BigDecimal("12345678901234567890"));
     47         result = "123,456,789,012,345,678,900";
     48         current = iterator.current();
     49         for (int i = 0; i < result.length(); i++) {
     50             assertEquals("wrong char @" + i, result.charAt(i), current);
     51             current = iterator.next();
     52         }
     53 
     54         // For BigDecimal with multiplier test.
     55         df = new DecimalFormat();
     56         df.setMultiplier(-1);
     57         df.setMaximumFractionDigits(20);
     58         iterator = df.formatToCharacterIterator(new BigDecimal("1.23456789012345678901"));
     59         result = "-1.23456789012345678901";
     60         current = iterator.current();
     61         for (int i = 0; i < result.length(); i++) {
     62             assertEquals("wrong char @" + i, result.charAt(i), current);
     63             current = iterator.next();
     64         }
     65 
     66         iterator = new DecimalFormat()
     67                 .formatToCharacterIterator(new BigDecimal("1.23456789E1234"));
     68         runStarts = new int[] {0, 0, 2, 3, 3, 3, 6, 7, 7, 7, 10, 11, 11, 11, 14};
     69         runLimits = new int[] {2, 2, 3, 6, 6, 6, 7, 10, 10, 10, 11, 14, 14, 14, 15};
     70         result = "12,345,678,900,"; // 000,000,000,000....
     71         current = iterator.current();
     72         for (int i = 0; i < runStarts.length; i++) {
     73             assertEquals("wrong start @" + i, runStarts[i], iterator.getRunStart());
     74             assertEquals("wrong limit @" + i, runLimits[i], iterator.getRunLimit());
     75             assertEquals("wrong char @" + i, result.charAt(i), current);
     76             current = iterator.next();
     77         }
     78         assertEquals(0, iterator.getBeginIndex());
     79         assertEquals(1646, iterator.getEndIndex());
     80 
     81         iterator = new DecimalFormat()
     82                 .formatToCharacterIterator(new BigDecimal("1.23456789E301"));
     83         runStarts = new int[] {0, 0, 2, 3, 3, 3, 6, 7, 7, 7, 10, 11, 11, 11, 14};
     84         runLimits = new int[] {2, 2, 3, 6, 6, 6, 7, 10, 10, 10, 11, 14, 14, 14, 15};
     85         result = "12,345,678,900,"; // 000,000,000,000....
     86         current = iterator.current();
     87         for (int i = 0; i < runStarts.length; i++) {
     88             assertEquals("wrong start @" + i, runStarts[i], iterator.getRunStart());
     89             assertEquals("wrong limit @" + i, runLimits[i], iterator.getRunLimit());
     90             assertEquals("wrong char @" + i, result.charAt(i), current);
     91             current = iterator.next();
     92         }
     93         assertEquals(0, iterator.getBeginIndex());
     94         assertEquals(402, iterator.getEndIndex());
     95 
     96         iterator = new DecimalFormat()
     97                 .formatToCharacterIterator(new BigDecimal("1.2345678E4"));
     98         runStarts = new int[] {0, 0, 2, 3, 3, 3, 6, 7, 7, 7};
     99         runLimits = new int[] {2, 2, 3, 6, 6, 6, 7, 10, 10, 10};
    100         result = "12,345.678";
    101         current = iterator.current();
    102         for (int i = 0; i < runStarts.length; i++) {
    103             assertEquals("wrong start @" + i, runStarts[i], iterator.getRunStart());
    104             assertEquals("wrong limit @" + i, runLimits[i], iterator.getRunLimit());
    105             assertEquals("wrong char @" + i, result.charAt(i), current);
    106             current = iterator.next();
    107         }
    108         assertEquals(0, iterator.getBeginIndex());
    109         assertEquals(10, iterator.getEndIndex());
    110 
    111         iterator = new DecimalFormat()
    112                 .formatToCharacterIterator(new BigInteger("123456789"));
    113         runStarts = new int[] {0, 0, 0, 3, 4, 4, 4, 7, 8, 8, 8};
    114         runLimits = new int[] {3, 3, 3, 4, 7, 7, 7, 8, 11, 11, 11};
    115         result = "123,456,789";
    116         current = iterator.current();
    117         for (int i = 0; i < runStarts.length; i++) {
    118             assertEquals("wrong start @" + i, runStarts[i], iterator.getRunStart());
    119             assertEquals("wrong limit @" + i, runLimits[i], iterator.getRunLimit());
    120             assertEquals("wrong char @" + i, result.charAt(i), current);
    121             current = iterator.next();
    122         }
    123         assertEquals(0, iterator.getBeginIndex());
    124         assertEquals(11, iterator.getEndIndex());
    125     }
    126 
    127     /*
    128      * Test the getter and setter of parseBigDecimal and parseIntegerOnly and
    129      * test the default value of them.
    130      */
    131     public void test_isParseBigDecimalLjava_lang_Boolean_isParseIntegerOnlyLjava_lang_Boolean() {
    132 
    133         // parseBigDecimal default to false
    134         DecimalFormat form = (DecimalFormat) DecimalFormat
    135                 .getInstance(Locale.US);
    136         assertFalse(form.isParseBigDecimal());
    137         form.setParseBigDecimal(true);
    138         assertTrue(form.isParseBigDecimal());
    139 
    140         try {
    141             Number result = form.parse("123.123");
    142             assertEquals(new BigDecimal("123.123"), result);
    143         } catch (ParseException e) {
    144             fail("ParseException was thrown.");
    145         }
    146 
    147         form.setParseBigDecimal(false);
    148         assertFalse(form.isParseBigDecimal());
    149 
    150         try {
    151             Number result = form.parse("123.123");
    152             assertFalse(result instanceof BigDecimal);
    153         } catch (ParseException e) {
    154             fail("ParseException was thrown.");
    155         }
    156 
    157         // parseIntegerOnly default to false
    158         assertFalse(form.isParseIntegerOnly());
    159     }
    160 
    161     public void test_isParseIntegerOnly() {
    162 
    163             DecimalFormat format = new DecimalFormat();
    164             assertFalse("Default value of isParseIntegerOnly is true",
    165                     format.isParseIntegerOnly());
    166 
    167             format.setParseIntegerOnly(true);
    168             assertTrue(format.isParseIntegerOnly());
    169             try {
    170                 Number result = format.parse("123.123");
    171                 assertEquals(new Long("123"), result);
    172             } catch (ParseException e) {
    173                 fail("ParseException was thrown.");
    174             }
    175 
    176             format.setParseIntegerOnly(false);
    177             assertFalse(format.isParseIntegerOnly());
    178             try {
    179                 Number result = format.parse("123.123");
    180                 assertEquals(new Double("123.123"), result);
    181             } catch (ParseException e) {
    182                 fail("ParseException was thrown.");
    183             }
    184     }
    185 
    186     public void test_isGroupingUsed() {
    187         String [] patterns = {"####.##", "######.######", "000000.000000",
    188                 "######.000000", "000000.######", " ###.###", "$#####.######",
    189                 "$$####.######"};
    190 
    191         for(String pattern:patterns) {
    192             DecimalFormat format = new DecimalFormat(pattern);
    193             assertFalse(format.isGroupingUsed());
    194         }
    195 
    196         DecimalFormat format = new DecimalFormat("###,####");
    197         assertTrue(format.isGroupingUsed());
    198     }
    199 
    200     // Test the type of the returned object
    201     public void test_parseLjava_lang_String_Ljava_text_ParsePosition() {
    202         DecimalFormat form = (DecimalFormat) DecimalFormat.getInstance(Locale.US);
    203         form.setParseIntegerOnly(true);
    204         form.setParseBigDecimal(true);
    205 
    206         final String doubleMax2 = "359,538,626,972,463,141,629,054,847,463,408,"
    207             + "713,596,141,135,051,689,993,197,834,953,606,314,521,560,057,077,"
    208             + "521,179,117,265,533,756,343,080,917,907,028,764,928,468,642,653,"
    209             + "778,928,365,536,935,093,407,075,033,972,099,821,153,102,564,152,"
    210             + "490,980,180,778,657,888,151,737,016,910,267,884,609,166,473,806,"
    211             + "445,896,331,617,118,664,246,696,549,595,652,408,289,446,337,476,"
    212             + "354,361,838,599,762,500,808,052,368,249,716,736";
    213         Number number = form.parse(doubleMax2, new ParsePosition(0));
    214         assertTrue(number instanceof BigDecimal);
    215         BigDecimal result = (BigDecimal)number;
    216         assertEquals(new BigDecimal(Double.MAX_VALUE).add(new BigDecimal(
    217                 Double.MAX_VALUE)), result);
    218     }
    219 
    220     // AndroidOnly: Difference to RI
    221     public void test_getMaximumIntegerDigits_AndroidOnly() {
    222         final int maxIntDigit = 309;
    223 
    224         // When use default locale, in this case zh_CN
    225         // the returned instance of NumberFormat is a DecimalFormat
    226         DecimalFormat form = new DecimalFormat("00.###E0");
    227         NumberFormat nform = DecimalFormat.getInstance(Locale.US);
    228         nform = DecimalFormat.getInstance(Locale.US);
    229         form = null;
    230         if (nform instanceof DecimalFormat) {
    231             form = (DecimalFormat) nform;
    232         }
    233         // getMaximumIntegerDigits from NumberFormat default to 309
    234         // getMaximumIntegerDigits from DecimalFormat default to 309
    235         // the following 2 assertions will fail on RI implementation, since the
    236         // implementation of ICU and RI are not identical. RI does not give
    237         // DecimalFormat an initial bound about its maximumIntegerDigits
    238         // (default to Integer.MAX_VALUE: 2147483647 )
    239         assertEquals(maxIntDigit, nform.getMaximumIntegerDigits());
    240         assertEquals(maxIntDigit, form.getMaximumIntegerDigits());
    241     }
    242 
    243     // AndroidOnly: second 0 needs to be quoted in icu.
    244     // (quoting special characters in prefix and suffix necessary)
    245     public void test_getMaximumIntegerDigits2() {
    246         // regression test for HARMONY-878
    247         assertTrue(new DecimalFormat("0\t'0'").getMaximumIntegerDigits() > 0);
    248     }
    249 
    250     public void test_setPositivePrefixLjava_lang_String() {
    251         DecimalFormat format = new DecimalFormat();
    252         assertEquals("", format.getPositivePrefix());
    253 
    254         format.setPositivePrefix("PosPrf");
    255         assertEquals("PosPrf", format.getPositivePrefix());
    256         try {
    257             assertTrue(format.parse("PosPrf123.45").doubleValue() == 123.45);
    258         } catch(java.text.ParseException pe) {
    259             fail("ParseException was thrown.");
    260         }
    261 
    262         format.setPositivePrefix("");
    263         assertEquals("", format.getPositivePrefix());
    264 
    265         format.setPositivePrefix(null);
    266         assertNull(format.getPositivePrefix());
    267     }
    268     public void test_setPositiveSuffixLjava_lang_String() {
    269         DecimalFormat format = new DecimalFormat();
    270         assertEquals("", format.getPositiveSuffix());
    271 
    272         format.setPositiveSuffix("PosSfx");
    273         assertEquals("PosSfx", format.getPositiveSuffix());
    274         try {
    275             assertTrue(format.parse("123.45PosSfx").doubleValue() == 123.45);
    276         } catch(java.text.ParseException pe) {
    277             fail("ParseException was thrown.");
    278         }
    279 
    280         format.setPositiveSuffix("");
    281         assertEquals("", format.getPositiveSuffix());
    282 
    283         format.setPositiveSuffix(null);
    284         assertNull(format.getPositiveSuffix());
    285     }
    286     public void test_setNegativePrefixLjava_lang_String() {
    287         DecimalFormat format = new DecimalFormat();
    288         assertEquals("-", format.getNegativePrefix());
    289 
    290         format.setNegativePrefix("NegPrf");
    291         assertEquals("NegPrf", format.getNegativePrefix());
    292         try {
    293             assertTrue(format.parse("NegPrf123.45").doubleValue() == -123.45);
    294         } catch(java.text.ParseException pe) {
    295             fail("ParseException was thrown.");
    296         }
    297         format.setNegativePrefix("");
    298         assertEquals("", format.getNegativePrefix());
    299 
    300         format.setNegativePrefix(null);
    301         assertNull(format.getNegativePrefix());
    302     }
    303     public void test_setNegativeSuffixLjava_lang_String() {
    304         DecimalFormat format = new DecimalFormat();
    305         assertEquals("", format.getNegativeSuffix());
    306 
    307         format.setNegativeSuffix("NegSfx");
    308         assertEquals("NegSfx", format.getNegativeSuffix());
    309         try {
    310             assertTrue(format.parse("123.45NegPfx").doubleValue() == 123.45);
    311         } catch(java.text.ParseException pe) {
    312             fail("ParseException was thrown.");
    313         }
    314 
    315         format.setNegativeSuffix("");
    316         assertEquals("", format.getNegativeSuffix());
    317 
    318         format.setNegativeSuffix(null);
    319         assertNull(format.getNegativeSuffix());
    320     }
    321 
    322     public void test_toLocalizedPattern() {
    323         DecimalFormat format = new DecimalFormat();
    324         format.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
    325         try {
    326             format.applyLocalizedPattern("#.#");
    327             assertEquals("Wrong pattern 1", "#0.#", format.toLocalizedPattern());
    328             format.applyLocalizedPattern("#.");
    329             assertEquals("Wrong pattern 2", "#0.", format.toLocalizedPattern());
    330             format.applyLocalizedPattern("#");
    331             assertEquals("Wrong pattern 3", "#", format.toLocalizedPattern());
    332             format.applyLocalizedPattern(".#");
    333             assertEquals("Wrong pattern 4", "#.0", format.toLocalizedPattern());
    334         } catch (Exception e) {
    335             fail("Unexpected exception " + e.toString());
    336         }
    337     }
    338 
    339     public void test_toPattern() {
    340         DecimalFormat format = new DecimalFormat();
    341         try {
    342             format.applyPattern("#.#");
    343             assertEquals("Wrong pattern 1", "#0.#", format.toPattern());
    344             format.applyPattern("#.");
    345             assertEquals("Wrong pattern 2", "#0.", format.toPattern());
    346             format.applyPattern("#");
    347             assertEquals("Wrong pattern 3", "#", format.toPattern());
    348             format.applyPattern(".#");
    349             assertEquals("Wrong pattern 4", "#.0", format.toPattern());
    350         } catch (Exception e) {
    351             fail("Unexpected exception " + e.toString());
    352         }
    353     }
    354     public void test_setGroupingUse() {
    355         DecimalFormat format = new DecimalFormat();
    356 
    357         StringBuffer buf = new StringBuffer();
    358         format.setGroupingUsed(false);
    359         format.format(new Long(1970), buf, new FieldPosition(0));
    360         assertEquals("1970", buf.toString());
    361         assertFalse(format.isGroupingUsed());
    362         format.format(new Long(1970), buf, new FieldPosition(0));
    363         assertEquals("19701970", buf.toString());
    364         assertFalse(format.isGroupingUsed());
    365 
    366         format.setGroupingUsed(true);
    367         format.format(new Long(1970), buf, new FieldPosition(0));
    368         assertEquals("197019701,970", buf.toString());
    369         assertTrue(format.isGroupingUsed());
    370     }
    371 
    372     public void test_Constructor() {
    373         // Test for method java.text.DecimalFormat()
    374         // the constructor form that specifies a pattern is equal to the form
    375         // constructed with no pattern and applying that pattern using the
    376         // applyPattern call
    377         try {
    378             DecimalFormat format1 = new DecimalFormat();
    379             format1.applyPattern("'$'1000.0000");
    380             DecimalFormat format2 = new DecimalFormat();
    381             format2.applyPattern("'$'1000.0000");
    382             assertTrue(
    383                     "Constructed format did not match applied format object",
    384                     format2.equals(format1));
    385             DecimalFormat format3 = new DecimalFormat("'$'1000.0000");
    386             assertTrue(
    387                     "Constructed format did not match applied format object",
    388                     format3.equals(format1));
    389             DecimalFormat format4 = new DecimalFormat("'$'8000.0000");
    390             assertTrue(
    391                     "Constructed format did not match applied format object",
    392                     !format4.equals(format1));
    393         } catch (Exception e) {
    394             fail("Unexpected exception " + e.toString());
    395         }
    396     }
    397 
    398     public void test_ConstructorLjava_lang_String() {
    399         // Test for method java.text.DecimalFormat(java.lang.String)
    400         // the constructor form that specifies a pattern is equal to the form
    401         // constructed with no pattern and applying that pattern using the
    402         // applyPattern call
    403         DecimalFormat format = new DecimalFormat("'$'0000.0000");
    404         DecimalFormat format1 = new DecimalFormat();
    405         format1.applyPattern("'$'0000.0000");
    406         assertTrue("Constructed format did not match applied format object",
    407                 format.equals(format1));
    408 
    409         String [] patterns = {"####.##", "######.######", "000000.000000",
    410                 "######.000000", "000000.######", " ###.###", "$#####.######",
    411                 "$$####.######", "%#,##,###,####", "#,##0.00;(#,##0.00)"};
    412 
    413         for(String str:patterns) {
    414             new DecimalFormat(str);
    415         }
    416 
    417         try {
    418             new DecimalFormat(null);
    419             fail("NullPointerException wasn't thrown.");
    420         } catch(NullPointerException npe){
    421             //expected
    422         }
    423 
    424         String [] incPatterns = {"%#,##,###,####'", "#.##0.00"};
    425         for(String str:incPatterns) {
    426             try {
    427                 new DecimalFormat(str);
    428                 fail("IllegalArgumentException wasn't thrown for pattern: " + str);
    429             } catch(IllegalArgumentException iae){
    430                 //expected
    431             }
    432         }
    433     }
    434 
    435     /**
    436      * Case 1: Try to construct object using correct pattern and fromat symbols.
    437      * Case 2: Try to construct object using null arguments.
    438      * Case 3: Try to construct object using incorrect pattern.
    439      */
    440     public void test_ConstructorLjava_lang_StringLjava_text_DecimalFormatSymbols() {
    441         try {
    442             // case 1: Try to construct object using correct pattern and fromat
    443             // symbols.
    444             DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.CANADA);
    445             DecimalFormat format1 = new DecimalFormat("'$'1000.0000", dfs);
    446             DecimalFormat format2 = new DecimalFormat();
    447             format2.applyPattern("'$'1000.0000");
    448             format2.setDecimalFormatSymbols(dfs);
    449             assertTrue(
    450                     "Constructed format did not match applied format object",
    451                     format2.equals(format1));
    452             assertTrue(
    453                     "Constructed format did not match applied format object",
    454                     !format1.equals(new DecimalFormat("'$'1000.0000",
    455                             new DecimalFormatSymbols(Locale.CHINA))));
    456 
    457             // case 2: Try to construct object using null arguments.
    458             try {
    459                 new DecimalFormat("'$'1000.0000", (DecimalFormatSymbols) null);
    460                 fail("Expected NullPointerException was not thrown");
    461             } catch (NullPointerException e) {
    462                 // expected
    463             }
    464             try {
    465                 new DecimalFormat(null, new DecimalFormatSymbols());
    466                 fail("Expected NullPointerException was not thrown");
    467             } catch (NullPointerException e) {
    468                 // expected
    469             }
    470             try {
    471                 new DecimalFormat(null, (DecimalFormatSymbols) null);
    472                 fail("Expected NullPointerException was not thrown");
    473             } catch (NullPointerException e) {
    474                 // expected
    475             }
    476 
    477             // case 3: Try to construct object using incorrect pattern.
    478             try {
    479                 new DecimalFormat("$'", new DecimalFormatSymbols());
    480                 fail("Expected IllegalArgumentException was not thrown");
    481             } catch (IllegalArgumentException e) {
    482                 // expected
    483             }
    484         } catch (Exception e) {
    485             fail("Unexpected exception " + e.toString());
    486         }
    487     }
    488 
    489     /**
    490      * Case 1: Try to apply correct variants of pattern.
    491      * Case 2: Try to apply malformed patten. Case 3: Try to apply null pattern.
    492      */
    493     public void test_applyLocalizedPatternLjava_lang_String() {
    494         DecimalFormat format = new DecimalFormat();
    495         try {
    496             // case 1: Try to apply correct variants of pattern.
    497             format.applyLocalizedPattern("#.#");
    498             assertEquals("Wrong pattern 1", "#0.#", format.toLocalizedPattern());
    499             format.applyLocalizedPattern("#.");
    500             assertEquals("Wrong pattern 2", "#0.", format.toLocalizedPattern());
    501             format.applyLocalizedPattern("#");
    502             assertEquals("Wrong pattern 3", "#", format.toLocalizedPattern());
    503             format.applyLocalizedPattern(".#");
    504             assertEquals("Wrong pattern 4", "#.0", format.toLocalizedPattern());
    505 
    506             // case 2: Try to apply malformed patten.
    507             try {
    508                 format.applyLocalizedPattern("'#,#:#0.0#;(#)");
    509                 fail("Expected IllegalArgumentException was not thrown");
    510             } catch (IllegalArgumentException e) {
    511                 // expected
    512             }
    513 
    514             // case 3: Try to apply null patern.
    515             try {
    516                 format.applyLocalizedPattern((String) null);
    517                 fail("Expected NullPointerException was not thrown");
    518             } catch (NullPointerException e) {
    519                 // expected
    520             }
    521         } catch (Exception e) {
    522             fail("Unexpected exception " + e.toString());
    523         }
    524     }
    525 
    526     public void test_applyPatternLjava_lang_String() {
    527         DecimalFormat format = new DecimalFormat("#.#");
    528         assertEquals("Wrong pattern 1", "#0.#", format.toPattern());
    529         format = new DecimalFormat("#.");
    530         assertEquals("Wrong pattern 2", "#0.", format.toPattern());
    531         format = new DecimalFormat("#");
    532         assertEquals("Wrong pattern 3", "#", format.toPattern());
    533         format = new DecimalFormat(".#");
    534         assertEquals("Wrong pattern 4", "#.0", format.toPattern());
    535 
    536         DecimalFormat decFormat = new DecimalFormat("#.#");
    537 
    538         try {
    539             decFormat.applyPattern(null);
    540             fail("NullPointerException was not thrown.");
    541         } catch(NullPointerException npe) {
    542             //expected
    543         }
    544 
    545         String [] incPatterns = {"%#,##,###,####'", "#.##0.00"};
    546         for(String str:incPatterns) {
    547             try {
    548                 decFormat.applyPattern(str);
    549                 fail("IllegalArgumentException was not thrown for pattern: " +
    550                         str);
    551             } catch(IllegalArgumentException  iae) {
    552                 //expected
    553             }
    554         }
    555     }
    556 
    557     // AndroidOnly: icu supports 2 grouping sizes
    558     public void test_applyPatternLjava_lang_String2() {
    559         DecimalFormat decFormat = new DecimalFormat("#.#");
    560         String [] patterns = {"####.##", "######.######", "000000.000000",
    561                 "######.000000", "000000.######", " ###.###", "$#####.######",
    562                 "$$####.######", "%#,##,###,####", "#,##0.00;(#,##0.00)",
    563                  "##.##-E"};
    564 
    565         String [] expResult = {"#0.##", "#0.######", "#000000.000000",
    566                 "#.000000", "#000000.######", " #0.###", "$#0.######",
    567                 "$$#0.######",
    568                 "%#,###,####", // icu only. icu supports two grouping sizes
    569                 "#,##0.00;(#,##0.00)",
    570                 "#0.##-'E'"}; // icu only. E in the suffix does not need to be
    571                               // quoted. This is done automatically.
    572 
    573         for (int i = 0; i < patterns.length; i++) {
    574             decFormat.applyPattern(patterns[i]);
    575             String result = decFormat.toPattern();
    576             assertEquals("Failed to apply following pattern: " + patterns[i] +
    577                     " expected: " + expResult[i] + " returned: " + result,
    578                     expResult[i], result);
    579         }
    580     }
    581 
    582     public void test_clone() {
    583         DecimalFormat format = (DecimalFormat) DecimalFormat
    584                 .getInstance(Locale.US);
    585         DecimalFormat cloned = (DecimalFormat) format.clone();
    586         assertEquals(cloned.getDecimalFormatSymbols(), format
    587                 .getDecimalFormatSymbols());
    588 
    589         format = new DecimalFormat("'$'0000.0000");
    590         DecimalFormat format1 = (DecimalFormat) (format.clone());
    591         // make sure the objects are equal
    592         assertTrue("Object's clone isn't equal!", format.equals(format1));
    593         // change the content of the clone and make sure it's not equal anymore
    594         // verifies that it's data is now distinct from the original
    595         format1.applyPattern("'$'0000.####");
    596         assertTrue("Object's changed clone should not be equal!", !format
    597                 .equals(format1));
    598     }
    599 
    600     private void compare(String testName, String format, String expected) {
    601         assertTrue(testName + " got: " + format + " expected: " + expected,
    602                 format.equals(expected));
    603     }
    604 
    605     private boolean compare(int count, String format, String expected) {
    606         boolean result = format.equals(expected);
    607         if (!result)
    608             System.out.println("Failure test: " + count + " got: " + format
    609                     + " expected: " + expected);
    610         return result;
    611     }
    612 
    613     public void test_formatDLjava_lang_StringBufferLjava_text_FieldPosition() {
    614         new Support_DecimalFormat(
    615                 "test_formatDLjava_lang_StringBufferLjava_text_FieldPosition")
    616                 .t_format_with_FieldPosition();
    617 
    618         int failCount = 0;
    619         BitSet failures = new BitSet();
    620 
    621         final DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US);
    622 
    623         DecimalFormat df = new DecimalFormat("00.0#E0", dfs);
    624         compare("00.0#E0: 0.0", df.format(0.0), "00.0E0");
    625         compare("00.0#E0: 1.0", df.format(1.0), "10.0E-1");
    626         compare("00.0#E0: 12.0", df.format(12.0), "12.0E0");
    627         compare("00.0#E0: 123.0", df.format(123.0), "12.3E1");
    628         compare("00.0#E0: 1234.0", df.format(1234.0), "12.34E2");
    629         compare("00.0#E0: 12346.0", df.format(12346.0), "12.35E3");
    630         compare("00.0#E0: 99999.0", df.format(99999.0), "10.0E4");
    631         compare("00.0#E0: 1.2", df.format(1.2), "12.0E-1");
    632         compare("00.0#E0: 12.3", df.format(12.3), "12.3E0");
    633         compare("00.0#E0: 123.4", df.format(123.4), "12.34E1");
    634         compare("00.0#E0: 1234.6", df.format(1234.6), "12.35E2");
    635         compare("00.0#E0: 9999.9", df.format(9999.9), "10.0E3");
    636         compare("00.0#E0: 0.1", df.format(0.1), "10.0E-2");
    637         compare("00.0#E0: 0.12", df.format(0.12), "12.0E-2");
    638         compare("00.0#E0: 0.123", df.format(0.123), "12.3E-2");
    639         compare("00.0#E0: 0.1234", df.format(0.1234), "12.34E-2");
    640         compare("00.0#E0: 0.12346", df.format(0.12346), "12.35E-2");
    641         compare("00.0#E0: 0.99999", df.format(0.99999), "10.0E-1");
    642         compare("00.0#E0: -0.0", df.format(-0.0), "-00.0E0");
    643         compare("00.0#E0: -1.0", df.format(-1.0), "-10.0E-1");
    644         compare("00.0#E0: -12.0", df.format(-12.0), "-12.0E0");
    645         compare("00.0#E0: -123.0", df.format(-123.0), "-12.3E1");
    646         compare("00.0#E0: -1234.0", df.format(-1234.0), "-12.34E2");
    647         compare("00.0#E0: -12346.0", df.format(-12346.0), "-12.35E3");
    648         compare("00.0#E0: -99999.0", df.format(-99999.0), "-10.0E4");
    649 
    650         df = new DecimalFormat("##0.0E0", dfs);
    651         compare("##0.0E0: -0.0", df.format(-0.0), "-0.0E0");
    652         compare("##0.0E0: 0.0", df.format(0.0), "0.0E0");
    653         compare("##0.0E0: 1.0", df.format(1.0), "1.0E0");
    654         compare("##0.0E0: 12.0", df.format(12.0), "12E0");
    655         compare("##0.0E0: 123.0", df.format(123.0), "123E0");  // Android fails, here!
    656         compare("##0.0E0: 1234.0", df.format(1234.0), "1.234E3");
    657         compare("##0.0E0: 12346.0", df.format(12346.0), "12.35E3");
    658         // Fails in JDK 1.2.2
    659         if (!compare(failCount, df.format(99999.0), "100E3"))
    660             failures.set(failCount);
    661         failCount++;
    662         compare("##0.0E0: 999999.0", df.format(999999.0), "1.0E6");
    663 
    664         df = new DecimalFormat("#00.0##E0", dfs);
    665         compare("#00.0##E0: 0.1", df.format(0.1), "100E-3");
    666         compare("#00.0##E0: 0.12", df.format(0.12), "120E-3");
    667         compare("#00.0##E0: 0.123", df.format(0.123), "123E-3");
    668         compare("#00.0##E0: 0.1234", df.format(0.1234), "123.4E-3");
    669         compare("#00.0##E0: 0.1234567", df.format(0.1234567), "123.457E-3");
    670         compare("#00.0##E0: 0.01", df.format(0.01), "10.0E-3");
    671         compare("#00.0##E0: 0.012", df.format(0.012), "12.0E-3");
    672         compare("#00.0##E0: 0.0123", df.format(0.0123), "12.3E-3");
    673         compare("#00.0##E0: 0.01234", df.format(0.01234), "12.34E-3");
    674         compare("#00.0##E0: 0.01234567", df.format(0.01234567), "12.3457E-3");
    675         compare("#00.0##E0: 0.001", df.format(0.001), "1.00E-3");
    676         compare("#00.0##E0: 0.0012", df.format(0.0012), "1.20E-3");
    677         compare("#00.0##E0: 0.00123", df.format(0.00123), "1.23E-3");
    678         compare("#00.0##E0: 0.001234", df.format(0.001234), "1.234E-3");
    679         compare("#00.0##E0: 0.001234567", df.format(0.001234567), "1.23457E-3");
    680         compare("#00.0##E0: 0.0001", df.format(0.0001), "100E-6");
    681         compare("#00.0##E0: 0.00012", df.format(0.00012), "120E-6");
    682         compare("#00.0##E0: 0.000123", df.format(0.000123), "123E-6");
    683         compare("#00.0##E0: 0.0001234", df.format(0.0001234), "123.4E-6");
    684         compare("#00.0##E0: 0.0001234567", df.format(0.0001234567),
    685                 "123.457E-6");
    686 
    687         // Fails in JDK 1.2.2
    688         if (!compare(failCount, df.format(0.0), "0.00E0"))
    689             failures.set(failCount);
    690         failCount++;
    691         compare("#00.0##E0: 1.0", df.format(1.0), "1.00E0");
    692         compare("#00.0##E0: 12.0", df.format(12.0), "12.0E0");
    693         compare("#00.0##E0: 123.0", df.format(123.0), "123E0");
    694         compare("#00.0##E0: 1234.0", df.format(1234.0), "1.234E3");
    695         compare("#00.0##E0: 12345.0", df.format(12345.0), "12.345E3");
    696         compare("#00.0##E0: 123456.0", df.format(123456.0), "123.456E3");
    697         compare("#00.0##E0: 1234567.0", df.format(1234567.0), "1.23457E6");
    698         compare("#00.0##E0: 12345678.0", df.format(12345678.0), "12.3457E6");
    699         compare("#00.0##E0: 99999999.0", df.format(99999999.0), "100E6");
    700 
    701         df = new DecimalFormat("#.0E0", dfs);
    702         compare("#.0E0: -0.0", df.format(-0.0), "-.0E0");
    703         compare("#.0E0: 0.0", df.format(0.0), ".0E0");
    704         compare("#.0E0: 1.0", df.format(1.0), ".1E1");
    705         compare("#.0E0: 12.0", df.format(12.0), ".12E2");
    706         compare("#.0E0: 123.0", df.format(123.0), ".12E3");
    707         compare("#.0E0: 1234.0", df.format(1234.0), ".12E4");
    708         compare("#.0E0: 9999.0", df.format(9999.0), ".1E5");
    709 
    710         df = new DecimalFormat("0.#E0", dfs);
    711         compare("0.#E0: -0.0", df.format(-0.0), "-0E0");
    712         compare("0.#E0: 0.0", df.format(0.0), "0E0");
    713         compare("0.#E0: 1.0", df.format(1.0), "1E0");
    714         compare("0.#E0: 12.0", df.format(12.0), "1.2E1");
    715         compare("0.#E0: 123.0", df.format(123.0), "1.2E2");
    716         compare("0.#E0: 1234.0", df.format(1234.0), "1.2E3");
    717         compare("0.#E0: 9999.0", df.format(9999.0), "1E4");
    718 
    719         df = new DecimalFormat(".0E0", dfs);
    720         compare(".0E0: -0.0", df.format(-0.0), "-.0E0");
    721         compare(".0E0: 0.0", df.format(0.0), ".0E0");
    722         compare(".0E0: 1.0", df.format(1.0), ".1E1");
    723         compare(".0E0: 12.0", df.format(12.0), ".1E2");
    724         compare(".0E0: 123.0", df.format(123.0), ".1E3");
    725         compare(".0E0: 1234.0", df.format(1234.0), ".1E4");
    726         compare(".0E0: 9999.0", df.format(9999.0), ".1E5");
    727 
    728         df = new DecimalFormat("0.E0", dfs);
    729         // Fails in JDK 1.2.2
    730         if (!compare(failCount, df.format(0.0), "0.E0"))
    731             failures.set(failCount);
    732         failCount++;
    733         if (!compare(failCount, df.format(1.0), "1.E0"))
    734             failures.set(failCount);
    735         failCount++;
    736         if (!compare(failCount, df.format(12.0), "1.E1"))
    737             failures.set(failCount);
    738         failCount++;
    739         if (!compare(failCount, df.format(123.0), "1.E2"))
    740             failures.set(failCount);
    741         failCount++;
    742         if (!compare(failCount, df.format(1234.0), "1.E3"))
    743             failures.set(failCount);
    744         failCount++;
    745         if (!compare(failCount, df.format(9999.0), "1.E4"))
    746             failures.set(failCount);
    747         failCount++;
    748 
    749         df = new DecimalFormat("##0.00#E0", dfs);
    750         compare("##0.00#E0: 0.1", df.format(0.1), "100E-3");
    751         compare("##0.00#E0: 0.1234567", df.format(0.1234567), "123.457E-3");
    752         compare("##0.00#E0: 0.9999999", df.format(0.9999999), "1.00E0");
    753         compare("##0.00#E0: 0.01", df.format(0.01), "10.0E-3");
    754         compare("##0.00#E0: 0.01234567", df.format(0.01234567), "12.3457E-3");
    755         compare("##0.00#E0: 0.09999999", df.format(0.09999999), "100E-3");
    756         compare("##0.00#E0: 0.001", df.format(0.001), "1.00E-3");
    757         compare("##0.00#E0: 0.001234567", df.format(0.001234567), "1.23457E-3");
    758         compare("##0.00#E0: 0.009999999", df.format(0.009999999), "10.0E-3");
    759         compare("##0.00#E0: 0.0001", df.format(0.0001), "100E-6");
    760         compare("##0.00#E0: 0.0001234567", df.format(0.0001234567),
    761                 "123.457E-6");
    762         compare("##0.00#E0: 0.0009999999", df.format(0.0009999999), "1.00E-3");
    763 
    764         df = new DecimalFormat("###0.00#E0", dfs);
    765         compare("###0.00#E0: 0.1", df.format(0.1), "1000E-4");
    766         compare("###0.00#E0: 0.12345678", df.format(0.12345678), "1234.568E-4");
    767         compare("###0.00#E0: 0.99999999", df.format(0.99999999), "1.00E0");
    768         compare("###0.00#E0: 0.01", df.format(0.01), "100E-4");
    769         compare("###0.00#E0: 0.012345678", df.format(0.012345678),
    770                 "123.4568E-4");
    771         compare("###0.00#E0: 0.099999999", df.format(0.099999999), "1000E-4");
    772         compare("###0.00#E0: 0.001", df.format(0.001), "10.0E-4");
    773         compare("###0.00#E0: 0.0012345678", df.format(0.0012345678),
    774                 "12.34568E-4");
    775         compare("###0.00#E0: 0.0099999999", df.format(0.0099999999), "100E-4");
    776         compare("###0.00#E0: 0.0001", df.format(0.0001), "1.00E-4");
    777         compare("###0.00#E0: 0.00012345678", df.format(0.00012345678),
    778                 "1.234568E-4");
    779         compare("###0.00#E0: 0.00099999999", df.format(0.00099999999),
    780                 "10.0E-4");
    781         // Fails in JDK 1.2.2
    782         if (!compare(failCount, df.format(0.00001), "1000E-8"))
    783             failures.set(failCount);
    784         failCount++;
    785         compare("###0.00#E0: 0.000012345678", df.format(0.000012345678),
    786                 "1234.568E-8");
    787         compare("###0.00#E0: 0.000099999999", df.format(0.000099999999),
    788                 "1.00E-4");
    789 
    790         df = new DecimalFormat("###0.0#E0", dfs);
    791         compare("###0.0#E0: 0.1", df.format(0.1), "1000E-4");
    792         compare("###0.0#E0: 0.1234567", df.format(0.1234567), "1234.57E-4");
    793         compare("###0.0#E0: 0.9999999", df.format(0.9999999), "1.0E0");
    794         // Fails in JDK 1.2.2
    795         if (!compare(failCount, df.format(0.01), "100E-4"))
    796             failures.set(failCount);
    797         failCount++;
    798         compare("###0.0#E0: 0.01234567", df.format(0.01234567), "123.457E-4");
    799         compare("###0.0#E0: 0.09999999", df.format(0.09999999), "1000E-4");
    800         compare("###0.0#E0: 0.001", df.format(0.001), "10E-4");
    801         compare("###0.0#E0: 0.001234567", df.format(0.001234567), "12.3457E-4");
    802         // Fails in JDK 1.2.2
    803         if (!compare(failCount, df.format(0.009999999), "100E-4"))
    804             failures.set(failCount);
    805         failCount++;
    806         compare("###0.0#E0: 0.0001", df.format(0.0001), "1.0E-4");
    807         compare("###0.0#E0: 0.0001234567", df.format(0.0001234567),
    808                 "1.23457E-4");
    809         compare("###0.0#E0: 0.0009999999", df.format(0.0009999999), "10E-4");
    810         // Fails in JDK 1.2.2
    811         if (!compare(failCount, df.format(0.00001), "1000E-8"))
    812             failures.set(failCount);
    813         failCount++;
    814         compare("###0.0#E0: 0.00001234567", df.format(0.00001234567),
    815                 "1234.57E-8");
    816         compare("###0.0#E0: 0.00009999999", df.format(0.00009999999), "1.0E-4");
    817 
    818         assertTrue("Failed " + failures + " of " + failCount,
    819                 failures.length() == 0);
    820 
    821         String formatString = "##0.#";
    822         df = new DecimalFormat(formatString, dfs);
    823         df.setMinimumFractionDigits(30);
    824         compare(formatString + ": 0.000000000000000000000000000000", df
    825                 .format(0.0), "0.000000000000000000000000000000");
    826         compare(formatString + ": -0.000000000000000000000000000000", df
    827                 .format(-0.0), "-0.000000000000000000000000000000");
    828         compare(formatString + ": 1.000000000000000000000000000000", df
    829                 .format(1.0), "1.000000000000000000000000000000");
    830         compare(formatString + ": -1.000000000000000000000000000000", df
    831                 .format(-1.0), "-1.000000000000000000000000000000");
    832 
    833         df = new DecimalFormat(formatString);
    834         df.setMaximumFractionDigits(30);
    835         compare(formatString + ": 0", df.format(0.0), "0");
    836         compare(formatString + ": -0", df.format(-0.0), "-0");
    837         compare(formatString + ": 1", df.format(1.0), "1");
    838         compare(formatString + ": -1", df.format(-1.0), "-1");
    839     }
    840 
    841     public void test_formatD() {
    842         DecimalFormat format = (DecimalFormat) NumberFormat
    843                 .getInstance(Locale.ENGLISH);
    844         format.setGroupingUsed(false);
    845         format.setMaximumFractionDigits(400);
    846         assertEquals("123456789012345", format.format(123456789012345.));
    847         assertEquals("1", "12345678901234.5", format.format(12345678901234.5));
    848         assertEquals("2", "1234567890123.25", format.format(1234567890123.25));
    849         assertEquals("3", "999999999999.375", format.format(999999999999.375));
    850         assertEquals("4", "99999999999.0625", format.format(99999999999.0625));
    851         assertEquals("5", "9999999999.03125", format.format(9999999999.03125));
    852         assertEquals("6", "999999999.015625", format.format(999999999.015625));
    853         assertEquals("7", "99999999.0078125", format.format(99999999.0078125));
    854         assertEquals("8", "9999999.00390625", format.format(9999999.00390625));
    855         assertEquals("9", "999999.001953125", format.format(999999.001953125));
    856         assertEquals("10", "9999.00048828125", format.format(9999.00048828125));
    857         assertEquals("11", "999.000244140625", format.format(999.000244140625));
    858         assertEquals("12", "99.0001220703125", format.format(99.0001220703125));
    859         assertEquals("13", "9.00006103515625", format.format(9.00006103515625));
    860         assertEquals("14", "0.000030517578125", format.format(0.000030517578125));
    861     }
    862 
    863 
    864     public void test_getNegativePrefix() {
    865         DecimalFormat df = new DecimalFormat();
    866         try {
    867             df.setNegativePrefix("--");
    868             assertTrue("Incorrect negative prefix", df.getNegativePrefix()
    869                     .equals("--"));
    870         } catch (Exception e) {
    871             fail("Unexpected exception " + e.toString());
    872         }
    873     }
    874 
    875     public void test_getNegativeSuffix() {
    876         DecimalFormat df = new DecimalFormat();
    877         try {
    878             df.setNegativeSuffix("&");
    879             assertTrue("Incorrect negative suffix", df.getNegativeSuffix()
    880                     .equals("&"));
    881         } catch (Exception e) {
    882             fail("Unexpected exception " + e.toString());
    883         }
    884     }
    885 
    886     public void test_getPositivePrefix() {
    887         DecimalFormat df = new DecimalFormat();
    888         try {
    889             df.setPositivePrefix("++");
    890             assertTrue("Incorrect positive prefix", df.getPositivePrefix()
    891                     .equals("++"));
    892         } catch (Exception e) {
    893             fail("Unexpected exception " + e.toString());
    894         }
    895     }
    896 
    897     public void test_getPositiveSuffix() {
    898         DecimalFormat df = new DecimalFormat();
    899         try {
    900             df.setPositiveSuffix("%");
    901             assertTrue("Incorrect positive prefix", df.getPositiveSuffix()
    902                     .equals("%"));
    903         } catch (Exception e) {
    904             fail("Unexpected exception " + e.toString());
    905         }
    906     }
    907 
    908     public void test_hashCode() {
    909         try {
    910             DecimalFormat df1 = new DecimalFormat();
    911             DecimalFormat df2 = (DecimalFormat) df1.clone();
    912             assertTrue("Hash codes of equals object are not equal", df2
    913                     .hashCode() == df1.hashCode());
    914         } catch (Exception e) {
    915             fail("Unexpected exception " + e.toString());
    916         }
    917     }
    918 
    919     public void test_parseLjava_lang_StringLjava_text_ParsePosition() {
    920         DecimalFormat format = (DecimalFormat) NumberFormat
    921                 .getNumberInstance(Locale.ENGLISH);
    922         ParsePosition pos = new ParsePosition(0);
    923         Number result = format.parse("9223372036854775807", pos);
    924         assertTrue("Wrong result type for Long.MAX_VALUE",
    925                 result.getClass() == Long.class);
    926         assertEquals("Wrong result Long.MAX_VALUE",
    927                 Long.MAX_VALUE, result.longValue());
    928         pos = new ParsePosition(0);
    929         result = format.parse("-9223372036854775808", pos);
    930         assertTrue("Wrong result type for Long.MIN_VALUE",
    931                 result.getClass() == Long.class);
    932         assertTrue("Wrong result Long.MIN_VALUE: " + result.longValue(), result
    933                 .longValue() == Long.MIN_VALUE);
    934         pos = new ParsePosition(0);
    935         result = format.parse("9223372036854775808", pos);
    936         assertTrue("Wrong result type for Long.MAX_VALUE+1",
    937                 result.getClass() == Double.class);
    938         assertEquals("Wrong result Long.MAX_VALUE + 1",
    939                 (double) Long.MAX_VALUE + 1, result.doubleValue());
    940         pos = new ParsePosition(0);
    941         result = format.parse("-9223372036854775809", pos);
    942         assertTrue("Wrong result type for Long.MIN_VALUE - 1",
    943                 result.getClass() == Double.class);
    944         assertEquals("Wrong result Long.MIN_VALUE - 1",
    945                 (double) Long.MIN_VALUE - 1, result.doubleValue());
    946 
    947         pos = new ParsePosition(0);
    948         result = format.parse("18446744073709551629", pos);
    949         assertTrue("Wrong result type for overflow",
    950                 result.getClass() == Double.class);
    951         assertEquals("Wrong result for overflow",
    952                 18446744073709551629d, result.doubleValue());
    953 
    954         pos = new ParsePosition(0);
    955         result = format.parse("42325917317067571199", pos);
    956         assertTrue("Wrong result type for overflow a: " + result, result
    957                 .getClass() == Double.class);
    958         assertTrue("Wrong result for overflow a: " + result, result
    959                 .doubleValue() == 42325917317067571199d);
    960         pos = new ParsePosition(0);
    961         result = format.parse("4232591731706757119E1", pos);
    962         assertTrue("Wrong result type for overflow b: " + result, result
    963                 .getClass() == Double.class);
    964         assertEquals("Wrong result for overflow b: " + result,
    965                 42325917317067571190d, result.doubleValue());
    966         pos = new ParsePosition(0);
    967         result = format.parse(".42325917317067571199E20", pos);
    968         assertTrue("Wrong result type for overflow c: " + result, result
    969                 .getClass() == Double.class);
    970         assertTrue("Wrong result for overflow c: " + result, result
    971                 .doubleValue() == 42325917317067571199d);
    972         pos = new ParsePosition(0);
    973         result = format.parse("922337203685477580.9E1", pos);
    974         assertTrue("Wrong result type for overflow d: " + result, result
    975                 .getClass() == Double.class);
    976         assertTrue("Wrong result for overflow d: " + result, result
    977                 .doubleValue() == 9223372036854775809d);
    978         pos = new ParsePosition(0);
    979         result = format.parse("9.223372036854775809E18", pos);
    980         assertTrue("Wrong result type for overflow e: " + result, result
    981                 .getClass() == Double.class);
    982         assertTrue("Wrong result for overflow e: " + result, result
    983                 .doubleValue() == 9223372036854775809d);
    984 
    985         // test parse with multipliers
    986         format.setMultiplier(100);
    987         result = format.parse("9223372036854775807", new ParsePosition(0));
    988         assertEquals("Wrong result type multiplier 100: " + result, Long.class, result.getClass());
    989         // RI on windows and linux both answer with a slightly rounded result
    990         assertTrue("Wrong result for multiplier 100: " + result, result
    991                 .longValue() == 92233720368547760L);
    992         format.setMultiplier(1000);
    993         result = format.parse("9223372036854775807", new ParsePosition(0));
    994         assertTrue("Wrong result type multiplier 1000: " + result, result
    995                 .getClass() == Long.class);
    996         assertTrue("Wrong result for multiplier 1000: " + result, result
    997                 .longValue() == 9223372036854776L);
    998 
    999         format.setMultiplier(10000);
   1000         result = format.parse("9223372036854775807", new ParsePosition(0));
   1001         assertTrue("Wrong result type multiplier 10000: " + result, result
   1002                 .getClass() == Double.class);
   1003         assertTrue("Wrong result for multiplier 10000: " + result, result
   1004                 .doubleValue() == 922337203685477.5807d);
   1005 
   1006     }
   1007 }
   1008