Home | History | Annotate | Download | only in kde
      1 // Copyright 2013 the V8 project authors. All rights reserved.
      2 // Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
      3 //
      4 // Redistribution and use in source and binary forms, with or without
      5 // modification, are permitted provided that the following conditions
      6 // are met:
      7 // 1.  Redistributions of source code must retain the above copyright
      8 //     notice, this list of conditions and the following disclaimer.
      9 // 2.  Redistributions in binary form must reproduce the above copyright
     10 //     notice, this list of conditions and the following disclaimer in the
     11 //     documentation and/or other materials provided with the distribution.
     12 //
     13 // THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
     14 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     15 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     16 // DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     17 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     18 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     19 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
     20 // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     21 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     22 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     23 
     24 description("KDE JS Test");
     25 shouldBe("Number()", "0");
     26 shouldBe("Number(1)", "1");
     27 shouldBe("Number(1.1)", "1.1");
     28 shouldBe("Number('1.2')", "1.2");
     29 shouldBe("isNaN(Number('a'))", "true");
     30 
     31 shouldBe("(new Number()).valueOf()", "0");
     32 shouldBe("(new Number(.4)).valueOf()", "0.4");
     33 shouldBe("(new Number('1.')).valueOf()", "1");
     34 shouldBe("isNaN(new Number('a'))", "true");
     35 
     36 shouldBe("isNaN(Number.NaN)", "true");
     37 shouldBe("Number.NEGATIVE_INFINITY", "-Infinity");
     38 shouldBe("Number.POSITIVE_INFINITY", "Infinity");
     39 
     40 shouldBe("(1).toString()", "'1'");
     41 shouldBe("typeof (1).toString()", "'string'");
     42 shouldBe("(10).toString(16)", "'a'");
     43 shouldBe("(8.5).toString(16)", "'8.8'");
     44 shouldBe("(-8.5).toString(16)", "'-8.8'");
     45 shouldBe("Number.NaN.toString(16)", "'NaN'");
     46 shouldBe("Number.POSITIVE_INFINITY.toString(16)", "'Infinity'");
     47 shouldBe("Number.NEGATIVE_INFINITY.toString(16)", "'-Infinity'");
     48 shouldBe("Number.MAX_VALUE.toString(2).length", "1024");
     49 shouldBe("(1).valueOf()", "1");
     50 shouldBe("typeof (1).valueOf()", "'number'");
     51 
     52 function toFixedOrException(val,fractionDigits)
     53 {
     54   var s = "";
     55   try {
     56     s = String(Number(val).toFixed(fractionDigits));
     57   }
     58   catch (e) {
     59     s = String(e);
     60   }
     61   return s;
     62 }
     63 
     64 shouldBe("Number(1234.567).toFixed(0)","\"1235\"");
     65 shouldBe("Number(1234.567).toFixed(undefined)","\"1235\"");
     66 shouldBe("Number(-1234.567).toFixed(0)","\"-1235\"");
     67 shouldBe("Number(-1234.567).toFixed(undefined)","\"-1235\"");
     68 shouldBe("Number(0).toFixed(7)","\"0.0000000\"");
     69 shouldBe("Number(0.003).toFixed(0)","\"0\"");
     70 shouldBe("Number(-0.003).toFixed(0)","\"-0\"");
     71 shouldBe("Number(40.1234567890123).toFixed(7)","\"40.1234568\"");
     72 shouldBe("Number(-40.1234567890123).toFixed(7)","\"-40.1234568\"");
     73 shouldBe("Number(4).toFixed(7)","\"4.0000000\"");
     74 shouldBe("Number(-4).toFixed(7)","\"-4.0000000\"");
     75 shouldBe("Number(0.000056).toFixed(7)","\"0.0000560\"");
     76 shouldBe("Number(-0.000056).toFixed(7)","\"-0.0000560\"");
     77 shouldBe("Number(NaN).toFixed(7)","\"NaN\"");
     78 shouldBe("Number(Infinity).toFixed(7)","\"Infinity\"");
     79 shouldBe("Number(-Infinity).toFixed(7)","\"-Infinity\"");
     80 shouldBe("Number(Math.pow(10,4)).toFixed(13)","\"10000.0000000000000\"");
     81 shouldBe("Number(Math.pow(10,17)).toFixed(16)","\"100000000000000000.0000000000000000\"");
     82 shouldBe("Number(Math.pow(10,18)).toFixed(17)","\"1000000000000000000.00000000000000000\"");
     83 shouldBe("Number(Math.pow(10,19)).toFixed(18)","\"10000000000000000000.000000000000000000\"");
     84 shouldBe("Number(Math.pow(10,17)).toFixed(20)","\"100000000000000000.00000000000000000000\"");
     85 shouldBe("Number(Math.pow(10,18)).toFixed(20)","\"1000000000000000000.00000000000000000000\"");
     86 shouldBe("Number(Math.pow(10,19)).toFixed(20)","\"10000000000000000000.00000000000000000000\"");
     87 shouldBe("Number(Math.pow(10,20)).toFixed(20)","\"100000000000000000000.00000000000000000000\"");
     88 shouldBe("Number(Math.pow(10,21)).toFixed(20)","\"1e+21\"");
     89 shouldBe("Number(-Math.pow(10,4)).toFixed(13)","\"-10000.0000000000000\"");
     90 shouldBe("Number(-Math.pow(10,17)).toFixed(16)","\"-100000000000000000.0000000000000000\"");
     91 shouldBe("Number(-Math.pow(10,18)).toFixed(17)","\"-1000000000000000000.00000000000000000\"");
     92 shouldBe("Number(-Math.pow(10,19)).toFixed(18)","\"-10000000000000000000.000000000000000000\"");
     93 shouldBe("Number(-Math.pow(10,17)).toFixed(20)","\"-100000000000000000.00000000000000000000\"");
     94 shouldBe("Number(-Math.pow(10,18)).toFixed(20)","\"-1000000000000000000.00000000000000000000\"");
     95 shouldBe("Number(-Math.pow(10,19)).toFixed(20)","\"-10000000000000000000.00000000000000000000\"");
     96 shouldBe("Number(-Math.pow(10,20)).toFixed(20)","\"-100000000000000000000.00000000000000000000\"");
     97 shouldBe("Number(-Math.pow(10,21)).toFixed(20)","\"-1e+21\"");
     98 shouldBeTrue("toFixedOrException(2,-1).indexOf('Range') >= 0");
     99 shouldBe("Number(2).toFixed(0)","\"2\"");
    100 shouldBe("Number(2).toFixed(20)","\"2.00000000000000000000\"");
    101 shouldBeTrue("toFixedOrException(2,21).indexOf('Range') >= 0");
    102 shouldBeTrue("toFixedOrException(-2,-1).indexOf('Range') >= 0");
    103 shouldBe("Number(-2).toFixed(0)","\"-2\"");
    104 shouldBe("Number(-2).toFixed(20)","\"-2.00000000000000000000\"");
    105 shouldBeTrue("toFixedOrException(-2,21).indexOf('Range') >= 0");
    106 
    107 
    108 
    109 
    110 shouldBe("Number(NaN).toExponential()","\"NaN\"");
    111 shouldBe("Number(Infinity).toExponential()","\"Infinity\"");
    112 shouldBe("Number(-Infinity).toExponential()","\"-Infinity\"");
    113 shouldBe("Number(NaN).toExponential(4)","\"NaN\"");
    114 shouldBe("Number(Infinity).toExponential(4)","\"Infinity\"");
    115 shouldBe("Number(-Infinity).toExponential(4)","\"-Infinity\"");
    116 shouldBe("Number(123.456).toExponential()","\"1.23456e+2\"");
    117 shouldBeTrue("try { Number(123.456).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
    118 shouldBe("Number(123.456).toExponential(0)","\"1e+2\"");
    119 shouldBe("Number(123.456).toExponential(1)","\"1.2e+2\"");
    120 shouldBe("Number(123.456).toExponential(2)","\"1.23e+2\"");
    121 shouldBe("Number(123.456).toExponential(3)","\"1.235e+2\"");
    122 shouldBe("Number(123.456).toExponential(4)","\"1.2346e+2\"");
    123 shouldBe("Number(123.456).toExponential(5)","\"1.23456e+2\"");
    124 shouldBe("Number(123.456).toExponential(6)","\"1.234560e+2\"");
    125 shouldBe("Number(123.456).toExponential(7)","\"1.2345600e+2\"");
    126 shouldBe("Number(123.456).toExponential(8)","\"1.23456000e+2\"");
    127 shouldBe("Number(123.456).toExponential(9)","\"1.234560000e+2\"");
    128 shouldBe("Number(123.456).toExponential(10)","\"1.2345600000e+2\"");
    129 shouldBe("Number(123.456).toExponential(11)","\"1.23456000000e+2\"");
    130 shouldBe("Number(123.456).toExponential(12)","\"1.234560000000e+2\"");
    131 shouldBe("Number(123.456).toExponential(13)","\"1.2345600000000e+2\"");
    132 shouldBe("Number(123.456).toExponential(14)","\"1.23456000000000e+2\"");
    133 shouldBe("Number(123.456).toExponential(15)","\"1.234560000000000e+2\"");
    134 shouldBe("Number(123.456).toExponential(16)","\"1.2345600000000000e+2\"");
    135 shouldBe("Number(123.456).toExponential(17)","\"1.23456000000000003e+2\"");
    136 shouldBe("Number(123.456).toExponential(18)","\"1.234560000000000031e+2\"");
    137 shouldBe("Number(123.456).toExponential(19)","\"1.2345600000000000307e+2\"");
    138 shouldBe("Number(123.456).toExponential(20)","\"1.23456000000000003070e+2\"");
    139 shouldBeTrue("try { Number(123.456).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
    140 shouldBe("Number(-123.456).toExponential()","\"-1.23456e+2\"");
    141 shouldBeTrue("try { Number(-123.456).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
    142 shouldBe("Number(-123.456).toExponential(0)","\"-1e+2\"");
    143 shouldBe("Number(-123.456).toExponential(1)","\"-1.2e+2\"");
    144 shouldBe("Number(-123.456).toExponential(2)","\"-1.23e+2\"");
    145 shouldBe("Number(-123.456).toExponential(3)","\"-1.235e+2\"");
    146 shouldBe("Number(-123.456).toExponential(4)","\"-1.2346e+2\"");
    147 shouldBe("Number(-123.456).toExponential(5)","\"-1.23456e+2\"");
    148 shouldBe("Number(-123.456).toExponential(6)","\"-1.234560e+2\"");
    149 shouldBe("Number(-123.456).toExponential(7)","\"-1.2345600e+2\"");
    150 shouldBe("Number(-123.456).toExponential(8)","\"-1.23456000e+2\"");
    151 shouldBe("Number(-123.456).toExponential(9)","\"-1.234560000e+2\"");
    152 shouldBe("Number(-123.456).toExponential(10)","\"-1.2345600000e+2\"");
    153 shouldBe("Number(-123.456).toExponential(11)","\"-1.23456000000e+2\"");
    154 shouldBe("Number(-123.456).toExponential(12)","\"-1.234560000000e+2\"");
    155 shouldBe("Number(-123.456).toExponential(13)","\"-1.2345600000000e+2\"");
    156 shouldBe("Number(-123.456).toExponential(14)","\"-1.23456000000000e+2\"");
    157 shouldBe("Number(-123.456).toExponential(15)","\"-1.234560000000000e+2\"");
    158 shouldBe("Number(-123.456).toExponential(16)","\"-1.2345600000000000e+2\"");
    159 shouldBe("Number(-123.456).toExponential(17)","\"-1.23456000000000003e+2\"");
    160 shouldBe("Number(-123.456).toExponential(18)","\"-1.234560000000000031e+2\"");
    161 shouldBe("Number(-123.456).toExponential(19)","\"-1.2345600000000000307e+2\"");
    162 shouldBe("Number(-123.456).toExponential(20)","\"-1.23456000000000003070e+2\"");
    163 shouldBeTrue("try { Number(-123.456).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
    164 shouldBe("Number(.000123456).toExponential()","\"1.23456e-4\"");
    165 shouldBeTrue("try { Number(.000123456).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
    166 shouldBe("Number(.000123456).toExponential(0)","\"1e-4\"");
    167 shouldBe("Number(.000123456).toExponential(1)","\"1.2e-4\"");
    168 shouldBe("Number(.000123456).toExponential(2)","\"1.23e-4\"");
    169 shouldBe("Number(.000123456).toExponential(3)","\"1.235e-4\"");
    170 shouldBe("Number(.000123456).toExponential(4)","\"1.2346e-4\"");
    171 shouldBe("Number(.000123456).toExponential(5)","\"1.23456e-4\"");
    172 shouldBe("Number(.000123456).toExponential(6)","\"1.234560e-4\"");
    173 shouldBe("Number(.000123456).toExponential(7)","\"1.2345600e-4\"");
    174 shouldBe("Number(.000123456).toExponential(8)","\"1.23456000e-4\"");
    175 shouldBe("Number(.000123456).toExponential(9)","\"1.234560000e-4\"");
    176 shouldBe("Number(.000123456).toExponential(10)","\"1.2345600000e-4\"");
    177 shouldBe("Number(.000123456).toExponential(11)","\"1.23456000000e-4\"");
    178 shouldBe("Number(.000123456).toExponential(12)","\"1.234560000000e-4\"");
    179 shouldBe("Number(.000123456).toExponential(13)","\"1.2345600000000e-4\"");
    180 shouldBe("Number(.000123456).toExponential(14)","\"1.23456000000000e-4\"");
    181 shouldBe("Number(.000123456).toExponential(15)","\"1.234560000000000e-4\"");
    182 shouldBe("Number(.000123456).toExponential(16)","\"1.2345600000000001e-4\"");
    183 shouldBe("Number(.000123456).toExponential(17)","\"1.23456000000000005e-4\"");
    184 shouldBe("Number(.000123456).toExponential(18)","\"1.234560000000000052e-4\"");
    185 shouldBe("Number(.000123456).toExponential(19)","\"1.2345600000000000519e-4\"");
    186 shouldBe("Number(.000123456).toExponential(20)","\"1.23456000000000005188e-4\"");
    187 shouldBeTrue("try { Number(.000123456).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
    188 shouldBe("Number(-.000123456).toExponential()","\"-1.23456e-4\"");
    189 shouldBeTrue("try { Number(-.000123456).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
    190 shouldBe("Number(-.000123456).toExponential(0)","\"-1e-4\"");
    191 shouldBe("Number(-.000123456).toExponential(1)","\"-1.2e-4\"");
    192 shouldBe("Number(-.000123456).toExponential(2)","\"-1.23e-4\"");
    193 shouldBe("Number(-.000123456).toExponential(3)","\"-1.235e-4\"");
    194 shouldBe("Number(-.000123456).toExponential(4)","\"-1.2346e-4\"");
    195 shouldBe("Number(-.000123456).toExponential(5)","\"-1.23456e-4\"");
    196 shouldBe("Number(-.000123456).toExponential(6)","\"-1.234560e-4\"");
    197 shouldBe("Number(-.000123456).toExponential(7)","\"-1.2345600e-4\"");
    198 shouldBe("Number(-.000123456).toExponential(8)","\"-1.23456000e-4\"");
    199 shouldBe("Number(-.000123456).toExponential(9)","\"-1.234560000e-4\"");
    200 shouldBe("Number(-.000123456).toExponential(10)","\"-1.2345600000e-4\"");
    201 shouldBe("Number(-.000123456).toExponential(11)","\"-1.23456000000e-4\"");
    202 shouldBe("Number(-.000123456).toExponential(12)","\"-1.234560000000e-4\"");
    203 shouldBe("Number(-.000123456).toExponential(13)","\"-1.2345600000000e-4\"");
    204 shouldBe("Number(-.000123456).toExponential(14)","\"-1.23456000000000e-4\"");
    205 shouldBe("Number(-.000123456).toExponential(15)","\"-1.234560000000000e-4\"");
    206 shouldBe("Number(-.000123456).toExponential(16)","\"-1.2345600000000001e-4\"");
    207 shouldBe("Number(-.000123456).toExponential(17)","\"-1.23456000000000005e-4\"");
    208 shouldBe("Number(-.000123456).toExponential(18)","\"-1.234560000000000052e-4\"");
    209 shouldBe("Number(-.000123456).toExponential(19)","\"-1.2345600000000000519e-4\"");
    210 shouldBe("Number(-.000123456).toExponential(20)","\"-1.23456000000000005188e-4\"");
    211 shouldBeTrue("try { Number(-.000123456).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
    212 shouldBe("Number(123.4567890123456789012).toExponential()","\"1.2345678901234568e+2\"");
    213 shouldBeTrue("try { Number(123.4567890123456789012).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
    214 shouldBe("Number(123.4567890123456789012).toExponential(0)","\"1e+2\"");
    215 shouldBe("Number(123.4567890123456789012).toExponential(1)","\"1.2e+2\"");
    216 shouldBe("Number(123.4567890123456789012).toExponential(2)","\"1.23e+2\"");
    217 shouldBe("Number(123.4567890123456789012).toExponential(3)","\"1.235e+2\"");
    218 shouldBe("Number(123.4567890123456789012).toExponential(4)","\"1.2346e+2\"");
    219 shouldBe("Number(123.4567890123456789012).toExponential(5)","\"1.23457e+2\"");
    220 shouldBe("Number(123.4567890123456789012).toExponential(6)","\"1.234568e+2\"");
    221 shouldBe("Number(123.4567890123456789012).toExponential(7)","\"1.2345679e+2\"");
    222 shouldBe("Number(123.4567890123456789012).toExponential(8)","\"1.23456789e+2\"");
    223 shouldBe("Number(123.4567890123456789012).toExponential(9)","\"1.234567890e+2\"");
    224 shouldBe("Number(123.4567890123456789012).toExponential(10)","\"1.2345678901e+2\"");
    225 shouldBe("Number(123.4567890123456789012).toExponential(11)","\"1.23456789012e+2\"");
    226 shouldBe("Number(123.4567890123456789012).toExponential(12)","\"1.234567890123e+2\"");
    227 shouldBe("Number(123.4567890123456789012).toExponential(13)","\"1.2345678901235e+2\"");
    228 shouldBe("Number(123.4567890123456789012).toExponential(14)","\"1.23456789012346e+2\"");
    229 shouldBe("Number(123.4567890123456789012).toExponential(15)","\"1.234567890123457e+2\"");
    230 shouldBe("Number(123.4567890123456789012).toExponential(16)","\"1.2345678901234568e+2\"");
    231 shouldBe("Number(123.4567890123456789012).toExponential(17)","\"1.23456789012345681e+2\"");
    232 shouldBe("Number(123.4567890123456789012).toExponential(18)","\"1.234567890123456806e+2\"");
    233 shouldBe("Number(123.4567890123456789012).toExponential(19)","\"1.2345678901234568059e+2\"");
    234 shouldBe("Number(123.4567890123456789012).toExponential(20)","\"1.23456789012345680590e+2\"");
    235 shouldBeTrue("try { Number(123.4567890123456789012).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
    236 shouldBe("Number(-123.4567890123456789012).toExponential()","\"-1.2345678901234568e+2\"");
    237 shouldBeTrue("try { Number(-123.4567890123456789012).toExponential(-1) } catch (e) { String(e).indexOf('Range') >= 0; }");
    238 shouldBe("Number(-123.4567890123456789012).toExponential(0)","\"-1e+2\"");
    239 shouldBe("Number(-123.4567890123456789012).toExponential(1)","\"-1.2e+2\"");
    240 shouldBe("Number(-123.4567890123456789012).toExponential(2)","\"-1.23e+2\"");
    241 shouldBe("Number(-123.4567890123456789012).toExponential(3)","\"-1.235e+2\"");
    242 shouldBe("Number(-123.4567890123456789012).toExponential(4)","\"-1.2346e+2\"");
    243 shouldBe("Number(-123.4567890123456789012).toExponential(5)","\"-1.23457e+2\"");
    244 shouldBe("Number(-123.4567890123456789012).toExponential(6)","\"-1.234568e+2\"");
    245 shouldBe("Number(-123.4567890123456789012).toExponential(7)","\"-1.2345679e+2\"");
    246 shouldBe("Number(-123.4567890123456789012).toExponential(8)","\"-1.23456789e+2\"");
    247 shouldBe("Number(-123.4567890123456789012).toExponential(9)","\"-1.234567890e+2\"");
    248 shouldBe("Number(-123.4567890123456789012).toExponential(10)","\"-1.2345678901e+2\"");
    249 shouldBe("Number(-123.4567890123456789012).toExponential(11)","\"-1.23456789012e+2\"");
    250 shouldBe("Number(-123.4567890123456789012).toExponential(12)","\"-1.234567890123e+2\"");
    251 shouldBe("Number(-123.4567890123456789012).toExponential(13)","\"-1.2345678901235e+2\"");
    252 shouldBe("Number(-123.4567890123456789012).toExponential(14)","\"-1.23456789012346e+2\"");
    253 shouldBe("Number(-123.4567890123456789012).toExponential(15)","\"-1.234567890123457e+2\"");
    254 shouldBe("Number(-123.4567890123456789012).toExponential(16)","\"-1.2345678901234568e+2\"");
    255 shouldBe("Number(-123.4567890123456789012).toExponential(17)","\"-1.23456789012345681e+2\"");
    256 shouldBe("Number(-123.4567890123456789012).toExponential(18)","\"-1.234567890123456806e+2\"");
    257 shouldBe("Number(-123.4567890123456789012).toExponential(19)","\"-1.2345678901234568059e+2\"");
    258 shouldBe("Number(-123.4567890123456789012).toExponential(20)","\"-1.23456789012345680590e+2\"");
    259 shouldBeTrue("try { Number(-123.4567890123456789012).toExponential(21) } catch (e) { String(e).indexOf('Range') >= 0; }");
    260 shouldBe("Number(.0000000000000000000001).toExponential()","\"1e-22\"");
    261 shouldBe("Number(.0000000000000000000012).toExponential()","\"1.2e-21\"");
    262 shouldBe("Number(.0000000000000000000123).toExponential()","\"1.23e-20\"");
    263 shouldBe("Number(.0000000000000000000123).toExponential()","\"1.23e-20\"");
    264 shouldBe("Number(.0000000000000000001234).toExponential()","\"1.234e-19\"");
    265 shouldBe("Number(.0000000000000000012345).toExponential()","\"1.2345e-18\"");
    266 shouldBe("Number(.0000000000000000123456).toExponential()","\"1.23456e-17\"");
    267 shouldBe("Number(.0000000000000001234567).toExponential()","\"1.234567e-16\"");
    268 shouldBe("Number(.0000000000000012345678).toExponential()","\"1.2345678e-15\"");
    269 shouldBe("Number(.0000000000000123456789).toExponential()","\"1.23456789e-14\"");
    270 shouldBe("Number(.0000000000001234567890).toExponential()","\"1.23456789e-13\"");
    271 shouldBe("Number(.0000000000012345678901).toExponential()","\"1.2345678901e-12\"");
    272 shouldBe("Number(.0000000000123456789012).toExponential()","\"1.23456789012e-11\"");
    273 shouldBe("Number(.0000000001234567890123).toExponential()","\"1.234567890123e-10\"");
    274 shouldBe("Number(.0000000012345678901234).toExponential()","\"1.2345678901234e-9\"");
    275 shouldBe("Number(.0000000123456789012345).toExponential()","\"1.23456789012345e-8\"");
    276 shouldBe("Number(.0000001234567890123456).toExponential()","\"1.234567890123456e-7\"");
    277 shouldBe("Number(.0000012345678901234567).toExponential()","\"1.2345678901234567e-6\"");
    278 shouldBe("Number(.0000123456789012345678).toExponential()","\"1.2345678901234568e-5\"");
    279 shouldBe("Number(.0001234567890123456789).toExponential()","\"1.2345678901234567e-4\"");
    280 shouldBe("Number(.0012345678901234567890).toExponential()","\"1.2345678901234567e-3\"");
    281 shouldBe("Number(.0123456789012345678901).toExponential()","\"1.2345678901234568e-2\"");
    282 shouldBe("Number(1.234567890123456789012).toExponential()","\"1.2345678901234567e+0\"");
    283 shouldBe("Number(12.34567890123456789012).toExponential()","\"1.2345678901234567e+1\"");
    284 shouldBe("Number(123.4567890123456789012).toExponential()","\"1.2345678901234568e+2\"");
    285 shouldBe("Number(1234.567890123456789012).toExponential()","\"1.234567890123457e+3\"");
    286 shouldBe("Number(12345.67890123456789012).toExponential()","\"1.2345678901234567e+4\"");
    287 shouldBe("Number(123456.7890123456789012).toExponential()","\"1.2345678901234567e+5\"");
    288 shouldBe("Number(1234567.890123456789012).toExponential()","\"1.2345678901234567e+6\"");
    289 shouldBe("Number(12345678.90123456789012).toExponential()","\"1.2345678901234567e+7\"");
    290 shouldBe("Number(123456789.0123456789012).toExponential()","\"1.2345678901234567e+8\"");
    291 shouldBe("Number(1234567890.123456789012).toExponential()","\"1.2345678901234567e+9\"");
    292 shouldBe("Number(12345678901.23456789012).toExponential()","\"1.2345678901234568e+10\"");
    293 shouldBe("Number(123456789012.3456789012).toExponential()","\"1.2345678901234567e+11\"");
    294 shouldBe("Number(1234567890123.456789012).toExponential()","\"1.2345678901234568e+12\"");
    295 shouldBe("Number(12345678901234.56789012).toExponential()","\"1.2345678901234568e+13\"");
    296 shouldBe("Number(123456789012345.6789012).toExponential()","\"1.2345678901234567e+14\"");
    297 shouldBe("Number(1234567890123456.789012).toExponential()","\"1.2345678901234568e+15\"");
    298 shouldBe("Number(12345678901234567.89012).toExponential()","\"1.2345678901234568e+16\"");
    299 shouldBe("Number(123456789012345678.9012).toExponential()","\"1.2345678901234568e+17\"");
    300 shouldBe("Number(1234567890123456789.012).toExponential()","\"1.2345678901234568e+18\"");
    301 shouldBe("Number(12345678901234567890.12).toExponential()","\"1.2345678901234567e+19\"");
    302 shouldBe("Number(123456789012345678901.2).toExponential()","\"1.2345678901234568e+20\"");
    303 shouldBe("Number(-.0000000000000000000001).toExponential()","\"-1e-22\"");
    304 shouldBe("Number(-.0000000000000000000012).toExponential()","\"-1.2e-21\"");
    305 shouldBe("Number(-.0000000000000000000123).toExponential()","\"-1.23e-20\"");
    306 shouldBe("Number(-.0000000000000000000123).toExponential()","\"-1.23e-20\"");
    307 shouldBe("Number(-.0000000000000000001234).toExponential()","\"-1.234e-19\"");
    308 shouldBe("Number(-.0000000000000000012345).toExponential()","\"-1.2345e-18\"");
    309 shouldBe("Number(-.0000000000000000123456).toExponential()","\"-1.23456e-17\"");
    310 shouldBe("Number(-.0000000000000001234567).toExponential()","\"-1.234567e-16\"");
    311 shouldBe("Number(-.0000000000000012345678).toExponential()","\"-1.2345678e-15\"");
    312 shouldBe("Number(-.0000000000000123456789).toExponential()","\"-1.23456789e-14\"");
    313 shouldBe("Number(-.0000000000001234567890).toExponential()","\"-1.23456789e-13\"");
    314 shouldBe("Number(-.0000000000012345678901).toExponential()","\"-1.2345678901e-12\"");
    315 shouldBe("Number(-.0000000000123456789012).toExponential()","\"-1.23456789012e-11\"");
    316 shouldBe("Number(-.0000000001234567890123).toExponential()","\"-1.234567890123e-10\"");
    317 shouldBe("Number(-.0000000012345678901234).toExponential()","\"-1.2345678901234e-9\"");
    318 shouldBe("Number(-.0000000123456789012345).toExponential()","\"-1.23456789012345e-8\"");
    319 shouldBe("Number(-.0000001234567890123456).toExponential()","\"-1.234567890123456e-7\"");
    320 shouldBe("Number(-.0000012345678901234567).toExponential()","\"-1.2345678901234567e-6\"");
    321 shouldBe("Number(-.0000123456789012345678).toExponential()","\"-1.2345678901234568e-5\"");
    322 shouldBe("Number(-.0001234567890123456789).toExponential()","\"-1.2345678901234567e-4\"");
    323 shouldBe("Number(-.0012345678901234567890).toExponential()","\"-1.2345678901234567e-3\"");
    324 shouldBe("Number(-.0123456789012345678901).toExponential()","\"-1.2345678901234568e-2\"");
    325 shouldBe("Number(-1.234567890123456789012).toExponential()","\"-1.2345678901234567e+0\"");
    326 shouldBe("Number(-12.34567890123456789012).toExponential()","\"-1.2345678901234567e+1\"");
    327 shouldBe("Number(-123.4567890123456789012).toExponential()","\"-1.2345678901234568e+2\"");
    328 shouldBe("Number(-1234.567890123456789012).toExponential()","\"-1.234567890123457e+3\"");
    329 shouldBe("Number(-12345.67890123456789012).toExponential()","\"-1.2345678901234567e+4\"");
    330 shouldBe("Number(-123456.7890123456789012).toExponential()","\"-1.2345678901234567e+5\"");
    331 shouldBe("Number(-1234567.890123456789012).toExponential()","\"-1.2345678901234567e+6\"");
    332 shouldBe("Number(-12345678.90123456789012).toExponential()","\"-1.2345678901234567e+7\"");
    333 shouldBe("Number(-123456789.0123456789012).toExponential()","\"-1.2345678901234567e+8\"");
    334 shouldBe("Number(-1234567890.123456789012).toExponential()","\"-1.2345678901234567e+9\"");
    335 shouldBe("Number(-12345678901.23456789012).toExponential()","\"-1.2345678901234568e+10\"");
    336 shouldBe("Number(-123456789012.3456789012).toExponential()","\"-1.2345678901234567e+11\"");
    337 shouldBe("Number(-1234567890123.456789012).toExponential()","\"-1.2345678901234568e+12\"");
    338 shouldBe("Number(-12345678901234.56789012).toExponential()","\"-1.2345678901234568e+13\"");
    339 shouldBe("Number(-123456789012345.6789012).toExponential()","\"-1.2345678901234567e+14\"");
    340 shouldBe("Number(-1234567890123456.789012).toExponential()","\"-1.2345678901234568e+15\"");
    341 shouldBe("Number(-12345678901234567.89012).toExponential()","\"-1.2345678901234568e+16\"");
    342 shouldBe("Number(-123456789012345678.9012).toExponential()","\"-1.2345678901234568e+17\"");
    343 shouldBe("Number(-1234567890123456789.012).toExponential()","\"-1.2345678901234568e+18\"");
    344 shouldBe("Number(-12345678901234567890.12).toExponential()","\"-1.2345678901234567e+19\"");
    345 shouldBe("Number(-123456789012345678901.2).toExponential()","\"-1.2345678901234568e+20\"");
    346 
    347 shouldBeTrue("try { Number(1).toPrecision(-1); } catch (e) { String(e).indexOf('Range') >= 0; }");
    348 shouldBeTrue("try { Number(1).toPrecision(0); } catch (e) { String(e).indexOf('Range') >= 0; }");
    349 shouldBe("try { Number(1).toPrecision(1); } catch (e) { String(e); }","\"1\"");
    350 shouldBe("try { Number(1).toPrecision(21); } catch (e) { String(e); }","\"1.00000000000000000000\"");
    351 shouldBeTrue("try { Number(1).toPrecision(22); } catch (e) { String(e).indexOf('Range') >= 0; }");
    352 shouldBe("Number(NaN).toPrecision()","\"NaN\"");
    353 shouldBe("Number(NaN).toPrecision(1)","\"NaN\"");
    354 shouldBe("Number(Infinity).toPrecision()","\"Infinity\"");
    355 shouldBe("Number(Infinity).toPrecision(1)","\"Infinity\"");
    356 shouldBe("Number(-Infinity).toPrecision()","\"-Infinity\"");
    357 shouldBe("Number(-Infinity).toPrecision(1)","\"-Infinity\"");
    358 shouldBe("Number(.0000000012345).toPrecision(2)","\"1.2e-9\"");
    359 shouldBe("Number(.000000012345).toPrecision(2)","\"1.2e-8\"");
    360 shouldBe("Number(.00000012345).toPrecision(2)","\"1.2e-7\"");
    361 shouldBe("Number(.0000012345).toPrecision(2)","\"0.0000012\"");
    362 shouldBe("Number(.000012345).toPrecision(2)","\"0.000012\"");
    363 shouldBe("Number(.00012345).toPrecision(2)","\"0.00012\"");
    364 shouldBe("Number(.0012345).toPrecision(2)","\"0.0012\"");
    365 shouldBe("Number(.012345).toPrecision(2)","\"0.012\"");
    366 shouldBe("Number(.12345).toPrecision(2)","\"0.12\"");
    367 shouldBe("Number(1.2345).toPrecision(2)","\"1.2\"");
    368 shouldBe("Number(12.345).toPrecision(2)","\"12\"");
    369 shouldBe("Number(123.45).toPrecision(2)","\"1.2e+2\"");
    370 shouldBe("Number(1234.5).toPrecision(2)","\"1.2e+3\"");
    371 shouldBe("Number(12345).toPrecision(2)","\"1.2e+4\"");
    372 shouldBe("Number(12345.67).toPrecision(4)","\"1.235e+4\"");
    373 shouldBe("Number(12344.67).toPrecision(4)","\"1.234e+4\"");
    374 shouldBe("Number(0.0001234567890123456789012345).toPrecision()","\"0.00012345678901234567\"");
    375 shouldBe("Number(0.0001234567890123456789012345).toPrecision(1)","\"0.0001\"");
    376 shouldBe("Number(0.0001234567890123456789012345).toPrecision(2)","\"0.00012\"");
    377 shouldBe("Number(0.0001234567890123456789012345).toPrecision(3)","\"0.000123\"");
    378 shouldBe("Number(0.0001234567890123456789012345).toPrecision(4)","\"0.0001235\"");
    379 shouldBe("Number(0.0001234567890123456789012345).toPrecision(5)","\"0.00012346\"");
    380 shouldBe("Number(0.0001234567890123456789012345).toPrecision(6)","\"0.000123457\"");
    381 shouldBe("Number(0.0001234567890123456789012345).toPrecision(7)","\"0.0001234568\"");
    382 shouldBe("Number(0.0001234567890123456789012345).toPrecision(8)","\"0.00012345679\"");
    383 shouldBe("Number(0.0001234567890123456789012345).toPrecision(9)","\"0.000123456789\"");
    384 shouldBe("Number(0.0001234567890123456789012345).toPrecision(10)","\"0.0001234567890\"");
    385 shouldBe("Number(0.0001234567890123456789012345).toPrecision(11)","\"0.00012345678901\"");
    386 shouldBe("Number(0.0001234567890123456789012345).toPrecision(12)","\"0.000123456789012\"");
    387 shouldBe("Number(0.0001234567890123456789012345).toPrecision(13)","\"0.0001234567890123\"");
    388 shouldBe("Number(0.0001234567890123456789012345).toPrecision(14)","\"0.00012345678901235\"");
    389 shouldBe("Number(0.0001234567890123456789012345).toPrecision(15)","\"0.000123456789012346\"");
    390 shouldBe("Number(0.0001234567890123456789012345).toPrecision(16)","\"0.0001234567890123457\"");
    391 shouldBe("Number(0.0001234567890123456789012345).toPrecision(17)","\"0.00012345678901234567\"");
    392 shouldBe("Number(0.0001234567890123456789012345).toPrecision(18)","\"0.000123456789012345671\"");
    393 shouldBe("Number(0.0001234567890123456789012345).toPrecision(19)","\"0.0001234567890123456713\"");
    394 shouldBe("Number(0.0001234567890123456789012345).toPrecision(20)","\"0.00012345678901234567130\"");
    395 shouldBe("Number(0.0001234567890123456789012345).toPrecision(21)","\"0.000123456789012345671298\"");
    396 shouldBe("Number(12345.67890123456789012345).toPrecision()","\"12345.678901234567\"");
    397 shouldBe("Number(12345.67890123456789012345).toPrecision(1)","\"1e+4\"");
    398 shouldBe("Number(12345.67890123456789012345).toPrecision(2)","\"1.2e+4\"");
    399 shouldBe("Number(12345.67890123456789012345).toPrecision(3)","\"1.23e+4\"");
    400 shouldBe("Number(12345.67890123456789012345).toPrecision(4)","\"1.235e+4\"");
    401 shouldBe("Number(12345.67890123456789012345).toPrecision(5)","\"12346\"");
    402 shouldBe("Number(12345.67890123456789012345).toPrecision(6)","\"12345.7\"");
    403 shouldBe("Number(12345.67890123456789012345).toPrecision(7)","\"12345.68\"");
    404 shouldBe("Number(12345.67890123456789012345).toPrecision(8)","\"12345.679\"");
    405 shouldBe("Number(12345.67890123456789012345).toPrecision(9)","\"12345.6789\"");
    406 shouldBe("Number(12345.67890123456789012345).toPrecision(10)","\"12345.67890\"");
    407 shouldBe("Number(12345.67890123456789012345).toPrecision(11)","\"12345.678901\"");
    408 shouldBe("Number(12345.67890123456789012345).toPrecision(12)","\"12345.6789012\"");
    409 shouldBe("Number(12345.67890123456789012345).toPrecision(13)","\"12345.67890123\"");
    410 shouldBe("Number(12345.67890123456789012345).toPrecision(14)","\"12345.678901235\"");
    411 shouldBe("Number(12345.67890123456789012345).toPrecision(15)","\"12345.6789012346\"");
    412 shouldBe("Number(12345.67890123456789012345).toPrecision(16)","\"12345.67890123457\"");
    413 shouldBe("Number(12345.67890123456789012345).toPrecision(17)","\"12345.678901234567\"");
    414 shouldBe("Number(12345.67890123456789012345).toPrecision(18)","\"12345.6789012345671\"");
    415 shouldBe("Number(12345.67890123456789012345).toPrecision(19)","\"12345.67890123456709\"");
    416 shouldBe("Number(12345.67890123456789012345).toPrecision(20)","\"12345.678901234567093\"");
    417 shouldBe("Number(12345.67890123456789012345).toPrecision(21)","\"12345.6789012345670926\"");
    418 shouldBe("Number(-.0000000012345).toPrecision(2)","\"-1.2e-9\"");
    419 shouldBe("Number(-.000000012345).toPrecision(2)","\"-1.2e-8\"");
    420 shouldBe("Number(-.00000012345).toPrecision(2)","\"-1.2e-7\"");
    421 shouldBe("Number(-.0000012345).toPrecision(2)","\"-0.0000012\"");
    422 shouldBe("Number(-.000012345).toPrecision(2)","\"-0.000012\"");
    423 shouldBe("Number(-.00012345).toPrecision(2)","\"-0.00012\"");
    424 shouldBe("Number(-.0012345).toPrecision(2)","\"-0.0012\"");
    425 shouldBe("Number(-.012345).toPrecision(2)","\"-0.012\"");
    426 shouldBe("Number(-.12345).toPrecision(2)","\"-0.12\"");
    427 shouldBe("Number(-1.2345).toPrecision(2)","\"-1.2\"");
    428 shouldBe("Number(-12.345).toPrecision(2)","\"-12\"");
    429 shouldBe("Number(-123.45).toPrecision(2)","\"-1.2e+2\"");
    430 shouldBe("Number(-1234.5).toPrecision(2)","\"-1.2e+3\"");
    431 shouldBe("Number(-12345).toPrecision(2)","\"-1.2e+4\"");
    432 shouldBe("Number(-12345.67).toPrecision(4)","\"-1.235e+4\"");
    433 shouldBe("Number(-12344.67).toPrecision(4)","\"-1.234e+4\"");
    434 shouldBe("Number(-0.0001234567890123456789012345).toPrecision()","\"-0.00012345678901234567\"");
    435 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(1)","\"-0.0001\"");
    436 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(2)","\"-0.00012\"");
    437 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(3)","\"-0.000123\"");
    438 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(4)","\"-0.0001235\"");
    439 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(5)","\"-0.00012346\"");
    440 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(6)","\"-0.000123457\"");
    441 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(7)","\"-0.0001234568\"");
    442 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(8)","\"-0.00012345679\"");
    443 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(9)","\"-0.000123456789\"");
    444 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(10)","\"-0.0001234567890\"");
    445 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(11)","\"-0.00012345678901\"");
    446 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(12)","\"-0.000123456789012\"");
    447 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(13)","\"-0.0001234567890123\"");
    448 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(14)","\"-0.00012345678901235\"");
    449 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(15)","\"-0.000123456789012346\"");
    450 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(16)","\"-0.0001234567890123457\"");
    451 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(17)","\"-0.00012345678901234567\"");
    452 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(18)","\"-0.000123456789012345671\"");
    453 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(19)","\"-0.0001234567890123456713\"");
    454 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(20)","\"-0.00012345678901234567130\"");
    455 shouldBe("Number(-0.0001234567890123456789012345).toPrecision(21)","\"-0.000123456789012345671298\"");
    456 shouldBe("Number(-12345.67890123456789012345).toPrecision()","\"-12345.678901234567\"");
    457 shouldBe("Number(-12345.67890123456789012345).toPrecision(1)","\"-1e+4\"");
    458 shouldBe("Number(-12345.67890123456789012345).toPrecision(2)","\"-1.2e+4\"");
    459 shouldBe("Number(-12345.67890123456789012345).toPrecision(3)","\"-1.23e+4\"");
    460 shouldBe("Number(-12345.67890123456789012345).toPrecision(4)","\"-1.235e+4\"");
    461 shouldBe("Number(-12345.67890123456789012345).toPrecision(5)","\"-12346\"");
    462 shouldBe("Number(-12345.67890123456789012345).toPrecision(6)","\"-12345.7\"");
    463 shouldBe("Number(-12345.67890123456789012345).toPrecision(7)","\"-12345.68\"");
    464 shouldBe("Number(-12345.67890123456789012345).toPrecision(8)","\"-12345.679\"");
    465 shouldBe("Number(-12345.67890123456789012345).toPrecision(9)","\"-12345.6789\"");
    466 shouldBe("Number(-12345.67890123456789012345).toPrecision(10)","\"-12345.67890\"");
    467 shouldBe("Number(-12345.67890123456789012345).toPrecision(11)","\"-12345.678901\"");
    468 shouldBe("Number(-12345.67890123456789012345).toPrecision(12)","\"-12345.6789012\"");
    469 shouldBe("Number(-12345.67890123456789012345).toPrecision(13)","\"-12345.67890123\"");
    470 shouldBe("Number(-12345.67890123456789012345).toPrecision(14)","\"-12345.678901235\"");
    471 shouldBe("Number(-12345.67890123456789012345).toPrecision(15)","\"-12345.6789012346\"");
    472 shouldBe("Number(-12345.67890123456789012345).toPrecision(16)","\"-12345.67890123457\"");
    473 shouldBe("Number(-12345.67890123456789012345).toPrecision(17)","\"-12345.678901234567\"");
    474 shouldBe("Number(-12345.67890123456789012345).toPrecision(18)","\"-12345.6789012345671\"");
    475 shouldBe("Number(-12345.67890123456789012345).toPrecision(19)","\"-12345.67890123456709\"");
    476 shouldBe("Number(-12345.67890123456789012345).toPrecision(20)","\"-12345.678901234567093\"");
    477 shouldBe("Number(-12345.67890123456789012345).toPrecision(21)","\"-12345.6789012345670926\"");
    478 shouldBe("Number(0).toPrecision()","\"0\"");
    479 shouldBe("Number(0).toPrecision(1)","\"0\"");
    480 shouldBe("Number(0).toPrecision(2)","\"0.0\"");
    481 shouldBe("Number(0).toPrecision(3)","\"0.00\"");
    482 shouldBe("Number(0).toPrecision(4)","\"0.000\"");
    483 shouldBe("Number(0).toPrecision(5)","\"0.0000\"");
    484 shouldBe("Number(0).toPrecision(6)","\"0.00000\"");
    485 shouldBe("Number(0).toPrecision(7)","\"0.000000\"");
    486 shouldBe("Number(0).toPrecision(8)","\"0.0000000\"");
    487 shouldBe("Number(0).toPrecision(9)","\"0.00000000\"");
    488 shouldBe("Number(0).toPrecision(10)","\"0.000000000\"");
    489 shouldBe("Number(0).toPrecision(11)","\"0.0000000000\"");
    490 shouldBe("Number(0).toPrecision(12)","\"0.00000000000\"");
    491 shouldBe("Number(0).toPrecision(13)","\"0.000000000000\"");
    492 shouldBe("Number(0).toPrecision(14)","\"0.0000000000000\"");
    493 shouldBe("Number(0).toPrecision(15)","\"0.00000000000000\"");
    494 shouldBe("Number(0).toPrecision(16)","\"0.000000000000000\"");
    495 shouldBe("Number(0).toPrecision(17)","\"0.0000000000000000\"");
    496 shouldBe("Number(0).toPrecision(18)","\"0.00000000000000000\"");
    497 shouldBe("Number(0).toPrecision(19)","\"0.000000000000000000\"");
    498 shouldBe("Number(0).toPrecision(20)","\"0.0000000000000000000\"");
    499 shouldBe("Number(0).toPrecision(21)","\"0.00000000000000000000\"");