str-to-num.js revision a7e24c173cf37484693b9abb38e494fa7bd7baeb
1// Copyright 2008 the V8 project authors. All rights reserved.
2// Redistribution and use in source and binary forms, with or without
3// modification, are permitted provided that the following conditions are
4// met:
5//
6//     * Redistributions of source code must retain the above copyright
7//       notice, this list of conditions and the following disclaimer.
8//     * Redistributions in binary form must reproduce the above
9//       copyright notice, this list of conditions and the following
10//       disclaimer in the documentation and/or other materials provided
11//       with the distribution.
12//     * Neither the name of Google Inc. nor the names of its
13//       contributors may be used to endorse or promote products derived
14//       from this software without specific prior written permission.
15//
16// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28function toNumber(val) {
29  return Number(val);
30}
31
32// assertEquals(, toNumber());
33
34
35assertEquals(123, toNumber(" 123"));
36assertEquals(123, toNumber("\n123"));
37assertEquals(123, toNumber("\r123"));
38assertEquals(123, toNumber("\t123"));
39assertEquals(123, toNumber("\f123"));
40
41assertEquals(123, toNumber("123 "));
42assertEquals(123, toNumber("123\n"));
43assertEquals(123, toNumber("123\r"));
44assertEquals(123, toNumber("123\t"));
45assertEquals(123, toNumber("123\f"));
46
47assertEquals(123, toNumber(" 123 "));
48assertEquals(123, toNumber("\n123\n"));
49assertEquals(123, toNumber("\r123\r"));
50assertEquals(123, toNumber("\t123\t"));
51assertEquals(123, toNumber("\f123\f"));
52
53assertTrue(isNaN(toNumber(" NaN ")));
54assertEquals(Infinity,  toNumber(" Infinity ") ," Infinity");
55assertEquals(-Infinity, toNumber(" -Infinity "));
56assertEquals(Infinity,  toNumber(" +Infinity "), " +Infinity");
57assertEquals(Infinity,  toNumber("Infinity ") ,"Infinity");
58assertEquals(-Infinity, toNumber("-Infinity "));
59assertEquals(Infinity,  toNumber("+Infinity "), "+Infinity");
60
61assertEquals(0,  toNumber("0"));
62assertEquals(0,  toNumber("+0"));
63assertEquals(-0, toNumber("-0"));
64
65assertEquals(1,  toNumber("1"));
66assertEquals(1,  toNumber("+1"));
67assertEquals(-1, toNumber("-1"));
68
69assertEquals(2,  toNumber("2"));
70assertEquals(2,  toNumber("+2"));
71assertEquals(-2, toNumber("-2"));
72
73assertEquals(3.1415926,  toNumber("3.1415926"));
74assertEquals(3.1415926,  toNumber("+3.1415926"));
75assertEquals(-3.1415926, toNumber("-3.1415926"));
76
77assertEquals(5,  toNumber("5."));
78assertEquals(5,  toNumber("+5."));
79assertEquals(-5, toNumber("-5."));
80
81assertEquals(500,   toNumber("5e2"));
82assertEquals(500,   toNumber("+5e2"));
83assertEquals(-500,  toNumber("-5e2"));
84assertEquals(500,   toNumber("5e+2"));
85assertEquals(500,   toNumber("+5e+2"));
86assertEquals(-500,  toNumber("-5e+2"));
87assertEquals(0.05,  toNumber("5e-2"));
88assertEquals(0.05,  toNumber("+5e-2"));
89assertEquals(-0.05, toNumber("-5e-2"));
90
91assertEquals(0.00001,   toNumber(".00001"));
92assertEquals(0.00001,   toNumber("+.00001"));
93assertEquals(-0.00001,  toNumber("-.00001"));
94assertEquals(1,         toNumber(".00001e5"));
95assertEquals(1,         toNumber("+.00001e5"));
96assertEquals(-1,        toNumber("-.00001e5"));
97assertEquals(1,         toNumber(".00001e+5"));
98assertEquals(1,         toNumber("+.00001e+5"));
99assertEquals(-1,        toNumber("-.00001e+5"));
100assertEquals(0.00001,   toNumber(".001e-2"));
101assertEquals(0.00001,   toNumber("+.001e-2"));
102assertEquals(-0.00001,  toNumber("-.001e-2"));
103
104assertEquals(12340000,   toNumber("1234e4"));
105assertEquals(12340000,   toNumber("+1234e4"));
106assertEquals(-12340000,  toNumber("-1234e4"));
107assertEquals(12340000,   toNumber("1234e+4"));
108assertEquals(12340000,   toNumber("+1234e+4"));
109assertEquals(-12340000,  toNumber("-1234e+4"));
110assertEquals(0.1234,     toNumber("1234e-4"));
111assertEquals(0.1234,     toNumber("+1234e-4"));
112assertEquals(-0.1234,    toNumber("-1234e-4"));
113
114assertEquals(0,  toNumber("0x0"));
115assertEquals(1,  toNumber("0x1"));
116assertEquals(2,  toNumber("0x2"));
117assertEquals(9,  toNumber("0x9"));
118assertEquals(10, toNumber("0xa"));
119assertEquals(11, toNumber("0xb"));
120assertEquals(15, toNumber("0xf"));
121assertEquals(10, toNumber("0xA"));
122assertEquals(11, toNumber("0xB"));
123assertEquals(15, toNumber("0xF"));
124
125assertEquals(0,  toNumber("0X0"));
126assertEquals(9,  toNumber("0X9"));
127assertEquals(10, toNumber("0Xa"));
128assertEquals(10, toNumber("0XA"));
129assertEquals(15, toNumber("0Xf"));
130assertEquals(15, toNumber("0XF"));
131
132assertEquals(0,  toNumber("0x000"));
133assertEquals(9,  toNumber("0x009"));
134assertEquals(10, toNumber("0x00a"));
135assertEquals(10, toNumber("0x00A"));
136assertEquals(15, toNumber("0x00f"));
137assertEquals(15, toNumber("0x00F"));
138
139assertEquals(0, toNumber("00"));
140assertEquals(1, toNumber("01"));
141assertEquals(2, toNumber("02"));
142assertEquals(10, toNumber("010"));
143assertEquals(100, toNumber("0100"));
144assertEquals(100, toNumber("000100"));
145
146assertEquals(Infinity,  toNumber("1e999"), "1e999");
147assertEquals(-Infinity, toNumber("-1e999"));
148assertEquals(0,         toNumber("1e-999"));
149assertEquals(0,         toNumber("-1e-999"));
150assertEquals(Infinity,  1 / toNumber("1e-999"), "1e-999");
151assertEquals(-Infinity, 1 / toNumber("-1e-999"));
152
153assertTrue(isNaN(toNumber("junk")), "junk");
154assertTrue(isNaN(toNumber("100 junk")), "100 junk");
155assertTrue(isNaN(toNumber("0x100 junk")), "0x100 junk");
156assertTrue(isNaN(toNumber("100.0 junk")), "100.0 junk");
157assertTrue(isNaN(toNumber(".1e4 junk")), ".1e4 junk");
158assertTrue(isNaN(toNumber("Infinity junk")), "Infinity junk");
159