|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 |
|
7 /** |
|
8 File Name: 15.1.2.3-2.js |
|
9 ECMA Section: 15.1.2.3 Function properties of the global object: |
|
10 parseFloat( string ) |
|
11 |
|
12 Description: The parseFloat function produces a number value dictated |
|
13 by the interpretation of the contents of the string |
|
14 argument defined as a decimal literal. |
|
15 |
|
16 When the parseFloat function is called, the following |
|
17 steps are taken: |
|
18 |
|
19 1. Call ToString( string ). |
|
20 2. Remove leading whitespace Result(1). |
|
21 3. If neither Result(2) nor any prefix of Result(2) |
|
22 satisfies the syntax of a StrDecimalLiteral, |
|
23 return NaN. |
|
24 4. Compute the longest prefix of Result(2) which might |
|
25 be Resusult(2) itself, that satisfies the syntax of |
|
26 a StrDecimalLiteral |
|
27 5. Return the number value for the MV of Result(4). |
|
28 |
|
29 Note that parseFloate may interpret only a leading |
|
30 portion of the string as a number value; it ignores any |
|
31 characters that cannot be interpreted as part of the |
|
32 notation of a decimal literal, and no indication is given |
|
33 that such characters were ignored. |
|
34 |
|
35 StrDecimalLiteral:: |
|
36 Infinity |
|
37 DecimalDigits.DecimalDigits opt ExponentPart opt |
|
38 .DecimalDigits ExponentPart opt |
|
39 DecimalDigits ExponentPart opt |
|
40 |
|
41 Author: christine@netscape.com |
|
42 Date: 28 october 1997 |
|
43 |
|
44 */ |
|
45 var SECTION = "15.1.2.3-2"; |
|
46 var VERSION = "ECMA_1"; |
|
47 startTest(); |
|
48 |
|
49 var BUGNUMBER="none"; |
|
50 |
|
51 new TestCase( SECTION, "parseFloat(true)", Number.NaN, parseFloat(true) ); |
|
52 new TestCase( SECTION, "parseFloat(false)", Number.NaN, parseFloat(false) ); |
|
53 new TestCase( SECTION, "parseFloat('string')", Number.NaN, parseFloat("string") ); |
|
54 |
|
55 new TestCase( SECTION, "parseFloat(' Infinity')", Number.POSITIVE_INFINITY, parseFloat("Infinity") ); |
|
56 // new TestCase( SECTION, "parseFloat(Infinity)", Number.POSITIVE_INFINITY, parseFloat(Infinity) ); |
|
57 |
|
58 new TestCase( SECTION, "parseFloat(' 0')", 0, parseFloat(" 0") ); |
|
59 new TestCase( SECTION, "parseFloat(' -0')", -0, parseFloat(" -0") ); |
|
60 new TestCase( SECTION, "parseFloat(' +0')", 0, parseFloat(" +0") ); |
|
61 |
|
62 new TestCase( SECTION, "parseFloat(' 1')", 1, parseFloat(" 1") ); |
|
63 new TestCase( SECTION, "parseFloat(' -1')", -1, parseFloat(" -1") ); |
|
64 new TestCase( SECTION, "parseFloat(' +1')", 1, parseFloat(" +1") ); |
|
65 |
|
66 new TestCase( SECTION, "parseFloat(' 2')", 2, parseFloat(" 2") ); |
|
67 new TestCase( SECTION, "parseFloat(' -2')", -2, parseFloat(" -2") ); |
|
68 new TestCase( SECTION, "parseFloat(' +2')", 2, parseFloat(" +2") ); |
|
69 |
|
70 new TestCase( SECTION, "parseFloat(' 3')", 3, parseFloat(" 3") ); |
|
71 new TestCase( SECTION, "parseFloat(' -3')", -3, parseFloat(" -3") ); |
|
72 new TestCase( SECTION, "parseFloat(' +3')", 3, parseFloat(" +3") ); |
|
73 |
|
74 new TestCase( SECTION, "parseFloat(' 4')", 4, parseFloat(" 4") ); |
|
75 new TestCase( SECTION, "parseFloat(' -4')", -4, parseFloat(" -4") ); |
|
76 new TestCase( SECTION, "parseFloat(' +4')", 4, parseFloat(" +4") ); |
|
77 |
|
78 new TestCase( SECTION, "parseFloat(' 5')", 5, parseFloat(" 5") ); |
|
79 new TestCase( SECTION, "parseFloat(' -5')", -5, parseFloat(" -5") ); |
|
80 new TestCase( SECTION, "parseFloat(' +5')", 5, parseFloat(" +5") ); |
|
81 |
|
82 new TestCase( SECTION, "parseFloat(' 6')", 6, parseFloat(" 6") ); |
|
83 new TestCase( SECTION, "parseFloat(' -6')", -6, parseFloat(" -6") ); |
|
84 new TestCase( SECTION, "parseFloat(' +6')", 6, parseFloat(" +6") ); |
|
85 |
|
86 new TestCase( SECTION, "parseFloat(' 7')", 7, parseFloat(" 7") ); |
|
87 new TestCase( SECTION, "parseFloat(' -7')", -7, parseFloat(" -7") ); |
|
88 new TestCase( SECTION, "parseFloat(' +7')", 7, parseFloat(" +7") ); |
|
89 |
|
90 new TestCase( SECTION, "parseFloat(' 8')", 8, parseFloat(" 8") ); |
|
91 new TestCase( SECTION, "parseFloat(' -8')", -8, parseFloat(" -8") ); |
|
92 new TestCase( SECTION, "parseFloat(' +8')", 8, parseFloat(" +8") ); |
|
93 |
|
94 new TestCase( SECTION, "parseFloat(' 9')", 9, parseFloat(" 9") ); |
|
95 new TestCase( SECTION, "parseFloat(' -9')", -9, parseFloat(" -9") ); |
|
96 new TestCase( SECTION, "parseFloat(' +9')", 9, parseFloat(" +9") ); |
|
97 |
|
98 new TestCase( SECTION, "parseFloat(' 3.14159')", 3.14159, parseFloat(" 3.14159") ); |
|
99 new TestCase( SECTION, "parseFloat(' -3.14159')", -3.14159, parseFloat(" -3.14159") ); |
|
100 new TestCase( SECTION, "parseFloat(' +3.14159')", 3.14159, parseFloat(" +3.14159") ); |
|
101 |
|
102 new TestCase( SECTION, "parseFloat(' 3.')", 3, parseFloat(" 3.") ); |
|
103 new TestCase( SECTION, "parseFloat(' -3.')", -3, parseFloat(" -3.") ); |
|
104 new TestCase( SECTION, "parseFloat(' +3.')", 3, parseFloat(" +3.") ); |
|
105 |
|
106 new TestCase( SECTION, "parseFloat(' 3.e1')", 30, parseFloat(" 3.e1") ); |
|
107 new TestCase( SECTION, "parseFloat(' -3.e1')", -30, parseFloat(" -3.e1") ); |
|
108 new TestCase( SECTION, "parseFloat(' +3.e1')", 30, parseFloat(" +3.e1") ); |
|
109 |
|
110 new TestCase( SECTION, "parseFloat(' 3.e+1')", 30, parseFloat(" 3.e+1") ); |
|
111 new TestCase( SECTION, "parseFloat(' -3.e+1')", -30, parseFloat(" -3.e+1") ); |
|
112 new TestCase( SECTION, "parseFloat(' +3.e+1')", 30, parseFloat(" +3.e+1") ); |
|
113 |
|
114 new TestCase( SECTION, "parseFloat(' 3.e-1')", .30, parseFloat(" 3.e-1") ); |
|
115 new TestCase( SECTION, "parseFloat(' -3.e-1')", -.30, parseFloat(" -3.e-1") ); |
|
116 new TestCase( SECTION, "parseFloat(' +3.e-1')", .30, parseFloat(" +3.e-1") ); |
|
117 |
|
118 // StrDecimalLiteral::: .DecimalDigits ExponentPart opt |
|
119 |
|
120 new TestCase( SECTION, "parseFloat(' .00001')", 0.00001, parseFloat(" .00001") ); |
|
121 new TestCase( SECTION, "parseFloat(' +.00001')", 0.00001, parseFloat(" +.00001") ); |
|
122 new TestCase( SECTION, "parseFloat(' -0.0001')", -0.00001, parseFloat(" -.00001") ); |
|
123 |
|
124 new TestCase( SECTION, "parseFloat(' .01e2')", 1, parseFloat(" .01e2") ); |
|
125 new TestCase( SECTION, "parseFloat(' +.01e2')", 1, parseFloat(" +.01e2") ); |
|
126 new TestCase( SECTION, "parseFloat(' -.01e2')", -1, parseFloat(" -.01e2") ); |
|
127 |
|
128 new TestCase( SECTION, "parseFloat(' .01e+2')", 1, parseFloat(" .01e+2") ); |
|
129 new TestCase( SECTION, "parseFloat(' +.01e+2')", 1, parseFloat(" +.01e+2") ); |
|
130 new TestCase( SECTION, "parseFloat(' -.01e+2')", -1, parseFloat(" -.01e+2") ); |
|
131 |
|
132 new TestCase( SECTION, "parseFloat(' .01e-2')", 0.0001, parseFloat(" .01e-2") ); |
|
133 new TestCase( SECTION, "parseFloat(' +.01e-2')", 0.0001, parseFloat(" +.01e-2") ); |
|
134 new TestCase( SECTION, "parseFloat(' -.01e-2')", -0.0001, parseFloat(" -.01e-2") ); |
|
135 |
|
136 // StrDecimalLiteral::: DecimalDigits ExponentPart opt |
|
137 |
|
138 new TestCase( SECTION, "parseFloat(' 1234e5')", 123400000, parseFloat(" 1234e5") ); |
|
139 new TestCase( SECTION, "parseFloat(' +1234e5')", 123400000, parseFloat(" +1234e5") ); |
|
140 new TestCase( SECTION, "parseFloat(' -1234e5')", -123400000, parseFloat(" -1234e5") ); |
|
141 |
|
142 new TestCase( SECTION, "parseFloat(' 1234e+5')", 123400000, parseFloat(" 1234e+5") ); |
|
143 new TestCase( SECTION, "parseFloat(' +1234e+5')", 123400000, parseFloat(" +1234e+5") ); |
|
144 new TestCase( SECTION, "parseFloat(' -1234e+5')", -123400000, parseFloat(" -1234e+5") ); |
|
145 |
|
146 new TestCase( SECTION, "parseFloat(' 1234e-5')", 0.01234, parseFloat(" 1234e-5") ); |
|
147 new TestCase( SECTION, "parseFloat(' +1234e-5')", 0.01234, parseFloat(" +1234e-5") ); |
|
148 new TestCase( SECTION, "parseFloat(' -1234e-5')", -0.01234, parseFloat(" -1234e-5") ); |
|
149 |
|
150 |
|
151 new TestCase( SECTION, "parseFloat(' .01E2')", 1, parseFloat(" .01E2") ); |
|
152 new TestCase( SECTION, "parseFloat(' +.01E2')", 1, parseFloat(" +.01E2") ); |
|
153 new TestCase( SECTION, "parseFloat(' -.01E2')", -1, parseFloat(" -.01E2") ); |
|
154 |
|
155 new TestCase( SECTION, "parseFloat(' .01E+2')", 1, parseFloat(" .01E+2") ); |
|
156 new TestCase( SECTION, "parseFloat(' +.01E+2')", 1, parseFloat(" +.01E+2") ); |
|
157 new TestCase( SECTION, "parseFloat(' -.01E+2')", -1, parseFloat(" -.01E+2") ); |
|
158 |
|
159 new TestCase( SECTION, "parseFloat(' .01E-2')", 0.0001, parseFloat(" .01E-2") ); |
|
160 new TestCase( SECTION, "parseFloat(' +.01E-2')", 0.0001, parseFloat(" +.01E-2") ); |
|
161 new TestCase( SECTION, "parseFloat(' -.01E-2')", -0.0001, parseFloat(" -.01E-2") ); |
|
162 |
|
163 // StrDecimalLiteral::: DecimalDigits ExponentPart opt |
|
164 new TestCase( SECTION, "parseFloat(' 1234E5')", 123400000, parseFloat(" 1234E5") ); |
|
165 new TestCase( SECTION, "parseFloat(' +1234E5')", 123400000, parseFloat(" +1234E5") ); |
|
166 new TestCase( SECTION, "parseFloat(' -1234E5')", -123400000, parseFloat(" -1234E5") ); |
|
167 |
|
168 new TestCase( SECTION, "parseFloat(' 1234E+5')", 123400000, parseFloat(" 1234E+5") ); |
|
169 new TestCase( SECTION, "parseFloat(' +1234E+5')", 123400000, parseFloat(" +1234E+5") ); |
|
170 new TestCase( SECTION, "parseFloat(' -1234E+5')", -123400000, parseFloat(" -1234E+5") ); |
|
171 |
|
172 new TestCase( SECTION, "parseFloat(' 1234E-5')", 0.01234, parseFloat(" 1234E-5") ); |
|
173 new TestCase( SECTION, "parseFloat(' +1234E-5')", 0.01234, parseFloat(" +1234E-5") ); |
|
174 new TestCase( SECTION, "parseFloat(' -1234E-5')", -0.01234, parseFloat(" -1234E-5") ); |
|
175 |
|
176 |
|
177 // hex cases should all return NaN |
|
178 |
|
179 new TestCase( SECTION, "parseFloat(' 0x0')", 0, parseFloat(" 0x0")); |
|
180 new TestCase( SECTION, "parseFloat(' 0x1')", 0, parseFloat(" 0x1")); |
|
181 new TestCase( SECTION, "parseFloat(' 0x2')", 0, parseFloat(" 0x2")); |
|
182 new TestCase( SECTION, "parseFloat(' 0x3')", 0, parseFloat(" 0x3")); |
|
183 new TestCase( SECTION, "parseFloat(' 0x4')", 0, parseFloat(" 0x4")); |
|
184 new TestCase( SECTION, "parseFloat(' 0x5')", 0, parseFloat(" 0x5")); |
|
185 new TestCase( SECTION, "parseFloat(' 0x6')", 0, parseFloat(" 0x6")); |
|
186 new TestCase( SECTION, "parseFloat(' 0x7')", 0, parseFloat(" 0x7")); |
|
187 new TestCase( SECTION, "parseFloat(' 0x8')", 0, parseFloat(" 0x8")); |
|
188 new TestCase( SECTION, "parseFloat(' 0x9')", 0, parseFloat(" 0x9")); |
|
189 new TestCase( SECTION, "parseFloat(' 0xa')", 0, parseFloat(" 0xa")); |
|
190 new TestCase( SECTION, "parseFloat(' 0xb')", 0, parseFloat(" 0xb")); |
|
191 new TestCase( SECTION, "parseFloat(' 0xc')", 0, parseFloat(" 0xc")); |
|
192 new TestCase( SECTION, "parseFloat(' 0xd')", 0, parseFloat(" 0xd")); |
|
193 new TestCase( SECTION, "parseFloat(' 0xe')", 0, parseFloat(" 0xe")); |
|
194 new TestCase( SECTION, "parseFloat(' 0xf')", 0, parseFloat(" 0xf")); |
|
195 new TestCase( SECTION, "parseFloat(' 0xA')", 0, parseFloat(" 0xA")); |
|
196 new TestCase( SECTION, "parseFloat(' 0xB')", 0, parseFloat(" 0xB")); |
|
197 new TestCase( SECTION, "parseFloat(' 0xC')", 0, parseFloat(" 0xC")); |
|
198 new TestCase( SECTION, "parseFloat(' 0xD')", 0, parseFloat(" 0xD")); |
|
199 new TestCase( SECTION, "parseFloat(' 0xE')", 0, parseFloat(" 0xE")); |
|
200 new TestCase( SECTION, "parseFloat(' 0xF')", 0, parseFloat(" 0xF")); |
|
201 |
|
202 new TestCase( SECTION, "parseFloat(' 0X0')", 0, parseFloat(" 0X0")); |
|
203 new TestCase( SECTION, "parseFloat(' 0X1')", 0, parseFloat(" 0X1")); |
|
204 new TestCase( SECTION, "parseFloat(' 0X2')", 0, parseFloat(" 0X2")); |
|
205 new TestCase( SECTION, "parseFloat(' 0X3')", 0, parseFloat(" 0X3")); |
|
206 new TestCase( SECTION, "parseFloat(' 0X4')", 0, parseFloat(" 0X4")); |
|
207 new TestCase( SECTION, "parseFloat(' 0X5')", 0, parseFloat(" 0X5")); |
|
208 new TestCase( SECTION, "parseFloat(' 0X6')", 0, parseFloat(" 0X6")); |
|
209 new TestCase( SECTION, "parseFloat(' 0X7')", 0, parseFloat(" 0X7")); |
|
210 new TestCase( SECTION, "parseFloat(' 0X8')", 0, parseFloat(" 0X8")); |
|
211 new TestCase( SECTION, "parseFloat(' 0X9')", 0, parseFloat(" 0X9")); |
|
212 new TestCase( SECTION, "parseFloat(' 0Xa')", 0, parseFloat(" 0Xa")); |
|
213 new TestCase( SECTION, "parseFloat(' 0Xb')", 0, parseFloat(" 0Xb")); |
|
214 new TestCase( SECTION, "parseFloat(' 0Xc')", 0, parseFloat(" 0Xc")); |
|
215 new TestCase( SECTION, "parseFloat(' 0Xd')", 0, parseFloat(" 0Xd")); |
|
216 new TestCase( SECTION, "parseFloat(' 0Xe')", 0, parseFloat(" 0Xe")); |
|
217 new TestCase( SECTION, "parseFloat(' 0Xf')", 0, parseFloat(" 0Xf")); |
|
218 new TestCase( SECTION, "parseFloat(' 0XA')", 0, parseFloat(" 0XA")); |
|
219 new TestCase( SECTION, "parseFloat(' 0XB')", 0, parseFloat(" 0XB")); |
|
220 new TestCase( SECTION, "parseFloat(' 0XC')", 0, parseFloat(" 0XC")); |
|
221 new TestCase( SECTION, "parseFloat(' 0XD')", 0, parseFloat(" 0XD")); |
|
222 new TestCase( SECTION, "parseFloat(' 0XE')", 0, parseFloat(" 0XE")); |
|
223 new TestCase( SECTION, "parseFloat(' 0XF')", 0, parseFloat(" 0XF")); |
|
224 |
|
225 // A StringNumericLiteral may not use octal notation |
|
226 |
|
227 new TestCase( SECTION, "parseFloat(' 00')", 0, parseFloat(" 00")); |
|
228 new TestCase( SECTION, "parseFloat(' 01')", 1, parseFloat(" 01")); |
|
229 new TestCase( SECTION, "parseFloat(' 02')", 2, parseFloat(" 02")); |
|
230 new TestCase( SECTION, "parseFloat(' 03')", 3, parseFloat(" 03")); |
|
231 new TestCase( SECTION, "parseFloat(' 04')", 4, parseFloat(" 04")); |
|
232 new TestCase( SECTION, "parseFloat(' 05')", 5, parseFloat(" 05")); |
|
233 new TestCase( SECTION, "parseFloat(' 06')", 6, parseFloat(" 06")); |
|
234 new TestCase( SECTION, "parseFloat(' 07')", 7, parseFloat(" 07")); |
|
235 new TestCase( SECTION, "parseFloat(' 010')", 10, parseFloat(" 010")); |
|
236 new TestCase( SECTION, "parseFloat(' 011')", 11, parseFloat(" 011")); |
|
237 |
|
238 // A StringNumericLIteral may have any number of leading 0 digits |
|
239 |
|
240 new TestCase( SECTION, "parseFloat(' 001')", 1, parseFloat(" 001")); |
|
241 new TestCase( SECTION, "parseFloat(' 0001')", 1, parseFloat(" 0001")); |
|
242 |
|
243 // A StringNumericLIteral may have any number of leading 0 digits |
|
244 |
|
245 new TestCase( SECTION, "parseFloat(001)", 1, parseFloat(001)); |
|
246 new TestCase( SECTION, "parseFloat(0001)", 1, parseFloat(0001)); |
|
247 |
|
248 // make sure it' s reflexive |
|
249 new TestCase( SECTION, "parseFloat( ' ' +Math.PI+' ')", Math.PI, parseFloat( ' ' +Math.PI+' ')); |
|
250 new TestCase( SECTION, "parseFloat( ' ' +Math.LN2+' ')", Math.LN2, parseFloat( ' ' +Math.LN2+' ')); |
|
251 new TestCase( SECTION, "parseFloat( ' ' +Math.LN10+' ')", Math.LN10, parseFloat( ' ' +Math.LN10+' ')); |
|
252 new TestCase( SECTION, "parseFloat( ' ' +Math.LOG2E+' ')", Math.LOG2E, parseFloat( ' ' +Math.LOG2E+' ')); |
|
253 new TestCase( SECTION, "parseFloat( ' ' +Math.LOG10E+' ')", Math.LOG10E, parseFloat( ' ' +Math.LOG10E+' ')); |
|
254 new TestCase( SECTION, "parseFloat( ' ' +Math.SQRT2+' ')", Math.SQRT2, parseFloat( ' ' +Math.SQRT2+' ')); |
|
255 new TestCase( SECTION, "parseFloat( ' ' +Math.SQRT1_2+' ')", Math.SQRT1_2, parseFloat( ' ' +Math.SQRT1_2+' ')); |
|
256 |
|
257 test(); |