1 /* Licensed to the Apache Software Foundation (ASF) under one or more 2 * contributor license agreements. See the NOTICE file distributed with 3 * this work for additional information regarding copyright ownership. 4 * The ASF licenses this file to You under the Apache License, Version 2.0 5 * (the "License"); you may not use this file except in compliance with 6 * the License. You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package org.apache.harmony.tests.java.lang; 18 19 import java.util.Locale; 20 21 import junit.framework.TestCase; 22 23 public class DoubleTest extends TestCase { 24 private static final long rawBitsFor3_4en324ToN1[] = { 0x1L, 0x7L, 0x45L, 0x2b0L, 0x1ae2L, 25 0x10cd1L, 0xa8028L, 0x69018dL, 0x41a0f7eL, 0x29049aedL, 0x19a2e0d44L, 26 0x1005cc84acL, 0xa039fd2ebdL, 0x64243e3d361L, 0x3e96a6e641c6L, 0x271e284fe91b8L, 27 0x1872d931f1b131L, 0x4e8f8f7e6e1d7dL, 0x8319b9af04d26eL, 0xb7e0281ac6070aL, 28 0xedd832217788ccL, 0x122a71f54eab580L, 0x15750e72a2562e0L, 0x18d2520f4aebb98L, 29 0x1c2373498ed353fL, 0x1f6c501bf28828eL, 0x22c76422ef2a332L, 0x261c9e95d57a5ffL, 30 0x2963c63b4ad8f7fL, 0x2cbcb7ca1d8f35fL, 0x3015f2de527981bL, 0x335b6f95e717e22L, 31 0x36b24b7b60dddabL, 0x3a0f6f2d1c8aa8bL, 0x3d534af863ad52dL, 0x40a81db67c98a79L, 32 0x440912920ddf68bL, 0x474b5736915742eL, 0x4a9e2d0435ad13aL, 0x4e02dc22a18c2c4L, 33 0x5143932b49ef375L, 0x549477f61c6b052L, 0x57f995f3a385c67L, 0x5b3bfdb846339c0L, 34 0x5e8afd2657c0830L, 0x61edbc6fedb0a3dL, 0x653495c5f48e666L, 0x6881bb3771b1fffL, 35 0x6be22a054e1e7ffL, 0x6f2d5a4350d30ffL, 0x7278b0d42507d3fL, 0x75d6dd092e49c8fL, 36 0x79264a25bcee1daL, 0x7c6fdcaf2c29a50L, 0x7fcbd3daf7340e4L, 0x831f6468da8088eL, 37 0x86673d831120ab2L, 0x89c10ce3d568d5fL, 0x8d18a80e656185bL, 0x905ed211feb9e72L, 38 0x93b686967e6860eL, 0x9712141e0f013c9L, 0x9a56992592c18bbL, 0x9dac3f6ef771eeaL, 39 0xa10ba7a55aa7352L, 0xa44e918eb151027L, 0xa7a235f25da5430L, 0xab0561b77a8749eL, 40 0xae46ba2559291c6L, 0xb19868aeaf73637L, 0xb4fe82da5b503c5L, 0xb83f11c8791225bL, 41 0xbb8ed63a9756af2L, 0xbef28bc93d2c5afL, 0xc237975dc63bb8dL, 0xc5857d3537caa70L, 42 0xc8e6dc8285bd50cL, 0xcc3049d19396528L, 0xcf7c5c45f87be72L, 0xd2db7357769ae0eL, 43 0xd6292816aa20cc9L, 0xd973721c54a8ffbL, 0xdcd04ea369d33faL, 0xe0223126222407cL, 44 0xe36abd6faaad09bL, 0xe6c56ccb95584c2L, 0xea1b63ff3d572f9L, 0xed623cff0cacfb8L, 45 0xf0bacc3ecfd83a5L, 0xf414bfa741e7247L, 0xf759ef911260ed9L, 0xfab06b7556f9290L, 46 0xfe0e4329565bb9aL, 0x10151d3f3abf2a80L, 0x104a648f096ef520L, 0x10807ed965e55934L, 47 0x10b49e8fbf5eaf81L, 0x10e9c633af365b61L, 0x11201be04d81f91dL, 0x115422d860e27764L, 48 0x11892b8e791b153dL, 0x11bf76721761da8cL, 0x11f3aa074e9d2898L, 0x12289489224472beL, 49 0x125eb9ab6ad58f6dL, 0x1293340b22c579a4L, 0x12c8010deb76d80dL, 0x12fe015166548e11L, 50 0x1332c0d2dff4d8caL, 0x1367710797f20efdL, 0x139d4d497dee92bcL, 0x13d2504deeb51bb6L, 51 0x1406e4616a6262a3L, 0x143c9d79c4fafb4cL, 0x1471e26c1b1cdd0fL, 0x14a65b0721e41453L, 52 0x14dbf1c8ea5d1968L, 0x1511771d927a2fe1L, 0x1545d4e4f718bbd9L, 0x157b4a1e34deead0L, 53 0x15b10e52e10b52c2L, 0x15e551e7994e2772L, 0x161aa6617fa1b14fL, 0x1650a7fcefc50ed1L, 54 0x1684d1fc2bb65286L, 0x16ba067b36a3e727L, 0x16f0440d02267078L, 0x1724551042b00c96L, 55 0x17596a54535c0fbcL, 0x178fc4e9683313abL, 0x17c3db11e11fec4bL, 0x17f8d1d65967e75eL, 56 0x182f064befc1e135L, 0x186363ef75d92cc1L, 0x18983ceb534f77f1L, 0x18ce4c26282355eeL, 57 0x1902ef97d91615b5L, 0x1937ab7dcf5b9b22L, 0x196d965d433281eaL, 0x19a27dfa49ff9132L, 58 0x19d71d78dc7f757fL, 0x1a0ce4d7139f52dfL, 0x1a420f066c4393cbL, 0x1a7692c8075478beL, 59 0x1aac377a092996edL, 0x1ae1a2ac45b9fe54L, 0x1b160b5757287de9L, 0x1b4b8e2d2cf29d64L, 60 0x1b8138dc3c17a25eL, 0x1bb587134b1d8af6L, 0x1beae8d81de4edb4L, 0x1c20d18712af1490L, 61 0x1c5505e8d75ad9b4L, 0x1c8a47630d319021L, 0x1cc06c9de83efa15L, 0x1cf487c5624eb89aL, 62 0x1d29a9b6bae266c1L, 0x1d600a1234cd8038L, 0x1d940c96c200e046L, 0x1dc90fbc72811858L, 63 0x1dff53ab8f215e6eL, 0x1e33944b3974db05L, 0x1e68795e07d211c6L, 0x1e9e97b589c69637L, 64 0x1ed31ed1761c1de3L, 0x1f07e685d3a3255bL, 0x1f3de027488beeb2L, 0x1f72ac188d57752fL, 65 0x1fa7571eb0ad527bL, 0x1fdd2ce65cd8a71aL, 0x20123c0ffa076870L, 0x2046cb13f889428cL, 66 0x207c7dd8f6ab932fL, 0x20b1cea79a2b3bfeL, 0x20e6425180b60afdL, 0x211bd2e5e0e38dbcL, 67 0x215163cfac8e3896L, 0x2185bcc397b1c6bbL, 0x21bb2bf47d9e386aL, 0x21f0fb78ce82e342L, 68 0x22253a5702239c13L, 0x225a88ecc2ac8317L, 0x22909593f9abd1efL, 0x22c4baf8f816c66aL, 69 0x22f9e9b7361c7805L, 0x2330321281d1cb03L, 0x23643e9722463dc4L, 0x23994e3cead7cd35L, 70 0x23cfa1cc258dc082L, 0x2403c51f97789851L, 0x2438b6677d56be65L, 0x246ee4015cac6dffL, 71 0x24a34e80d9ebc4bfL, 0x24d822211066b5efL, 0x250e2aa95480636bL, 0x2542daa9d4d03e23L, 72 0x257791544a044dabL, 0x25ad75a95c856116L, 0x25e26989d9d35caeL, 0x261703ec504833d9L, 73 0x264cc4e7645a40d0L, 0x2681fb109eb86882L, 0x26b679d4c66682a2L, 0x26ec1849f800234bL, 74 0x27218f2e3b00160fL, 0x2755f2f9c9c01b93L, 0x278b6fb83c302277L, 0x27c125d3259e158bL, 75 0x27f56f47ef059aedL, 0x282acb19eac701a8L, 0x2860bef032bc6109L, 0x2894eeac3f6b794cL, 76 0x28ca2a574f46579eL, 0x29005a76918bf6c3L, 0x2934711435eef474L, 0x29698d59436ab191L, 77 0x299ff0af94455df5L, 0x29d3f66dbcab5ab9L, 0x2a08f4092bd63167L, 0x2a3f310b76cbbdc1L, 78 0x2a737ea72a3f5699L, 0x2aa85e50f4cf2c3fL, 0x2ade75e53202f74fL, 0x2b1309af3f41da91L, 79 0x2b47cc1b0f125135L, 0x2b7dbf21d2d6e583L, 0x2bb2977523c64f72L, 0x2be73d526cb7e34eL, 80 0x2c1d0ca707e5dc22L, 0x2c5227e864efa995L, 0x2c86b1e27e2b93faL, 0x2cbc5e5b1db678f9L, 81 0x2cf1baf8f2920b9cL, 0x2d2629b72f368e83L, 0x2d5bb424fb043223L, 0x2d9150971ce29f56L, 82 0x2dc5a4bce41b472bL, 0x2dfb0dec1d2218f6L, 0x2e30e8b392354f9aL, 0x2e6522e076c2a380L, 83 0x2e9a6b9894734c61L, 0x2ed0833f5cc80fbcL, 0x2f04a40f33fa13abL, 0x2f39cd1300f89896L, 84 0x2f70202be09b5f5eL, 0x2fa42836d8c23735L, 0x2fd932448ef2c503L, 0x300f7ed5b2af7643L, 85 0x3043af458fada9eaL, 0x30789b16f3991465L, 0x30aec1dcb07f597eL, 0x30e33929ee4f97efL, 86 0x3118077469e37deaL, 0x314e0951845c5d65L, 0x3182c5d2f2b9ba5fL, 0x31b77747af6828f7L, 87 0x31ed55199b423335L, 0x3222553001096001L, 0x3256ea7c014bb801L, 0x328ca51b019ea601L, 88 0x32c1e730e10327c1L, 0x32f660fd1943f1b1L, 0x332bf93c5f94ee1dL, 0x33617bc5bbbd14d2L, 89 0x3395dab72aac5a07L, 0x33cb5164f5577089L, 0x340112df1956a655L, 0x34355796dfac4febL, 90 0x346aad7c979763e5L, 0x34a0ac6ddebe9e6fL, 0x34d4d789566e460bL, 0x350a0d6bac09d78eL, 91 0x354048634b8626b9L, 0x35745a7c1e67b067L, 0x35a9711b26019c81L, 0x35dfcd61ef8203a1L, 92 0x3613e05d35b14245L, 0x3648d874831d92d6L, 0x367f0e91a3e4f78bL, 0x36b3691b066f1ab7L, 93 0x36e84361c80ae165L, 0x371e543a3a0d99beL, 0x3752f4a464488017L, 0x3787b1cd7d5aa01cL, 94 0x37bd9e40dcb14823L, 0x37f282e889eecd16L, 0x382723a2ac6a805cL, 0x385cec8b57852073L, 95 0x389213d716b33448L, 0x38c698ccdc60015aL, 0x38fc3f00137801b0L, 0x3931a7600c2b010eL, 96 0x396611380f35c151L, 0x399b9586130331a6L, 0x39d13d73cbe1ff08L, 0x3a058cd0beda7ec9L, 97 0x3a3af004ee911e7cL, 0x3a70d603151ab30dL, 0x3aa50b83da615fd1L, 0x3ada4e64d0f9b7c5L, 98 0x3b1070ff029c12dbL, 0x3b448d3ec3431792L, 0x3b79b08e7413dd76L, 0x3bb00e59088c6a6aL, 99 0x3be411ef4aaf8504L, 0x3c19166b1d5b6646L, 0x3c4f5c05e4b23fd7L, 0x3c839983aeef67e6L, 100 0x3cb87fe49aab41e0L, 0x3cee9fddc1561258L, 0x3d2323ea98d5cb77L, 0x3d57ece53f0b3e55L, 101 0x3d8de81e8ece0deaL, 0x3dc2b1131940c8b2L, 0x3df75d57df90fadfL, 0x3e2d34add7753996L, 102 0x3e6240eca6a943feL, 0x3e96d127d05394fdL, 0x3ecc8571c4687a3dL, 0x3f01d3671ac14c66L, 103 0x3f364840e1719f80L, 0x3f6bda5119ce075fL, 0x3fa16872b020c49cL, 0x3fd5c28f5c28f5c3L, 104 0x400B333333333333L }; 105 106 private static final long rawBitsFor1_2e0To309[] = { 0x3ff3333333333333L, 0x4028000000000000L, 107 0x405e000000000000L, 0x4092c00000000000L, 0x40c7700000000000L, 0x40fd4c0000000000L, 108 0x41324f8000000000L, 0x4166e36000000000L, 0x419c9c3800000000L, 0x41d1e1a300000000L, 109 0x42065a0bc0000000L, 0x423bf08eb0000000L, 0x427176592e000000L, 0x42a5d3ef79800000L, 110 0x42db48eb57e00000L, 0x43110d9316ec0000L, 0x434550f7dca70000L, 0x437aa535d3d0c000L, 111 0x43b0a741a4627800L, 0x43e4d1120d7b1600L, 0x441a055690d9db80L, 0x445043561a882930L, 112 0x4484542ba12a337cL, 0x44b969368974c05bL, 0x44efc3842bd1f072L, 0x4523da329b633647L, 113 0x4558d0bf423c03d9L, 0x458f04ef12cb04cfL, 0x45c363156bbee301L, 0x45f83bdac6ae9bc2L, 114 0x462e4ad1785a42b2L, 0x4662eec2eb3869afL, 0x4697aa73a606841bL, 0x46cd95108f882522L, 115 0x47027d2a59b51735L, 0x47371c74f0225d03L, 0x476ce3922c2af443L, 0x47a20e3b5b9ad8aaL, 116 0x47d691ca32818ed5L, 0x480c363cbf21f28aL, 0x4841a1e5f7753796L, 0x48760a5f7552857cL, 117 0x48ab8cf752a726daL, 0x48e1381a93a87849L, 0x491586213892965bL, 0x494ae7a986b73bf1L, 118 0x4980d0c9f4328577L, 0x49b504fc713f26d5L, 0x49ea463b8d8ef08aL, 0x4a206be538795656L, 119 0x4a5486de8697abecL, 0x4a89a896283d96e6L, 0x4ac0095dd9267e50L, 0x4af40bb54f701de4L, 120 0x4b290ea2a34c255dL, 0x4b5f524b4c1f2eb4L, 0x4b93936f0f937d31L, 0x4bc8784ad3785c7dL, 121 0x4bfe965d8856739cL, 0x4c331dfa75360842L, 0x4c67e57912838a52L, 0x4c9dded757246ce6L, 122 0x4cd2ab469676c410L, 0x4d0756183c147514L, 0x4d3d2b9e4b199259L, 0x4d723b42eeeffb78L, 123 0x4da6ca13aaabfa56L, 0x4ddc7c989556f8ebL, 0x4e11cddf5d565b93L, 0x4e46415734abf278L, 124 0x4e7bd1ad01d6ef15L, 0x4eb1630c2126556dL, 0x4ee5bbcf296feac9L, 0x4f1b2ac2f3cbe57bL, 125 0x4f50fab9d85f6f6dL, 0x4f8539684e774b48L, 0x4fba87c262151e1aL, 0x4ff094d97d4d32d0L, 126 0x5024ba0fdca07f84L, 0x5059e893d3c89f65L, 0x5090315c645d639fL, 0x50c43db37d74bc87L, 127 0x50f94d205cd1eba9L, 0x512fa06874066693L, 0x5163c4414884001cL, 0x5198b5519aa50023L, 128 0x51cee2a6014e402cL, 0x52034da7c0d0e81bL, 0x52382111b1052222L, 0x526e29561d466aabL, 129 0x52a2d9d5d24c02abL, 0x52d7904b46df0355L, 0x530d745e1896c42bL, 0x534268bacf5e3a9bL, 130 0x537702e98335c941L, 0x53acc3a3e4033b92L, 0x53e1fa466e82053bL, 0x541678d80a22868aL, 131 0x544c170e0cab282cL, 0x54818e68c7eaf91cL, 0x54b5f202f9e5b763L, 0x54eb6e83b85f253bL, 132 0x55212512533b7745L, 0x55556e56e80a5516L, 0x558ac9eca20cea5cL, 0x55c0be33e5481279L, 133 0x55f4edc0de9a1718L, 0x562a293116409cdeL, 0x566059beade8620bL, 0x5694702e59627a8dL, 134 0x56c98c39efbb1931L, 0x56ffef486ba9df7dL, 0x5733f58d434a2baeL, 0x5768f2f0941cb699L, 135 0x579f2facb923e440L, 0x57d37dcbf3b66ea8L, 0x58085d3ef0a40a52L, 0x583e748eaccd0ce6L, 136 0x587308d92c002810L, 0x58a7cb0f77003214L, 0x58ddbdd354c03e99L, 0x591296a414f82720L, 137 0x59473c4d1a3630e8L, 0x597d0b6060c3bd21L, 0x59b2271c3c7a5635L, 0x59e6b0e34b98ebc2L, 138 0x5a1c5d1c1e7f26b3L, 0x5a51ba31930f7830L, 0x5a8628bdf7d3563cL, 0x5abbb2ed75c82bcaL, 139 0x5af14fd4699d1b5fL, 0x5b25a3c984046236L, 0x5b5b0cbbe5057ac4L, 0x5b90e7f56f236cbaL, 140 0x5bc521f2caec47e9L, 0x5bfa6a6f7da759e3L, 0x5c308285ae88982eL, 0x5c64a3271a2abe39L, 141 0x5c99cbf0e0b56dc8L, 0x5cd01f768c71649dL, 0x5d0427542f8dbdc4L, 0x5d3931293b712d35L, 142 0x5d6f7d738a4d7882L, 0x5da3ae6836706b51L, 0x5dd89a02440c8626L, 0x5e0ec082d50fa7afL, 143 0x5e433851c529c8ceL, 0x5e78066636743b01L, 0x5eae07ffc41149c1L, 0x5ee2c4ffda8ace19L, 144 0x5f17763fd12d819fL, 0x5f4d53cfc578e207L, 0x5f825461db6b8d44L, 0x5fb6e97a52467095L, 145 0x5feca3d8e6d80cbbL, 0x6021e667904707f5L, 0x605660017458c9f2L, 0x608bf801d16efc6eL, 146 0x60c17b0122e55dc5L, 0x60f5d9c16b9eb536L, 0x612b5031c6866284L, 0x6161121f1c13fd92L, 147 0x619556a6e318fcf7L, 0x61caac509bdf3c34L, 0x6200abb2616b85a1L, 0x6234d69ef9c66709L, 148 0x626a0c46b83800cbL, 0x62a047ac3323007fL, 0x62d459973febc09fL, 0x63096ffd0fe6b0c6L, 149 0x633fcbfc53e05cf8L, 0x6373df7db46c3a1bL, 0x63a8d75d218748a2L, 0x63df0d3469e91acaL, 150 0x64136840c231b0beL, 0x64484250f2be1ceeL, 0x647e52e52f6da42aL, 0x64b2f3cf3da4869aL, 151 0x64e7b0c30d0da840L, 0x651d9cf3d0511251L, 0x655282186232ab72L, 0x6587229e7abf564fL, 152 0x65bceb46196f2be3L, 0x65f2130bcfe57b6eL, 0x662697cec3deda49L, 0x665c3dc274d690dbL, 153 0x6691a69989061a89L, 0x66c6103feb47a12bL, 0x66fb944fe6198976L, 0x67313cb1efcff5eaL, 154 0x67658bde6bc3f364L, 0x679aeed606b4f03dL, 0x67d0d545c4311626L, 0x68050a97353d5bb0L, 155 0x683a4d3d028cb29cL, 0x687070462197efa2L, 0x68a48c57a9fdeb8aL, 0x68d9af6d947d666cL, 156 0x69100da47cce6004L, 0x6944110d9c01f805L, 0x6979155103027606L, 0x69af5aa543c31387L, 157 0x69e398a74a59ec35L, 0x6a187ed11cf06742L, 0x6a4e9e85642c8112L, 0x6a8323135e9bd0abL, 158 0x6ab7ebd83642c4d6L, 0x6aede6ce43d3760cL, 0x6b22b040ea6429c7L, 0x6b575c5124fd3439L, 159 0x6b8d33656e3c8147L, 0x6bc2401f64e5d0cdL, 0x6bf6d0273e1f4500L, 0x6c2c84310da71640L, 160 0x6c61d29ea8886de8L, 0x6c96474652aa8962L, 0x6ccbd917e7552bbaL, 0x6d0167aef0953b54L, 161 0x6d35c19aacba8a29L, 0x6d6b320157e92cb4L, 0x6da0ff40d6f1bbf0L, 0x6dd53f110cae2aedL, 162 0x6e0a8ed54fd9b5a8L, 0x6e40994551e81189L, 0x6e74bf96a66215ebL, 0x6ea9ef7c4ffa9b66L, 163 0x6ee035adb1fca120L, 0x6f1443191e7bc967L, 0x6f4953df661abbc1L, 0x6f7fa8d73fa16ab2L, 164 0x6fb3c98687c4e2afL, 0x6fe8bbe829b61b5bL, 0x701eeae23423a232L, 0x705352cd6096455fL, 165 0x70882780b8bbd6b7L, 0x70be3160e6eacc64L, 0x70f2dedc9052bfbfL, 0x71279693b4676faeL, 166 0x715d7c38a1814b9aL, 0x71926da364f0cf40L, 0x71c7090c3e2d0310L, 0x71fccb4f4db843d4L, 167 0x7231ff1190932a65L, 0x72667ed5f4b7f4feL, 0x729c1e8b71e5f23dL, 0x72d19317272fb766L, 168 0x7305f7dcf0fba540L, 0x733b75d42d3a8e90L, 0x737129a49c44991aL, 0x73a5740dc355bf60L, 169 0x73dad111342b2f39L, 0x7410c2aac09afd83L, 0x7444f35570c1bce4L, 0x747a302accf22c1dL, 170 0x74b05e1ac0175b92L, 0x74e475a1701d3277L, 0x75199309cc247f15L, 0x754ff7cc3f2d9edaL, 171 0x7583fadfa77c8348L, 0x75b8f997915ba41aL, 0x75ef37fd75b28d21L, 0x762382fe698f9834L, 172 0x765863be03f37e41L, 0x768e7cad84f05dd2L, 0x76c30dec73163aa3L, 0x76f7d1678fdbc94cL, 173 0x772dc5c173d2bb9fL, 0x77629b98e863b543L, 0x7797427f227ca294L, 0x77cd131eeb1bcb39L, 174 0x78022bf352f15f04L, 0x7836b6f027adb6c5L, 0x786c64ac31992476L, 0x78a1beeb9effb6caL, 175 0x78d62ea686bfa47cL, 0x790bba50286f8d9bL, 0x794154721945b881L, 0x7975a98e9f9726a1L, 176 0x79ab13f2477cf049L, 0x79e0ec776cae162eL, 0x7a15279547d99bb9L, 0x7a4a717a99d002a8L, 177 0x7a8086eca02201a9L, 0x7ab4a8a7c82a8213L, 0x7ae9d2d1ba352298L, 0x7b2023c31461359fL, 178 0x7b542cb3d9798307L, 0x7b8937e0cfd7e3c8L, 0x7bbf85d903cddcbaL, 0x7bf3b3a7a260a9f4L, 179 0x7c28a0918af8d472L, 0x7c5ec8b5edb7098eL, 0x7c933d71b49265f9L, 0x7cc80cce21b6ff77L, 180 0x7cfe1001aa24bf55L, 0x7d32ca010a56f795L, 0x7d677c814cecb57aL, 0x7d9d5ba1a027e2d9L, 181 0x7dd259450418edc7L, 0x7e06ef96451f2939L, 0x7e3cab7bd666f388L, 0x7e71eb2d66005835L, 182 0x7ea665f8bf806e42L, 0x7edbff76ef6089d2L, 0x7f117faa559c5623L, 0x7f45df94eb036bacL, 183 0x7f7b577a25c44697L, 0x7fb116ac579aac1fL, 0x7fe55c576d815726L, 0x7ff0000000000000L }; 184 185 private void doTestCompareRawBits(String originalDoubleString, long expectedRawBits, 186 String expectedString) { 187 double result; 188 long rawBits; 189 String convertedString; 190 result = Double.parseDouble(originalDoubleString); 191 rawBits = Double.doubleToLongBits(result); 192 convertedString = new Double(result).toString(); 193 assertEquals(expectedRawBits, rawBits); 194 assertEquals(expectedString.toLowerCase(Locale.US), convertedString 195 .toLowerCase(Locale.US)); 196 } 197 198 private void test_toString(double dd, String answer) { 199 assertEquals(answer, Double.toString(dd)); 200 Double d = new Double(dd); 201 assertEquals(answer, Double.toString(d.doubleValue())); 202 assertEquals(answer, d.toString()); 203 } 204 205 /** 206 * java.lang.Double#Double(double) 207 */ 208 public void test_ConstructorD() { 209 Double d = new Double(39089.88888888888888888888888888888888); 210 assertEquals("Created incorrect double", 39089.88888888888888888888888888888888, d 211 .doubleValue(), 0D); 212 } 213 214 /** 215 * java.lang.Double#Double(java.lang.String) 216 */ 217 public void test_ConstructorLjava_lang_String() { 218 Double d = new Double("39089.88888888888888888888888888888888"); 219 assertEquals("Created incorrect double", 39089.88888888888888888888888888888888, d 220 .doubleValue(), 0D); 221 222 // Regression test for HARMONY-489 223 try { 224 d = new Double("1E+-20"); 225 fail("new Double(\"1E+-20\") should throw exception"); 226 } catch (NumberFormatException e) { 227 // expected 228 } 229 230 // Regression test for HARMONY-329 231 d = Double.parseDouble("-1.233999999999999965116738099630936817275852021384209929081813042837802886790127428328465579708849276001782791006814286802871737087810957327493372866733334925806221045495205250590286471187577636646208155890426896101636282423463443661040209738873506655844025580428394216030152374941053494694642722606658935546875E-112"); 232 assertEquals("Failed to parse long string", -1.234E-112D, d.doubleValue(), 0D); 233 } 234 235 /** 236 * java.lang.Double#byteValue() 237 */ 238 public void test_byteValue() { 239 Double d = new Double(1923311.47712); 240 assertEquals("Returned incorrect byte value", (byte) -17, d.byteValue()); 241 } 242 243 /** 244 * java.lang.Double#compareTo(java.lang.Double) 245 * java.lang.Double#compare(double, double) 246 */ 247 public void test_compare() { 248 double[] values = new double[] { Double.NEGATIVE_INFINITY, -Double.MAX_VALUE, -2d, 249 -Double.MIN_VALUE, -0d, 0d, Double.MIN_VALUE, 2d, Double.MAX_VALUE, 250 Double.POSITIVE_INFINITY, Double.NaN }; 251 for (int i = 0; i < values.length; i++) { 252 double d1 = values[i]; 253 assertTrue("compare() should be equal: " + d1, Double.compare(d1, d1) == 0); 254 Double D1 = new Double(d1); 255 assertTrue("compareTo() should be equal: " + d1, D1.compareTo(D1) == 0); 256 for (int j = i + 1; j < values.length; j++) { 257 double d2 = values[j]; 258 assertTrue("compare() " + d1 + " should be less " + d2, 259 Double.compare(d1, d2) == -1); 260 assertTrue("compare() " + d2 + " should be greater " + d1, Double.compare(d2, 261 d1) == 1); 262 Double D2 = new Double(d2); 263 assertTrue("compareTo() " + d1 + " should be less " + d2, 264 D1.compareTo(D2) == -1); 265 assertTrue("compareTo() " + d2 + " should be greater " + d1, 266 D2.compareTo(D1) == 1); 267 } 268 } 269 270 try { 271 new Double(0.0D).compareTo(null); 272 fail("No NPE"); 273 } catch (NullPointerException e) { 274 } 275 } 276 277 /** 278 * java.lang.Double#doubleToLongBits(double) 279 */ 280 public void test_doubleToLongBitsD() { 281 // Test for method long java.lang.Double.doubleToLongBits(double) 282 Double d = new Double(Double.MAX_VALUE); 283 long lbits = Double.doubleToLongBits(d.doubleValue()); 284 double r = Double.longBitsToDouble(lbits); 285 286 assertTrue("Bit conversion failed", d.doubleValue() == r); 287 } 288 289 /** 290 * java.lang.Double#doubleToRawLongBits(double) 291 */ 292 public void test_doubleToRawLongBitsD() { 293 long l = 0x7ff80000000004d2L; 294 double d = Double.longBitsToDouble(l); 295 assertTrue("Wrong raw bits", Double.doubleToRawLongBits(d) == l); 296 } 297 298 /** 299 * java.lang.Double#doubleValue() 300 */ 301 public void test_doubleValue() { 302 assertEquals("Incorrect double value returned", 999999999999999.9999999999999, 303 new Double(999999999999999.9999999999999).doubleValue(), 0D); 304 } 305 306 /** 307 * java.lang.Double#floatValue() 308 */ 309 public void test_floatValue() { 310 // Test for method float java.lang.Double.floatValue() 311 assertTrue( 312 "Incorrect float value returned ", 313 Math 314 .abs(new Double(999999999999999.9999999999999d).floatValue() - 999999999999999.9999999999999f) < 1); 315 } 316 317 /** 318 * java.lang.Double#hashCode() 319 */ 320 public void test_hashCode() { 321 // Test for method int java.lang.Double.hashCode() 322 for (int i = -1000; i < 1000; i++) { 323 Double d = new Double(i); 324 Double dd = new Double(i); 325 assertTrue("Should not be identical ", d != dd); 326 assertTrue("Should be equals 1 ", d.equals(dd)); 327 assertTrue("Should be equals 2 ", dd.equals(d)); 328 assertTrue("Should have identical values ", dd.doubleValue() == d.doubleValue()); 329 assertTrue("Invalid hash for equal but not identical doubles ", d.hashCode() == dd 330 .hashCode()); 331 } 332 assertEquals("Magic assumption hasCode (0.0) = 0 failed", 0, new Double(0.0).hashCode()); 333 } 334 335 /** 336 * java.lang.Double#intValue() 337 */ 338 public void test_intValue() { 339 // Test for method int java.lang.Double.intValue() 340 Double d = new Double(1923311.47712); 341 assertEquals("Returned incorrect int value", 1923311, d.intValue()); 342 } 343 344 /** 345 * java.lang.Double#isInfinite() 346 */ 347 public void test_isInfinite() { 348 // Test for method boolean java.lang.Double.isInfinite() 349 assertTrue("NEGATIVE_INFINITY returned false", new Double(Double.NEGATIVE_INFINITY) 350 .isInfinite()); 351 assertTrue("POSITIVE_INFINITY returned false", new Double(Double.POSITIVE_INFINITY) 352 .isInfinite()); 353 assertTrue("Non infinite number returned true", !(new Double(1000).isInfinite())); 354 } 355 356 /** 357 * java.lang.Double#isInfinite(double) 358 */ 359 public void test_isInfiniteD() { 360 // Test for method boolean java.lang.Double.isInfinite(double) 361 assertTrue("Infinity check failed", Double.isInfinite(Double.NEGATIVE_INFINITY) 362 && (Double.isInfinite(Double.POSITIVE_INFINITY)) 363 && !(Double.isInfinite(Double.MAX_VALUE))); 364 } 365 366 /** 367 * java.lang.Double#isNaN() 368 */ 369 public void test_isNaN() { 370 // Test for method boolean java.lang.Double.isNaN() 371 Double d = new Double(0.0 / 0.0); 372 assertTrue("NAN returned false", d.isNaN()); 373 d = new Double(0); 374 assertTrue("Non NAN returned true", !d.isNaN()); 375 } 376 377 /** 378 * java.lang.Double#isNaN(double) 379 */ 380 public void test_isNaND() { 381 // Test for method boolean java.lang.Double.isNaN(double) 382 383 Double d = new Double(0.0 / 0.0); 384 assertTrue("NAN check failed", Double.isNaN(d.doubleValue())); 385 } 386 387 /** 388 * java.lang.Double#longBitsToDouble(long) 389 */ 390 public void test_longBitsToDoubleJ() { 391 // Test for method double java.lang.Double.longBitsToDouble(long) 392 393 Double d = new Double(Double.MAX_VALUE); 394 long lbits = Double.doubleToLongBits(d.doubleValue()); 395 double r = Double.longBitsToDouble(lbits); 396 397 assertTrue("Bit conversion failed", d.doubleValue() == r); 398 } 399 400 /** 401 * java.lang.Double#longValue() 402 */ 403 public void test_longValue() { 404 // Test for method long java.lang.Double.longValue() 405 Double d = new Double(1923311.47712); 406 assertEquals("Returned incorrect long value", 1923311, d.longValue()); 407 } 408 409 /** 410 * java.lang.Double#parseDouble(java.lang.String) 411 */ 412 public void test_parseDoubleLjava_lang_String() { 413 assertEquals("Incorrect double returned, expected zero.", 0.0, Double 414 .parseDouble("2.4703282292062327208828439643411e-324"), 0.0); 415 assertTrue("Incorrect double returned, expected minimum double.", Double 416 .parseDouble("2.4703282292062327208828439643412e-324") == Double.MIN_VALUE); 417 418 for (int i = 324; i > 0; i--) { 419 Double.parseDouble("3.4e-" + i); 420 } 421 for (int i = 0; i <= 309; i++) { 422 Double.parseDouble("1.2e" + i); 423 } 424 425 /* 426 * The first two cases and the last four cases have to placed outside 427 * the loop due to the difference in the expected output string. 428 */ 429 doTestCompareRawBits("3.4e-324", rawBitsFor3_4en324ToN1[0], "4.9e-324"); 430 doTestCompareRawBits("3.4e-323", rawBitsFor3_4en324ToN1[1], "3.5e-323"); 431 for (int i = 322; i > 3; i--) { 432 String testString, expectedString; 433 testString = expectedString = "3.4e-" + i; 434 doTestCompareRawBits(testString, rawBitsFor3_4en324ToN1[324 - i], expectedString); 435 } 436 doTestCompareRawBits("3.4e-3", rawBitsFor3_4en324ToN1[321], "0.0034"); 437 doTestCompareRawBits("3.4e-2", rawBitsFor3_4en324ToN1[322], "0.034"); 438 doTestCompareRawBits("3.4e-1", rawBitsFor3_4en324ToN1[323], "0.34"); 439 doTestCompareRawBits("3.4e-0", rawBitsFor3_4en324ToN1[324], "3.4"); 440 441 doTestCompareRawBits("1.2e0", rawBitsFor1_2e0To309[0], "1.2"); 442 doTestCompareRawBits("1.2e1", rawBitsFor1_2e0To309[1], "12.0"); 443 doTestCompareRawBits("1.2e2", rawBitsFor1_2e0To309[2], "120.0"); 444 doTestCompareRawBits("1.2e3", rawBitsFor1_2e0To309[3], "1200.0"); 445 doTestCompareRawBits("1.2e4", rawBitsFor1_2e0To309[4], "12000.0"); 446 doTestCompareRawBits("1.2e5", rawBitsFor1_2e0To309[5], "120000.0"); 447 doTestCompareRawBits("1.2e6", rawBitsFor1_2e0To309[6], "1200000.0"); 448 for (int i = 7; i <= 308; i++) { 449 String testString, expectedString; 450 testString = expectedString = "1.2e" + i; 451 doTestCompareRawBits(testString, rawBitsFor1_2e0To309[i], expectedString); 452 } 453 doTestCompareRawBits("1.2e309", rawBitsFor1_2e0To309[309], "Infinity"); 454 455 doTestCompareRawBits( 456 "111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000.92233720368547758079223372036854775807", 457 0x7e054218c295e43fL, "1.1122233344455567E299"); 458 doTestCompareRawBits( 459 "-111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000111222333444555666777888999000.92233720368547758079223372036854775807", 460 0xfe054218c295e43fL, "-1.1122233344455567E299"); 461 462 doTestCompareRawBits("1.234123412431233E107", 0x562ae7a25fe706ebL, 463 "1.234123412431233E107"); 464 doTestCompareRawBits("1.2341234124312331E107", 0x562ae7a25fe706ecL, 465 "1.2341234124312331E107"); 466 doTestCompareRawBits("1.2341234124312332E107", 0x562ae7a25fe706ecL, 467 "1.2341234124312331E107"); 468 doTestCompareRawBits("-1.234123412431233E107", 0xd62ae7a25fe706ebL, 469 "-1.234123412431233E107"); 470 doTestCompareRawBits("-1.2341234124312331E107", 0xd62ae7a25fe706ecL, 471 "-1.2341234124312331E107"); 472 doTestCompareRawBits("-1.2341234124312332E107", 0xd62ae7a25fe706ecL, 473 "-1.2341234124312331E107"); 474 475 doTestCompareRawBits("1e23", 0x44b52d02c7e14af6L, "1.0e23"); 476 477 /* 478 * These particular tests verify that the extreme boundary conditions 479 * are converted correctly. 480 */ 481 doTestCompareRawBits("0.0e-309", 0L, "0.0"); 482 doTestCompareRawBits("-0.0e-309", 0x8000000000000000L, "-0.0"); 483 doTestCompareRawBits("0.0e309", 0L, "0.0"); 484 doTestCompareRawBits("-0.0e309", 0x8000000000000000L, "-0.0"); 485 doTestCompareRawBits("0.1e309", 0x7fe1ccf385ebc8a0L, "1.0e308"); 486 doTestCompareRawBits("0.2e309", 0x7ff0000000000000L, "Infinity"); 487 doTestCompareRawBits("65e-325", 1L, "4.9e-324"); 488 doTestCompareRawBits("1000e-326", 2L, "1.0e-323"); 489 490 doTestCompareRawBits("4.0e-306", 0x86789e3750f791L, "4.0e-306"); 491 doTestCompareRawBits("2.22507e-308", 0xffffe2e8159d0L, "2.22507e-308"); 492 doTestCompareRawBits( 493 "111222333444555666777888999000111228999000.92233720368547758079223372036854775807", 494 0x48746da623f1dd8bL, "1.1122233344455567E41"); 495 doTestCompareRawBits( 496 "-111222333444555666777888999000111228999000.92233720368547758079223372036854775807", 497 0xc8746da623f1dd8bL, "-1.1122233344455567E41"); 498 doTestCompareRawBits( 499 "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210", 500 0x54820fe0ba17f469L, "1.2345678901234567E99"); 501 doTestCompareRawBits( 502 "-1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210987654321098765432109876543210", 503 0xd4820fe0ba17f469L, "-1.2345678901234567E99"); 504 505 doTestCompareRawBits( 506 "179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.01", 507 0x7fefffffffffffffL, "1.7976931348623157E308"); 508 doTestCompareRawBits( 509 "-179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.01", 510 0xffefffffffffffffL, "-1.7976931348623157E308"); 511 doTestCompareRawBits( 512 "1112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001234567890", 513 0x7ff0000000000000L, "Infinity"); 514 doTestCompareRawBits( 515 "-1112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001112223334445556667778889990001234567890", 516 0xfff0000000000000L, "-Infinity"); 517 doTestCompareRawBits( 518 "179769313486231590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.01", 519 0x7ff0000000000000L, "Infinity"); 520 doTestCompareRawBits( 521 "-179769313486231590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.01", 522 0xfff0000000000000L, "-Infinity"); 523 doTestCompareRawBits( 524 "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 525 0x2b392a32afcc661eL, "1.7976931348623157E-100"); 526 doTestCompareRawBits( 527 "-0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 528 0xab392a32afcc661eL, "-1.7976931348623157E-100"); 529 doTestCompareRawBits( 530 "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 531 0x1b3432f0cb68e61L, "1.7976931348623157E-300"); 532 doTestCompareRawBits( 533 "-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 534 0x81b3432f0cb68e61L, "-1.7976931348623157E-300"); 535 doTestCompareRawBits( 536 "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 537 0x2117b590b942L, "1.79769313486234E-310"); 538 doTestCompareRawBits( 539 "-0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 540 0x80002117b590b942L, "-1.79769313486234E-310"); 541 doTestCompareRawBits( 542 "0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 543 0xe37L, "1.798E-320"); 544 doTestCompareRawBits( 545 "-0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017976931348623157", 546 0x8000000000000e37L, "-1.798E-320"); 547 doTestCompareRawBits( 548 "0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 549 0x2L, "1.0E-323"); 550 doTestCompareRawBits( 551 "-0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", 552 0x8000000000000002L, "-1.0E-323"); 553 doTestCompareRawBits( 554 "0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055595409854908458349204328908234982349050934129878452378432452458968024357823490509341298784523784324524589680243578234905093412987845237843245245896802435782349050934129878452378432452458968024357868024357823490509341298784523784324524589680243578234905093412987845237843245245896802435786802435782349050934129878452378432452458968024357823490509341298784523784324524589680243578", 555 0x1L, "4.9E-324"); 556 doTestCompareRawBits( 557 "-0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055595409854908458349204328908234982349050934129878452378432452458968024357823490509341298784523784324524589680243578234905093412987845237843245245896802435782349050934129878452378432452458968024357868024357823490509341298784523784324524589680243578234905093412987845237843245245896802435786802435782349050934129878452378432452458968024357823490509341298784523784324524589680243578", 558 0x8000000000000001L, "-4.9E-324"); 559 } 560 561 /** 562 * java.lang.Double#parseDouble(java.lang.String) 563 */ 564 public void test_parseDouble_LString_Illegal() { 565 try { 566 Double.parseDouble("0.0p0D"); 567 fail("Should throw NumberFormatException."); 568 } catch (NumberFormatException e) { 569 // expected 570 } 571 572 try { 573 Double.parseDouble("+0x.p1d"); 574 fail("Should throw NumberFormatException."); 575 } catch (NumberFormatException e) { 576 // expected 577 } 578 579 try { 580 Double.parseDouble("0Xg.gp1D"); 581 fail("Should throw NumberFormatException."); 582 } catch (NumberFormatException e) { 583 // expected 584 } 585 586 try { 587 Double.parseDouble("-0x1.1p"); 588 fail("Should throw NumberFormatException."); 589 } catch (NumberFormatException e) { 590 // expected 591 } 592 593 try { 594 Double.parseDouble("+0x 1.1 p2d"); 595 fail("Should throw NumberFormatException."); 596 } catch (NumberFormatException e) { 597 // expected 598 } 599 600 try { 601 Double.parseDouble("x1.1p2d"); 602 fail("Should throw NumberFormatException."); 603 } catch (NumberFormatException e) { 604 // expected 605 } 606 607 try { 608 Double.parseDouble(" 0x-2.1p2"); 609 fail("Should throw NumberFormatException."); 610 } catch (NumberFormatException e) { 611 // expected 612 } 613 614 try { 615 Double.parseDouble(" 0x2.1pad"); 616 fail("Should throw NumberFormatException."); 617 } catch (NumberFormatException e) { 618 // expected 619 } 620 621 try { 622 Double.parseDouble(" 0x111.222p 22d"); 623 fail("Should throw NumberFormatException."); 624 } catch (NumberFormatException e) { 625 // expected 626 } 627 } 628 629 /** 630 * java.lang.Double#parseDouble(java.lang.String) 631 */ 632 public void test_parseDouble_LString_FromHexString() { 633 double actual; 634 double expected; 635 636 actual = Double.parseDouble("0x0.0p0D"); 637 assertEquals("Returned incorrect value", 0.0d, actual, 0.0D); 638 639 actual = Double.parseDouble("0xa.ap+9d"); 640 assertEquals("Returned incorrect value", 5440.0d, actual, 0.0D); 641 642 actual = Double.parseDouble("+0Xb.10ap8"); 643 assertEquals("Returned incorrect value", 2832.625d, actual, 0.0D); 644 645 actual = Double.parseDouble("-0X.a0P2D"); 646 assertEquals("Returned incorrect value", -2.5d, actual, 0.0D); 647 648 actual = Double.parseDouble("\r 0x22.1p2d \t"); 649 assertEquals("Returned incorrect value", 136.25d, actual, 0.0D); 650 651 actual = Double.parseDouble("0x1.0p-1"); 652 assertEquals("Returned incorrect value", 0.5, actual, 0.0D); 653 654 actual = Double 655 .parseDouble("0x00000000000000000000000000000000001.0p-1"); 656 assertEquals("Returned incorrect value", 0.5, actual, 0.0D); 657 658 actual = Double.parseDouble("0x1.0p-00000000000000000000000000001"); 659 assertEquals("Returned incorrect value", 0.5, actual, 0.0D); 660 661 actual = Double.parseDouble("0x.100000000000000000000000000000000p1"); 662 assertEquals("Returned incorrect value", 0.125, actual, 0.0D); 663 664 actual = Double.parseDouble("0x0.0p999999999999999999999999999999999999999999999999999999999999999"); 665 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 666 667 actual = Double.parseDouble("0xf1.0p9999999999999999999999999999999999999999999999999999999999999999"); 668 assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, actual, 0.0D); 669 670 actual = Double.parseDouble("0xffffffffffffffffffffffffffffffffffff.ffffffffffffffffffffffffffffffffffffffffffffffp1"); 671 expected = Double.longBitsToDouble(0x4900000000000000L); 672 assertEquals("Returned incorrect value", expected, actual, 0.0D); 673 674 actual = Double.parseDouble("0x0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001p1600"); 675 expected = Double.longBitsToDouble(0x7f30000000000000L); 676 assertEquals("Returned incorrect value", expected, actual, 0.0D); 677 678 actual = Double.parseDouble("0x0.0p-999999999999999999999999999999999999999999999999999999"); 679 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 680 681 actual = Double.parseDouble("0xf1.0p-9999999999999999999999999999999999999999999999999999999999999999"); 682 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 683 684 actual = Double.parseDouble("0x10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000p-1600"); 685 expected = Double.longBitsToDouble(0xf0000000000000L); 686 assertEquals("Returned incorrect value", expected, actual, 0.0D); 687 688 actual = Double.parseDouble("0x1.p9223372036854775807"); 689 assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, actual, 0.0D); 690 691 actual = Double.parseDouble("0x1.p9223372036854775808"); 692 assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, actual, 0.0D); 693 694 actual = Double.parseDouble("0x10.p9223372036854775808"); 695 assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, actual, 0.0D); 696 697 actual = Double.parseDouble("0xabcd.ffffffffp+2000"); 698 assertEquals("Returned incorrect value", Double.POSITIVE_INFINITY, actual, 0.0D); 699 700 actual = Double.parseDouble("0x1.p-9223372036854775808"); 701 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 702 703 actual = Double.parseDouble("0x1.p-9223372036854775809"); 704 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 705 706 actual = Double.parseDouble("0x.1p-9223372036854775809"); 707 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 708 709 actual = Double.parseDouble("0xabcd.ffffffffffffffp-2000"); 710 assertEquals("Returned incorrect value", 0.0, actual, 0.0D); 711 } 712 713 /** 714 * java.lang.Double#parseDouble(java.lang.String) 715 */ 716 public void test_parseDouble_LString_NormalPositiveExponent() { 717 long[] expecteds = { 718 0x3f323456789abcdfL, 0x40e111012345678aL, 0x41a1110091a2b3c5L, 719 0x4259998091a2b3c5L, 0x4311110048d159e2L, 0x43c5554048d159e2L, 720 0x4479998048d159e2L, 0x452dddc048d159e2L, 0x45e111002468acf1L, 721 0x469333202468acf1L, 0x4751011001234568L, 0x4802112101234568L, 722 0x48b3213201234568L, 0x4964314301234568L, 0x4a15415401234568L, 723 0x4ac6516501234568L, 0x4b77617601234568L, 0x4c28718701234568L, 724 0x4cd9819801234568L, 0x4d9049048091a2b4L, 0x4e4101100091a2b4L, 725 0x4ef189188091a2b4L, 0x4fa211210091a2b4L, 0x505299298091a2b4L, 726 0x510321320091a2b4L, 0x51b3a93a8091a2b4L, 0x526431430091a2b4L, 727 0x5314b94b8091a2b4L, 0x53c841840091a2b4L, 0x5478c98c8091a2b4L, 728 0x552981980091a2b4L, 0x55da09a08091a2b4L, 0x568a91a90091a2b4L, 729 0x573b19b18091a2b4L, 0x57eba1ba0091a2b4L, 0x589c29c28091a2b4L, 730 0x594cb1cb0091a2b4L, 0x5a001d01c048d15aL, 0x5ab061060048d15aL, 731 0x5b60a50a4048d15aL, 0x5c1101100048d15aL, 0x5cc145144048d15aL, 732 0x5d7189188048d15aL, 0x5e21cd1cc048d15aL, 0x5ed211210048d15aL, 733 0x5f8255254048d15aL, 0x603419418048d15aL, 0x60e45d45c048d15aL, 734 0x6194a14a0048d15aL, 0x6244e54e4048d15aL, 0x62f541540048d15aL, 735 0x63a585584048d15aL, 0x6455c95c8048d15aL, 0x65060d60c048d15aL, 736 0x65b651650048d15aL, 0x666815814048d15aL, 0x671859858048d15aL, 737 0x67c89d89c048d15aL, 0x6878e18e0048d15aL, 0x692925924048d15aL, 738 0x69d981980048d15aL, 0x6a89c59c4048d15aL, 0x6b3a09a08048d15aL, 739 0x6bea4da4c048d15aL, 0x6c9c11c10048d15aL, 0x6d4c55c54048d15aL, 740 0x6dfc99c98048d15aL, 0x6eacddcdc048d15aL, 0x6f5d21d20048d15aL, 741 0x700d65d64048d15aL, 0x70bdc1dc0048d15aL, 0x716e05e04048d15aL, 742 0x721e49e48048d15aL, 0x72d00700602468adL, 0x73802902802468adL, 743 0x74304b04a02468adL, 0x74e06d06c02468adL, 0x75908f08e02468adL, 744 0x7640b10b002468adL, 0x76f0d30d202468adL, 0x77a10110002468adL, 745 0x78512312202468adL, 0x79020520402468adL, 0x79b22722602468adL, 746 0x7a624924802468adL, 0x7b126b26a02468adL, 0x7bc28d28c02468adL, 747 0x7c72af2ae02468adL, 0x7d22d12d002468adL, 0x7dd2f32f202468adL, 748 0x7e832132002468adL, 0x7f40011001012345L, 0x7ff0000000000000L, 749 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 750 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 751 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 752 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 753 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 754 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 755 0x7ff0000000000000L, 0x7ff0000000000000L }; 756 757 for (int i = 0; i < expecteds.length; i++) { 758 int part = i * 11; 759 String inputString = "0x" + part + "." + part + "0123456789abcdefp" + part; 760 761 double actual = Double.parseDouble(inputString); 762 double expected = Double.longBitsToDouble(expecteds[i]); 763 764 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 765 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 766 String errorMsg = i + "th input string is:<" + inputString 767 + ">.The expected result should be:<" + expectedString 768 + ">, but was: <" + actualString + ">. "; 769 770 assertEquals(errorMsg, expected, actual, 0.0D); 771 } 772 } 773 774 /** 775 * java.lang.Double#parseDouble(java.lang.String) 776 */ 777 public void test_parseDouble_LString_NormalNegativeExponent() { 778 long[] expecteds = { 779 0x3f323456789abcdfL, 0x3f8111012345678aL, 0x3ee1110091a2b3c5L, 780 0x3e39998091a2b3c5L, 0x3d91110048d159e2L, 0x3ce5554048d159e2L, 781 0x3c39998048d159e2L, 0x3b8dddc048d159e2L, 0x3ae111002468acf1L, 782 0x3a3333202468acf1L, 0x3991011001234568L, 0x38e2112101234568L, 783 0x3833213201234568L, 0x3784314301234568L, 0x36d5415401234568L, 784 0x3626516501234568L, 0x3577617601234568L, 0x34c8718701234568L, 785 0x3419819801234568L, 0x337049048091a2b4L, 0x32c101100091a2b4L, 786 0x321189188091a2b4L, 0x316211210091a2b4L, 0x30b299298091a2b4L, 787 0x300321320091a2b4L, 0x2f53a93a8091a2b4L, 0x2ea431430091a2b4L, 788 0x2df4b94b8091a2b4L, 0x2d4841840091a2b4L, 0x2c98c98c8091a2b4L, 789 0x2be981980091a2b4L, 0x2b3a09a08091a2b4L, 0x2a8a91a90091a2b4L, 790 0x29db19b18091a2b4L, 0x292ba1ba0091a2b4L, 0x287c29c28091a2b4L, 791 0x27ccb1cb0091a2b4L, 0x27201d01c048d15aL, 0x267061060048d15aL, 792 0x25c0a50a4048d15aL, 0x251101100048d15aL, 0x246145144048d15aL, 793 0x23b189188048d15aL, 0x2301cd1cc048d15aL, 0x225211210048d15aL, 794 0x21a255254048d15aL, 0x20f419418048d15aL, 0x20445d45c048d15aL, 795 0x1f94a14a0048d15aL, 0x1ee4e54e4048d15aL, 0x1e3541540048d15aL, 796 0x1d8585584048d15aL, 0x1cd5c95c8048d15aL, 0x1c260d60c048d15aL, 797 0x1b7651650048d15aL, 0x1ac815814048d15aL, 0x1a1859858048d15aL, 798 0x19689d89c048d15aL, 0x18b8e18e0048d15aL, 0x180925924048d15aL, 799 0x175981980048d15aL, 0x16a9c59c4048d15aL, 0x15fa09a08048d15aL, 800 0x154a4da4c048d15aL, 0x149c11c10048d15aL, 0x13ec55c54048d15aL, 801 0x133c99c98048d15aL, 0x128cddcdc048d15aL, 0x11dd21d20048d15aL, 802 0x112d65d64048d15aL, 0x107dc1dc0048d15aL, 0xfce05e04048d15aL, 803 0xf1e49e48048d15aL, 0xe700700602468adL, 0xdc02902802468adL, 804 0xd104b04a02468adL, 0xc606d06c02468adL, 0xbb08f08e02468adL, 805 0xb00b10b002468adL, 0xa50d30d202468adL, 0x9a10110002468adL, 806 0x8f12312202468adL, 0x8420520402468adL, 0x7922722602468adL, 807 0x6e24924802468adL, 0x6326b26a02468adL, 0x5828d28c02468adL, 808 0x4d2af2ae02468adL, 0x422d12d002468adL, 0x372f32f202468adL, 809 0x2c32132002468adL, 0x220011001012345L, 0x170121012012345L, 810 0xc0231023012345L, 0x10341034012345L, 0x208a208a024L, 811 0x41584158L, 0x83388L, 0x108L, 812 0x0L, 0x0L, 0x0L, 813 0x0L, 0x0L, 0x0L, 814 0x0L, 0x0L, 0x0L, 815 0x0L, 0x0L, 0x0L, 816 0x0L, 0x0L }; 817 818 for (int i = 0; i < expecteds.length; i++) { 819 int part = i * 11; 820 String inputString = "0x" + part + "." + part + "0123456789abcdefp-" + part; 821 822 double actual = Double.parseDouble(inputString); 823 double expected = Double.longBitsToDouble(expecteds[i]); 824 825 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 826 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 827 String errorMsg = i + "th input string is:<" + inputString 828 + ">.The expected result should be:<" + expectedString 829 + ">, but was: <" + actualString + ">. "; 830 831 assertEquals(errorMsg, expected, actual, 0.0D); 832 } 833 } 834 835 /** 836 * java.lang.Double#parseDouble(java.lang.String) 837 */ 838 public void test_parseDouble_LString_MaxNormalBoundary() { 839 long[] expecteds = { 840 0x7fefffffffffffffL, 0x7fefffffffffffffL, 0x7fefffffffffffffL, 841 0x7fefffffffffffffL, 0x7fefffffffffffffL, 0x7fefffffffffffffL, 842 0x7fefffffffffffffL, 0x7ff0000000000000L, 0x7ff0000000000000L, 843 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 844 0x7ff0000000000000L, 0x7ff0000000000000L, 0x7ff0000000000000L, 845 846 0xffefffffffffffffL, 0xffefffffffffffffL, 0xffefffffffffffffL, 847 0xffefffffffffffffL, 0xffefffffffffffffL, 0xffefffffffffffffL, 848 0xffefffffffffffffL, 0xfff0000000000000L, 0xfff0000000000000L, 849 0xfff0000000000000L, 0xfff0000000000000L, 0xfff0000000000000L, 850 0xfff0000000000000L, 0xfff0000000000000L, 0xfff0000000000000L }; 851 852 String[] inputs = { 853 "0x1.fffffffffffffp1023", 854 "0x1.fffffffffffff000000000000000000000000001p1023", 855 "0x1.fffffffffffff1p1023", 856 "0x1.fffffffffffff100000000000000000000000001p1023", 857 "0x1.fffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffp1023", 858 "0x1.fffffffffffff7p1023", 859 "0x1.fffffffffffff700000000000000000000000001p1023", 860 "0x1.fffffffffffff8p1023", 861 "0x1.fffffffffffff800000000000000000000000001p1023", 862 "0x1.fffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffp1023", 863 "0x1.fffffffffffff9p1023", 864 "0x1.fffffffffffff900000000000000000000000001p1023", 865 "0x1.ffffffffffffffp1023", 866 "0x1.ffffffffffffff00000000000000000000000001p1023", 867 "0x1.fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp1023", 868 869 "-0x1.fffffffffffffp1023", 870 "-0x1.fffffffffffff000000000000000000000000001p1023", 871 "-0x1.fffffffffffff1p1023", 872 "-0x1.fffffffffffff100000000000000000000000001p1023", 873 "-0x1.fffffffffffff1fffffffffffffffffffffffffffffffffffffffffffffp1023", 874 "-0x1.fffffffffffff7p1023", 875 "-0x1.fffffffffffff700000000000000000000000001p1023", 876 "-0x1.fffffffffffff8p1023", 877 "-0x1.fffffffffffff800000000000000000000000001p1023", 878 "-0x1.fffffffffffff8fffffffffffffffffffffffffffffffffffffffffffffp1023", 879 "-0x1.fffffffffffff9p1023", 880 "-0x1.fffffffffffff900000000000000000000000001p1023", 881 "-0x1.ffffffffffffffp1023", 882 "-0x1.ffffffffffffff00000000000000000000000001p1023", 883 "-0x1.fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp1023" }; 884 885 for (int i = 0; i < inputs.length; i++) { 886 double actual = Double.parseDouble(inputs[i]); 887 double expected = Double.longBitsToDouble(expecteds[i]); 888 889 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 890 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 891 String errorMsg = i + "th input string is:<" + inputs[i] 892 + ">.The expected result should be:<" + expectedString 893 + ">, but was: <" + actualString + ">. "; 894 895 assertEquals(errorMsg, expected, actual, 0.0D); 896 } 897 } 898 899 /** 900 * java.lang.Double#parseDouble(java.lang.String) 901 */ 902 public void test_parseDouble_LString_MinNormalBoundary() { 903 long[] expecteds = { 904 0x10000000000000L, 0x10000000000000L, 0x10000000000000L, 905 0x10000000000000L, 0x10000000000000L, 0x10000000000000L, 906 0x10000000000000L, 0x10000000000000L, 0x10000000000001L, 907 0x10000000000001L, 0x10000000000001L, 0x10000000000001L, 908 0x10000000000001L, 0x10000000000001L, 0x10000000000001L, 909 910 0x8010000000000000L, 0x8010000000000000L, 0x8010000000000000L, 911 0x8010000000000000L, 0x8010000000000000L, 0x8010000000000000L, 912 0x8010000000000000L, 0x8010000000000000L, 0x8010000000000001L, 913 0x8010000000000001L, 0x8010000000000001L, 0x8010000000000001L, 914 0x8010000000000001L, 0x8010000000000001L, 0x8010000000000001L }; 915 916 String[] inputs = { 917 "0x1.0p-1022", 918 "0x1.00000000000001p-1022", 919 "0x1.000000000000010000000000000000001p-1022", 920 "0x1.00000000000001fffffffffffffffffffffffffffffffffp-1022", 921 "0x1.00000000000007p-1022", 922 "0x1.000000000000070000000000000000001p-1022", 923 "0x1.00000000000007fffffffffffffffffffffffffffffffffp-1022", 924 "0x1.00000000000008p-1022", 925 "0x1.000000000000080000000000000000001p-1022", 926 "0x1.00000000000008fffffffffffffffffffffffffffffffffp-1022", 927 "0x1.00000000000009p-1022", 928 "0x1.000000000000090000000000000000001p-1022", 929 "0x1.00000000000009fffffffffffffffffffffffffffffffffp-1022", 930 "0x1.0000000000000fp-1022", 931 "0x1.0000000000000ffffffffffffffffffffffffffffffffffp-1022", 932 933 "-0x1.0p-1022", 934 "-0x1.00000000000001p-1022", 935 "-0x1.000000000000010000000000000000001p-1022", 936 "-0x1.00000000000001fffffffffffffffffffffffffffffffffp-1022", 937 "-0x1.00000000000007p-1022", 938 "-0x1.000000000000070000000000000000001p-1022", 939 "-0x1.00000000000007fffffffffffffffffffffffffffffffffp-1022", 940 "-0x1.00000000000008p-1022", 941 "-0x1.000000000000080000000000000000001p-1022", 942 "-0x1.00000000000008fffffffffffffffffffffffffffffffffp-1022", 943 "-0x1.00000000000009p-1022", 944 "-0x1.000000000000090000000000000000001p-1022", 945 "-0x1.00000000000009fffffffffffffffffffffffffffffffffp-1022", 946 "-0x1.0000000000000fp-1022", 947 "-0x1.0000000000000ffffffffffffffffffffffffffffffffffp-1022" }; 948 949 for (int i = 0; i < inputs.length; i++) { 950 double actual = Double.parseDouble(inputs[i]); 951 double expected = Double.longBitsToDouble(expecteds[i]); 952 953 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 954 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 955 String errorMsg = i + "th input string is:<" + inputs[i] 956 + ">.The expected result should be:<" + expectedString 957 + ">, but was: <" + actualString + ">. "; 958 959 assertEquals(errorMsg, expected, actual, 0.0D); 960 } 961 } 962 963 /** 964 * java.lang.Double#parseDouble(java.lang.String) 965 */ 966 public void test_parseDouble_LString_MaxSubNormalBoundary() { 967 long[] expecteds = { 968 0xfffffffffffffL, 0xfffffffffffffL, 0xfffffffffffffL, 969 0xfffffffffffffL, 0xfffffffffffffL, 0xfffffffffffffL, 970 0xfffffffffffffL, 0x10000000000000L, 0x10000000000000L, 971 0x10000000000000L, 0x10000000000000L, 0x10000000000000L, 972 0x10000000000000L, 0x10000000000000L, 0x10000000000000L, 973 974 0x800fffffffffffffL, 0x800fffffffffffffL, 0x800fffffffffffffL, 975 0x800fffffffffffffL, 0x800fffffffffffffL, 0x800fffffffffffffL, 976 0x800fffffffffffffL, 0x8010000000000000L, 0x8010000000000000L, 977 0x8010000000000000L, 0x8010000000000000L, 0x8010000000000000L, 978 0x8010000000000000L, 0x8010000000000000L, 0x8010000000000000L }; 979 980 String[] inputs = { 981 "0x0.fffffffffffffp-1022", 982 "0x0.fffffffffffff00000000000000000000000000000000001p-1022", 983 "0x0.fffffffffffff1p-1022", 984 "0x0.fffffffffffff10000000000000000000000000000000001p-1022", 985 "0x0.fffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 986 "0x0.fffffffffffff7p-1022", 987 "0x0.fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 988 "0x0.fffffffffffff8p-1022", 989 "0x0.fffffffffffff80000000000000000000000000000000001p-1022", 990 "0x0.fffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 991 "0x0.fffffffffffff9p-1022", 992 "0x0.fffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 993 "0x0.ffffffffffffffp-1022", 994 "0x0.ffffffffffffff0000000000000000000000000000000001p-1022", 995 "0x0.ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 996 997 "-0x0.fffffffffffffp-1022", 998 "-0x0.fffffffffffff00000000000000000000000000000000001p-1022", 999 "-0x0.fffffffffffff1p-1022", 1000 "-0x0.fffffffffffff10000000000000000000000000000000001p-1022", 1001 "-0x0.fffffffffffff1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 1002 "-0x0.fffffffffffff7p-1022", 1003 "-0x0.fffffffffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 1004 "-0x0.fffffffffffff8p-1022", 1005 "-0x0.fffffffffffff80000000000000000000000000000000001p-1022", 1006 "-0x0.fffffffffffff8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 1007 "-0x0.fffffffffffff9p-1022", 1008 "-0x0.fffffffffffff9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022", 1009 "-0x0.ffffffffffffffp-1022", 1010 "-0x0.ffffffffffffff0000000000000000000000000000000001p-1022", 1011 "-0x0.ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffp-1022" }; 1012 1013 for (int i = 0; i < inputs.length; i++) { 1014 double actual = Double.parseDouble(inputs[i]); 1015 double expected = Double.longBitsToDouble(expecteds[i]); 1016 1017 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 1018 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 1019 String errorMsg = i + "th input string is:<" + inputs[i] 1020 + ">.The expected result should be:<" + expectedString 1021 + ">, but was: <" + actualString + ">. "; 1022 1023 assertEquals(errorMsg, expected, actual, 0.0D); 1024 } 1025 } 1026 1027 /** 1028 * java.lang.Double#parseDouble(java.lang.String) 1029 */ 1030 public void test_parseDouble_LString_MinSubNormalBoundary() { 1031 long[] expecteds = { 1032 0x1L, 0x1L, 0x2L, 1033 0x1L, 0x1L, 0x1L, 1034 0x2L, 0x2L, 0x2L, 1035 0x2L, 0x2L, 0x2L, 1036 0x2L, 0x2L, 0x2L, 1037 1038 0x8000000000000001L, 0x8000000000000001L, 0x8000000000000002L, 1039 0x8000000000000001L, 0x8000000000000001L, 0x8000000000000001L, 1040 0x8000000000000002L, 0x8000000000000002L, 0x8000000000000002L, 1041 0x8000000000000002L, 0x8000000000000002L, 0x8000000000000002L, 1042 0x8000000000000002L, 0x8000000000000002L, 0x8000000000000002L }; 1043 1044 String[] inputs = { 1045 "0x0.0000000000001p-1022", 1046 "0x0.00000000000010000000000000000001p-1022", 1047 "0x0.0000000000001fffffffffffffffffffffffffffffffffp-1022", 1048 "0x0.00000000000017p-1022", 1049 "0x0.000000000000170000000000000000001p-1022", 1050 "0x0.00000000000017fffffffffffffffffffffffffffffffffp-1022", 1051 "0x0.00000000000018p-1022", 1052 "0x0.000000000000180000000000000000001p-1022", 1053 "0x0.00000000000018fffffffffffffffffffffffffffffffffp-1022", 1054 "0x0.00000000000019p-1022", 1055 "0x0.000000000000190000000000000000001p-1022", 1056 "0x0.00000000000019fffffffffffffffffffffffffffffffffp-1022", 1057 "0x0.0000000000001fp-1022", 1058 "0x0.0000000000001f0000000000000000001p-1022", 1059 "0x0.0000000000001ffffffffffffffffffffffffffffffffffp-1022", 1060 1061 "-0x0.0000000000001p-1022", 1062 "-0x0.00000000000010000000000000000001p-1022", 1063 "-0x0.0000000000001fffffffffffffffffffffffffffffffffp-1022", 1064 "-0x0.00000000000017p-1022", 1065 "-0x0.000000000000170000000000000000001p-1022", 1066 "-0x0.00000000000017fffffffffffffffffffffffffffffffffp-1022", 1067 "-0x0.00000000000018p-1022", 1068 "-0x0.000000000000180000000000000000001p-1022", 1069 "-0x0.00000000000018fffffffffffffffffffffffffffffffffp-1022", 1070 "-0x0.00000000000019p-1022", 1071 "-0x0.000000000000190000000000000000001p-1022", 1072 "-0x0.00000000000019fffffffffffffffffffffffffffffffffp-1022", 1073 "-0x0.0000000000001fp-1022", 1074 "-0x0.0000000000001f0000000000000000001p-1022", 1075 "-0x0.0000000000001ffffffffffffffffffffffffffffffffffp-1022" }; 1076 1077 for (int i = 0; i < inputs.length; i++) { 1078 double actual = Double.parseDouble(inputs[i]); 1079 double expected = Double.longBitsToDouble(expecteds[i]); 1080 1081 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 1082 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 1083 String errorMsg = i + "th input string is:<" + inputs[i] 1084 + ">.The expected result should be:<" + expectedString 1085 + ">, but was: <" + actualString + ">. "; 1086 1087 assertEquals(errorMsg, expected, actual, 0.0D); 1088 } 1089 } 1090 1091 /** 1092 * java.lang.Double#parseDouble(java.lang.String) 1093 */ 1094 public void test_parseDouble_LString_ZeroBoundary() { 1095 long[] expecteds = { 1096 0x0L, 0x0L, 0x0L, 1097 0x1L, 0x1L, 0x1L, 1098 0x1L, 0x1L, 0x1L, 1099 0x8000000000000000L, 0x8000000000000000L, 0x8000000000000000L, 1100 0x8000000000000001L, 0x8000000000000001L, 0x8000000000000001L, 1101 0x8000000000000001L, 0x8000000000000001L, 0x8000000000000001L }; 1102 1103 String[] inputs = { 1104 "0x0.00000000000004p-1022", 1105 "0x0.00000000000007ffffffffffffffffffffffp-1022", 1106 "0x0.00000000000008p-1022", 1107 "0x0.000000000000080000000000000000001p-1022", 1108 "0x0.00000000000008fffffffffffffffffffffffffffffffp-1022", 1109 "0x0.00000000000009p-1022", 1110 "0x0.000000000000090000000000000000001p-1022", 1111 "0x0.00000000000009fffffffffffffffffffffffffffffffffp-1022", 1112 "0x0.0000000000000fffffffffffffffffffffffffffffffffffp-1022", 1113 1114 "-0x0.00000000000004p-1022", 1115 "-0x0.00000000000007ffffffffffffffffffffffp-1022", 1116 "-0x0.00000000000008p-1022", 1117 "-0x0.000000000000080000000000000000001p-1022", 1118 "-0x0.00000000000008fffffffffffffffffffffffffffffffp-1022", 1119 "-0x0.00000000000009p-1022", 1120 "-0x0.000000000000090000000000000000001p-1022", 1121 "-0x0.00000000000009fffffffffffffffffffffffffffffffffp-1022", 1122 "-0x0.0000000000000fffffffffffffffffffffffffffffffffffp-1022" }; 1123 1124 for (int i = 0; i < inputs.length; i++) { 1125 double actual = Double.parseDouble(inputs[i]); 1126 double expected = Double.longBitsToDouble(expecteds[i]); 1127 1128 String expectedString = "0x" + Long.toHexString(Double.doubleToLongBits(expected)); 1129 String actualString = "0x" + Long.toHexString(Double.doubleToLongBits(actual)); 1130 String errorMsg = i + "th input string is:<" + inputs[i] 1131 + ">.The expected result should be:<" + expectedString 1132 + ">, but was: <" + actualString + ">. "; 1133 1134 assertEquals(errorMsg, expected, actual, 0.0D); 1135 } 1136 } 1137 1138 /** 1139 * java.lang.Double#shortValue() 1140 */ 1141 public void test_shortValue() { 1142 // Test for method short java.lang.Double.shortValue() 1143 Double d = new Double(1923311.47712); 1144 assertEquals("Returned incorrect short value", 22767, d.shortValue()); 1145 } 1146 1147 /** 1148 * java.lang.Double#toString() 1149 */ 1150 public void test_toString() { 1151 // Test for method java.lang.String java.lang.Double.toString() 1152 test_toString(1.7976931348623157E308, "1.7976931348623157E308"); 1153 test_toString(5.0E-4, "5.0E-4"); 1154 } 1155 1156 /** 1157 * java.lang.Double#toString(double) 1158 */ 1159 public void test_toStringD() { 1160 // Test for method java.lang.String java.lang.Double.toString(double) 1161 test_toString(1.7976931348623157E308, "1.7976931348623157E308"); 1162 test_toString(1.0 / 0.0, "Infinity"); 1163 test_toString(0.0 / 0.0, "NaN"); 1164 test_toString(-1.0 / 0.0, "-Infinity"); 1165 1166 double d; 1167 d = Double.longBitsToDouble(0x470fffffffffffffL); 1168 test_toString(d, "2.0769187434139308E34"); 1169 d = Double.longBitsToDouble(0x4710000000000000L); 1170 test_toString(d, "2.076918743413931E34"); 1171 1172 d = Double.longBitsToDouble(0x470000000000000aL); 1173 test_toString(d, "1.0384593717069678E34"); 1174 d = Double.longBitsToDouble(0x470000000000000bL); 1175 test_toString(d, "1.038459371706968E34"); 1176 1177 d = Double.longBitsToDouble(0x4700000000000017L); 1178 test_toString(d, "1.0384593717069708E34"); 1179 d = Double.longBitsToDouble(0x4700000000000018L); 1180 test_toString(d, "1.038459371706971E34"); 1181 1182 d = Double.longBitsToDouble(0x4700000000000024L); 1183 test_toString(d, "1.0384593717069738E34"); 1184 d = Double.longBitsToDouble(0x4700000000000025L); 1185 test_toString(d, "1.038459371706974E34"); 1186 1187 d = Double.longBitsToDouble(0x4700000000000031L); 1188 test_toString(d, "1.0384593717069768E34"); 1189 d = Double.longBitsToDouble(0x4700000000000032L); 1190 test_toString(d, "1.038459371706977E34"); 1191 1192 d = Double.longBitsToDouble(0x470000000000003eL); 1193 test_toString(d, "1.0384593717069798E34"); 1194 d = Double.longBitsToDouble(0x470000000000003fL); 1195 test_toString(d, "1.03845937170698E34"); 1196 1197 d = Double.longBitsToDouble(0x7e00000000000003L); 1198 test_toString(d, "8.371160993642719E298"); 1199 d = Double.longBitsToDouble(0x7e00000000000004L); 1200 test_toString(d, "8.37116099364272E298"); 1201 1202 d = Double.longBitsToDouble(0x7e00000000000008L); 1203 test_toString(d, "8.371160993642728E298"); 1204 d = Double.longBitsToDouble(0x7e00000000000009L); 1205 test_toString(d, "8.37116099364273E298"); 1206 1207 d = Double.longBitsToDouble(0x7e00000000000013L); 1208 test_toString(d, "8.371160993642749E298"); 1209 d = Double.longBitsToDouble(0x7e00000000000014L); 1210 test_toString(d, "8.37116099364275E298"); 1211 1212 d = Double.longBitsToDouble(0x7e00000000000023L); 1213 test_toString(d, "8.371160993642779E298"); 1214 d = Double.longBitsToDouble(0x7e00000000000024L); 1215 test_toString(d, "8.37116099364278E298"); 1216 1217 d = Double.longBitsToDouble(0x7e0000000000002eL); 1218 test_toString(d, "8.371160993642799E298"); 1219 d = Double.longBitsToDouble(0x7e0000000000002fL); 1220 test_toString(d, "8.3711609936428E298"); 1221 1222 d = Double.longBitsToDouble(0xda00000000000001L); 1223 test_toString(d, "-3.3846065602060736E125"); 1224 d = Double.longBitsToDouble(0xda00000000000002L); 1225 test_toString(d, "-3.384606560206074E125"); 1226 1227 d = Double.longBitsToDouble(0xda00000000000005L); 1228 test_toString(d, "-3.3846065602060766E125"); 1229 d = Double.longBitsToDouble(0xda00000000000006L); 1230 test_toString(d, "-3.384606560206077E125"); 1231 1232 d = Double.longBitsToDouble(0xda00000000000009L); 1233 test_toString(d, "-3.3846065602060796E125"); 1234 d = Double.longBitsToDouble(0xda0000000000000aL); 1235 test_toString(d, "-3.38460656020608E125"); 1236 1237 d = Double.longBitsToDouble(0xda0000000000000dL); 1238 test_toString(d, "-3.3846065602060826E125"); 1239 d = Double.longBitsToDouble(0xda0000000000000eL); 1240 test_toString(d, "-3.384606560206083E125"); 1241 } 1242 1243 /** 1244 * java.lang.Double#valueOf(java.lang.String) 1245 */ 1246 public void test_valueOfLjava_lang_String() { 1247 // Test for method java.lang.Double 1248 // java.lang.Double.valueOf(java.lang.String) 1249 assertTrue("Incorrect double returned", Math.abs(Double.valueOf("999999999999.999") 1250 .doubleValue() - 999999999999.999d) < 1); 1251 1252 try { 1253 Double.valueOf(null); 1254 fail("Expected Double.valueOf(null) to throw NPE."); 1255 } catch (NullPointerException ex) { 1256 // expected 1257 } 1258 1259 try { 1260 Double.valueOf(""); 1261 fail("Expected Double.valueOf(\"\") to throw NFE"); 1262 } catch (NumberFormatException e) { 1263 // expected 1264 } 1265 1266 Double pi = Double.valueOf("3.141592654"); 1267 assertEquals(3.141592654, pi.doubleValue(), 0D); 1268 1269 Double posZero = Double.valueOf("+0.0"); 1270 Double negZero = Double.valueOf("-0.0"); 1271 assertFalse("Doubletest0", posZero.equals(negZero)); 1272 1273 // Tests for double values by name. 1274 Double expectedNaN = new Double(Double.NaN); 1275 1276 Double posNaN = Double.valueOf("NaN"); 1277 assertTrue("Doubletest1", posNaN.equals(expectedNaN)); 1278 1279 Double posNaNSigned = Double.valueOf("+NaN"); 1280 assertTrue("Doubletest2", posNaNSigned.equals(expectedNaN)); 1281 1282 Double negNaNSigned = Double.valueOf("-NaN"); 1283 assertTrue("Doubletest3", negNaNSigned.equals(expectedNaN)); 1284 1285 Double posInfinite = Double.valueOf("Infinity"); 1286 assertTrue("Doubletest4", posInfinite.equals(new Double(Double.POSITIVE_INFINITY))); 1287 1288 Double posInfiniteSigned = Double.valueOf("+Infinity"); 1289 assertTrue("Doubletest5", posInfiniteSigned 1290 .equals(new Double(Double.POSITIVE_INFINITY))); 1291 1292 Double negInfiniteSigned = Double.valueOf("-Infinity"); 1293 assertTrue("Doubletest6", negInfiniteSigned 1294 .equals(new Double(Double.NEGATIVE_INFINITY))); 1295 } 1296 1297 /** 1298 * java.lang.Double#compareTo(java.lang.Double) 1299 * java.lang.Double#compare(double, double) 1300 */ 1301 public void test_compareToLjava_lang_Double() { 1302 // A selection of double values in ascending order. 1303 double[] values = new double[] { Double.NEGATIVE_INFINITY, -Double.MAX_VALUE, -2d, 1304 -Double.MIN_VALUE, -0d, 0d, Double.MIN_VALUE, 2d, Double.MAX_VALUE, 1305 Double.POSITIVE_INFINITY, Double.NaN }; 1306 for (int i = 0; i < values.length; i++) { 1307 double d1 = values[i]; 1308 1309 // Test that each value compares equal to itself; and each object is 1310 // equal to another object like itself. 1311 assertTrue("Assert 0: compare() should be equal: " + d1, 1312 Double.compare(d1, d1) == 0); 1313 Double objDouble = new Double(d1); 1314 assertTrue("Assert 1: compareTo() should be equal: " + d1, objDouble 1315 .compareTo(objDouble) == 0); 1316 1317 // Test that the Double-defined order is respected 1318 for (int j = i + 1; j < values.length; j++) { 1319 double d2 = values[j]; 1320 assertTrue("Assert 2: compare() " + d1 + " should be less " + d2, Double 1321 .compare(d1, d2) == -1); 1322 assertTrue("Assert 3: compare() " + d2 + " should be greater " + d1, Double 1323 .compare(d2, d1) == 1); 1324 Double D2 = new Double(d2); 1325 assertTrue("Assert 4: compareTo() " + d1 + " should be less " + d2, objDouble 1326 .compareTo(D2) == -1); 1327 assertTrue("Assert 5: compareTo() " + d2 + " should be greater " + d1, D2 1328 .compareTo(objDouble) == 1); 1329 } 1330 } 1331 1332 try { 1333 new Double(0.0D).compareTo(null); 1334 fail("No NPE"); 1335 } catch (NullPointerException e) { 1336 } 1337 } 1338 1339 /** 1340 * java.lang.Double#equals(java.lang.Object) 1341 */ 1342 public void test_equalsLjava_lang_Object() { 1343 Double d1 = new Double(87654321.12345d); 1344 Double d2 = new Double(87654321.12345d); 1345 Double d3 = new Double(0.0002f); 1346 assertTrue("Assert 0: Equality test failed", d1.equals(d2) && !(d1.equals(d3))); 1347 1348 assertTrue("Assert 2: NaN should not be == Nan", Double.NaN != Double.NaN); 1349 assertTrue("Assert 3: NaN should not be == Nan", new Double(Double.NaN) 1350 .equals(new Double(Double.NaN))); 1351 assertTrue("Assert 4: -0d should be == 0d", 0d == -0d); 1352 assertTrue("Assert 5: -0d should not be equals() 0d", !new Double(0d) 1353 .equals(new Double(-0d))); 1354 1355 Double dmax = new Double(Double.MAX_VALUE); 1356 Double dmax1 = new Double(Double.MAX_VALUE); 1357 1358 assertTrue("Equality test failed", dmax.equals(dmax1) && !(dmax.equals(new Object()))); 1359 } 1360 1361 /** 1362 * java.lang.Double#toHexString(double) 1363 */ 1364 public void test_toHexStringF() { 1365 // the follow values come from the Double Javadoc/Spec 1366 assertEquals("0x0.0p0", Double.toHexString(0.0D)); 1367 assertEquals("-0x0.0p0", Double.toHexString(-0.0D)); 1368 assertEquals("0x1.0p0", Double.toHexString(1.0D)); 1369 assertEquals("-0x1.0p0", Double.toHexString(-1.0D)); 1370 assertEquals("0x1.0p1", Double.toHexString(2.0D)); 1371 assertEquals("0x1.8p1", Double.toHexString(3.0D)); 1372 assertEquals("0x1.0p-1", Double.toHexString(0.5D)); 1373 assertEquals("0x1.0p-2", Double.toHexString(0.25D)); 1374 assertEquals("0x1.fffffffffffffp1023", Double.toHexString(Double.MAX_VALUE)); 1375 assertEquals("0x0.0000000000001p-1022", Double.toHexString(Double.MIN_VALUE)); 1376 1377 // test edge cases 1378 assertEquals("NaN", Double.toHexString(Double.NaN)); 1379 assertEquals("-Infinity", Double.toHexString(Double.NEGATIVE_INFINITY)); 1380 assertEquals("Infinity", Double.toHexString(Double.POSITIVE_INFINITY)); 1381 1382 // test various numbers 1383 assertEquals("-0x1.da8p6", Double.toHexString(-118.625D)); 1384 assertEquals("0x1.2957874cccccdp23", Double.toHexString(9743299.65D)); 1385 assertEquals("0x1.2957874cccccdp23", Double.toHexString(9743299.65000D)); 1386 assertEquals("0x1.2957874cccf63p23", Double.toHexString(9743299.650001234D)); 1387 assertEquals("0x1.700d1061d3333p33", Double.toHexString(12349743299.65000D)); 1388 1389 // test HARMONY-2132 1390 assertEquals("0x1.01p10", Double.toHexString(0x1.01p10)); 1391 } 1392 1393 /** 1394 * java.lang.Double#valueOf(double) 1395 */ 1396 public void test_valueOfD() { 1397 assertEquals(new Double(Double.MIN_VALUE), Double.valueOf(Double.MIN_VALUE)); 1398 assertEquals(new Double(Double.MAX_VALUE), Double.valueOf(Double.MAX_VALUE)); 1399 assertEquals(new Double(0), Double.valueOf(0)); 1400 1401 int s = -128; 1402 while (s < 128) { 1403 assertEquals(new Double(s), Double.valueOf(s)); 1404 assertEquals(new Double(s + 0.1D), Double.valueOf(s + 0.1D)); 1405 s++; 1406 } 1407 } 1408 1409 /** 1410 * {@link java.lang.Double#MAX_EXPONENT} 1411 * @since 1.6 1412 */ 1413 public void test_MAX_EXPONENT() { 1414 assertTrue("Wrong value of java.lang.Double.MAX_EXPONENT", 1415 Double.MAX_EXPONENT == 1023); 1416 assertTrue("Wrong value of java.lang.Double.MAX_EXPONENT", 1417 Double.MAX_EXPONENT == Math.getExponent(Double.MAX_VALUE)); 1418 } 1419 1420 /** 1421 * {@link java.lang.Double#MIN_EXPONENT} 1422 * @since 1.6 1423 */ 1424 public void test_MIN_EXPONENT() { 1425 assertTrue("Wrong value of java.lang.Double.MIN_EXPONENT", 1426 Double.MIN_EXPONENT == -1022); 1427 assertTrue("Wrong value of java.lang.Double.MIN_EXPONENT", 1428 Double.MIN_EXPONENT == Math.getExponent(Double.MIN_NORMAL)); 1429 } 1430 1431 /** 1432 * {@link java.lang.Double#MIN_NORMAL} 1433 * @since 1.6 1434 */ 1435 public void test_MIN_NORMAL() { 1436 assertTrue("Wrong value of java.lang.Double.MIN_NORMAL", 1437 Double.MIN_NORMAL == 0x1.0p-1022); 1438 assertTrue("Wrong value of java.lang.Double.MIN_NORMAL", 1439 Double.MIN_NORMAL == Double 1440 .longBitsToDouble(0x0010000000000000L)); 1441 assertTrue("Wrong value of java.lang.Double.MIN_NORMAL", 1442 Double.MIN_NORMAL == 2.2250738585072014E-308); 1443 } 1444 } 1445