package jsnum // Copyright 2018 Ulf Adams // // The contents of this file may be used under the terms of the Apache License, // Version 2.0. // // (See accompanying file LICENSE-Apache or copy at // http://www.apache.org/licenses/LICENSE-2.0) // // Alternatively, the contents of this file may be used under the terms of // the Boost Software License, Version 1.0. // (See accompanying file LICENSE-Boost or copy at // https://www.boost.org/LICENSE_1_0.txt) // // Unless required by applicable law or agreed to in writing, this software // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. // Copied from https://github.com/ulfjack/ryu/blob/1264a946ba66eab320e927bfd2362e0c8580c42f/ryu/tests/d2s_test.cc // Modified to fit Number::toString's output. func ieeeParts2Double(sign bool, ieeeExponent uint32, ieeeMantissa uint64) Number { if ieeeExponent > 2047 { panic("ieeeExponent > 2047") } if ieeeMantissa > maxMantissa { panic("ieeeMantissa > maxMantissa") } signBit := uint64(0) if sign { signBit = 1 } return numberFromBits((signBit << 63) | (uint64(ieeeExponent) << 52) | ieeeMantissa) } const maxMantissa = (1 << 53) - 1 var ryuTests = []stringTest{ {2.2250738585072014e-308, "2.2250738585072014e-308"}, {numberFromBits(0x7fefffffffffffff), "1.7976931348623157e+308"}, {numberFromBits(1), "5e-324"}, {2.98023223876953125e-8, "2.9802322387695312e-8"}, {-2.109808898695963e16, "-21098088986959630"}, {4.940656e-318, "4.940656e-318"}, {1.18575755e-316, "1.18575755e-316"}, {2.989102097996e-312, "2.989102097996e-312"}, {9.0608011534336e15, "9060801153433600"}, {4.708356024711512e18, "4708356024711512000"}, {9.409340012568248e18, "9409340012568248000"}, {1.2345678, "1.2345678"}, {numberFromBits(0x4830F0CF064DD592), "5.764607523034235e+39"}, {numberFromBits(0x4840F0CF064DD592), "1.152921504606847e+40"}, {numberFromBits(0x4850F0CF064DD592), "2.305843009213694e+40"}, {1.2, "1.2"}, {1.23, "1.23"}, {1.234, "1.234"}, {1.2345, "1.2345"}, {1.23456, "1.23456"}, {1.234567, "1.234567"}, {1.2345678, "1.2345678"}, {1.23456789, "1.23456789"}, {1.234567895, "1.234567895"}, {1.2345678901, "1.2345678901"}, {1.23456789012, "1.23456789012"}, {1.234567890123, "1.234567890123"}, {1.2345678901234, "1.2345678901234"}, {1.23456789012345, "1.23456789012345"}, {1.234567890123456, "1.234567890123456"}, {1.2345678901234567, "1.2345678901234567"}, {4.294967294, "4.294967294"}, {4.294967295, "4.294967295"}, {4.294967296, "4.294967296"}, {4.294967297, "4.294967297"}, {4.294967298, "4.294967298"}, {ieeeParts2Double(false, 4, 0), "1.7800590868057611e-307"}, {ieeeParts2Double(false, 6, maxMantissa), "2.8480945388892175e-306"}, {ieeeParts2Double(false, 41, 0), "2.446494580089078e-296"}, {ieeeParts2Double(false, 40, maxMantissa), "4.8929891601781557e-296"}, {ieeeParts2Double(false, 1077, 0), "18014398509481984"}, {ieeeParts2Double(false, 1076, maxMantissa), "36028797018963964"}, {ieeeParts2Double(false, 307, 0), "2.900835519859558e-216"}, {ieeeParts2Double(false, 306, maxMantissa), "5.801671039719115e-216"}, {ieeeParts2Double(false, 934, 0x000FA7161A4D6E0C), "3.196104012172126e-27"}, {9007199254740991.0, "9007199254740991"}, {9007199254740992.0, "9007199254740992"}, {1.0e+0, "1"}, {1.2e+1, "12"}, {1.23e+2, "123"}, {1.234e+3, "1234"}, {1.2345e+4, "12345"}, {1.23456e+5, "123456"}, {1.234567e+6, "1234567"}, {1.2345678e+7, "12345678"}, {1.23456789e+8, "123456789"}, {1.23456789e+9, "1234567890"}, {1.234567895e+9, "1234567895"}, {1.2345678901e+10, "12345678901"}, {1.23456789012e+11, "123456789012"}, {1.234567890123e+12, "1234567890123"}, {1.2345678901234e+13, "12345678901234"}, {1.23456789012345e+14, "123456789012345"}, {1.234567890123456e+15, "1234567890123456"}, {1.0e+0, "1"}, {1.0e+1, "10"}, {1.0e+2, "100"}, {1.0e+3, "1000"}, {1.0e+4, "10000"}, {1.0e+5, "100000"}, {1.0e+6, "1000000"}, {1.0e+7, "10000000"}, {1.0e+8, "100000000"}, {1.0e+9, "1000000000"}, {1.0e+10, "10000000000"}, {1.0e+11, "100000000000"}, {1.0e+12, "1000000000000"}, {1.0e+13, "10000000000000"}, {1.0e+14, "100000000000000"}, {1.0e+15, "1000000000000000"}, {1000000000000001, "1000000000000001"}, {1000000000000010, "1000000000000010"}, {1000000000000100, "1000000000000100"}, {1000000000001000, "1000000000001000"}, {1000000000010000, "1000000000010000"}, {1000000000100000, "1000000000100000"}, {1000000001000000, "1000000001000000"}, {1000000010000000, "1000000010000000"}, {1000000100000000, "1000000100000000"}, {1000001000000000, "1000001000000000"}, {1000010000000000, "1000010000000000"}, {1000100000000000, "1000100000000000"}, {1001000000000000, "1001000000000000"}, {1010000000000000, "1010000000000000"}, {1100000000000000, "1100000000000000"}, {8.0, "8"}, {64.0, "64"}, {512.0, "512"}, {8192.0, "8192"}, {65536.0, "65536"}, {524288.0, "524288"}, {8388608.0, "8388608"}, {67108864.0, "67108864"}, {536870912.0, "536870912"}, {8589934592.0, "8589934592"}, {68719476736.0, "68719476736"}, {549755813888.0, "549755813888"}, {8796093022208.0, "8796093022208"}, {70368744177664.0, "70368744177664"}, {562949953421312.0, "562949953421312"}, {9007199254740992.0, "9007199254740992"}, {8.0e+3, "8000"}, {64.0e+3, "64000"}, {512.0e+3, "512000"}, {8192.0e+3, "8192000"}, {65536.0e+3, "65536000"}, {524288.0e+3, "524288000"}, {8388608.0e+3, "8388608000"}, {67108864.0e+3, "67108864000"}, {536870912.0e+3, "536870912000"}, {8589934592.0e+3, "8589934592000"}, {68719476736.0e+3, "68719476736000"}, {549755813888.0e+3, "549755813888000"}, {8796093022208.0e+3, "8796093022208000"}, }