18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* The contents of this file are subject to the Netscape Public 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License Version 1.1 (the "License"); you may not use this file 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * except in compliance with the License. You may obtain a copy of 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the License at http://www.mozilla.org/NPL/ 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Software distributed under the License is distributed on an "AS 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * implied. See the License for the specific language governing 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * rights and limitations under the License. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Original Code is Mozilla Communicator client code, released March 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 31, 1998. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The Initial Developer of the Original Code is Netscape Communications 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1998 Netscape Communications Corporation. All 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Contributor(s): 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/** 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project File Name: 9.8.1.js 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ECMA Section: 9.8.1 ToString Applied to the Number Type 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Description: The operator ToString convers a number m to string 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project as follows: 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1. if m is NaN, return the string "NaN" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2. if m is +0 or -0, return the string "0" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3. if m is less than zero, return the string 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project concatenation of the string "-" and ToString(-m). 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4. If m is Infinity, return the string "Infinity". 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5. Otherwise, let n, k, and s be integers such that 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project k >= 1, 10k1 <= s < 10k, the number value for s10nk 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project is m, and k is as small as possible. Note that k is 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project the number of digits in the decimal representation 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of s, that s is not divisible by 10, and that the 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project least significant digit of s is not necessarily 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uniquely determined by these criteria. 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6. If k <= n <= 21, return the string consisting of the 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project k digits of the decimal representation of s (in order, 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project with no leading zeroes), followed by n-k occurences 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of the character '0'. 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7. If 0 < n <= 21, return the string consisting of the 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project most significant n digits of the decimal 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project representation of s, followed by a decimal point 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project '.', followed by the remaining kn digits of the 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project decimal representation of s. 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8. If 6 < n <= 0, return the string consisting of the 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project character '0', followed by a decimal point '.', 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project followed by n occurences of the character '0', 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project followed by the k digits of the decimal 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project representation of s. 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9. Otherwise, if k = 1, return the string consisting 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of the single digit of s, followed by lowercase 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project character 'e', followed by a plus sign '+' or minus 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project sign '' according to whether n1 is positive or 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project negative, followed by the decimal representation 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project of the integer abs(n1) (with no leading zeros). 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10. Return the string consisting of the most significant 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project digit of the decimal representation of s, followed 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project by a decimal point '.', followed by the remaining k1 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project digits of the decimal representation of s, followed 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project by the lowercase character 'e', followed by a plus 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project sign '+' or minus sign '' according to whether n1 is 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project positive or negative, followed by the decimal 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project representation of the integer abs(n1) (with no 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project leading zeros). 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Note that if x is any number value other than 0, then 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ToNumber(ToString(x)) is exactly the same number value as x. 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project As noted, the least significant digit of s is not always 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project uniquely determined by the requirements listed in step 5. 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project The following specification for step 5 was considered, but 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project not adopted: 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Author: christine@netscape.com 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Date: 10 july 1997 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var SECTION = "9.8.1"; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var VERSION = "ECMA_1"; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project startTest(); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var testcases = getTestCases(); 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project writeHeaderToLog( SECTION + " ToString applied to the Number type"); 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project test(); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() { 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for ( tc=0; tc < testcases.length; tc++ ) { 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].passed = writeTestCaseResult( 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].expect, 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual, 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].description +" = "+ 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].actual ); 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project testcases[tc].reason += ( testcases[tc].passed ) ? "" : "wrong value "; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project stopTest(); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ( testcases ); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getTestCases() { 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var array = new Array(); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project var item = 0; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "Number.NaN", "NaN", Number.NaN + "" ); 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "0", "0", 0 + "" ); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-0", "0", -0 + "" ); 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "Number.POSITIVE_INFINITY", "Infinity", Number.POSITIVE_INFINITY + "" ); 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "Number.NEGATIVE_INFINITY", "-Infinity", Number.NEGATIVE_INFINITY + "" ); 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1", "-1", -1 + "" ); 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // cases in step 6: integers 1e21 > x >= 1 or -1 >= x > -1e21 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1", "1", 1 + "" ); 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "10", "10", 10 + "" ); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "100", "100", 100 + "" ); 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1000", "1000", 1000 + "" ); 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "10000", "10000", 10000 + "" ); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "10000000000", "10000000000", 10000000000 + "" ); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "10000000000000000000", "10000000000000000000", 10000000000000000000 + "" ); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "100000000000000000000","100000000000000000000",100000000000000000000 + "" ); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "12345", "12345", 12345 + "" ); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1234567890", "1234567890", 1234567890 + "" ); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1", "-1", -1 + "" ); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-10", "-10", -10 + "" ); 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-100", "-100", -100 + "" ); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1000", "-1000", -1000 + "" ); 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1000000000", "-1000000000", -1000000000 + "" ); 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1000000000000000", "-1000000000000000", -1000000000000000 + "" ); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-100000000000000000000", "-100000000000000000000", -100000000000000000000 + "" ); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1000000000000000000000", "-1e+21", -1000000000000000000000 + "" ); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-12345", "-12345", -12345 + "" ); 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1234567890", "-1234567890", -1234567890 + "" ); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // cases in step 7: numbers with a fractional component, 1e21> x >1 or -1 > x > -1e21, 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1.0000001", "1.0000001", 1.0000001 + "" ); 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // cases in step 8: fractions between 1 > x > -1, exclusive of 0 and -0 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // cases in step 9: numbers with 1 significant digit >= 1e+21 or <= 1e-6 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1000000000000000000000", "1e+21", 1000000000000000000000 + "" ); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "10000000000000000000000", "1e+22", 10000000000000000000000 + "" ); 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // cases in step 10: numbers with more than 1 significant digit >= 1e+21 or <= 1e-6 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1.2345", "1.2345", String( 1.2345)); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "1.234567890", "1.23456789", String( 1.234567890 )); 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".12345", "0.12345", String(.12345 ) ); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".012345", "0.012345", String(.012345) ); 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".0012345", "0.0012345", String(.0012345) ); 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".00012345", "0.00012345", String(.00012345) ); 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".000012345", "0.000012345", String(.000012345) ); 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".0000012345", "0.0000012345", String(.0000012345) ); 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, ".00000012345", "1.2345e-7", String(.00000012345)); 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project array[item++] = new TestCase( SECTION, "-1e21", "-1e+21", String(-1e21) ); 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return ( array ); 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 167