OLD | NEW |
| (Empty) |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | |
2 // for details. All rights reserved. Use of this source code is governed by a | |
3 // BSD-style license that can be found in the LICENSE file. | |
4 | |
5 // We temporarily test both the new math library and the old Math | |
6 // class. This can easily be simplified once we get rid of the Math | |
7 // class entirely. | |
8 #library('math_test'); | |
9 #import('dart:math', prefix: 'math'); | |
10 | |
11 class MathTest { | |
12 static void testConstants() { | |
13 // Source for mathematical constants is Wolfram Alpha. | |
14 Expect.equals(2.7182818284590452353602874713526624977572470936999595749669, | |
15 Math.E); | |
16 Expect.equals(2.3025850929940456840179914546843642076011014886287729760333, | |
17 Math.LN10); | |
18 Expect.equals(0.6931471805599453094172321214581765680755001343602552541206, | |
19 Math.LN2); | |
20 Expect.equals(1.4426950408889634073599246810018921374266459541529859341354, | |
21 Math.LOG2E); | |
22 Expect.equals(0.4342944819032518276511289189166050822943970058036665661144, | |
23 Math.LOG10E); | |
24 Expect.equals(3.1415926535897932384626433832795028841971693993751058209749, | |
25 Math.PI); | |
26 Expect.equals(0.7071067811865475244008443621048490392848359376884740365883, | |
27 Math.SQRT1_2); | |
28 Expect.equals(1.4142135623730950488016887242096980785696718753769480731766, | |
29 Math.SQRT2); | |
30 } | |
31 | |
32 static checkClose(double a, double b, EPSILON) { | |
33 Expect.equals(true, a - EPSILON <= b); | |
34 Expect.equals(true, b <= a + EPSILON); | |
35 } | |
36 | |
37 static void testSin() { | |
38 // Given the imprecision of PI we can't expect better results than this. | |
39 final double EPSILON = 1e-15; | |
40 checkClose(0.0, Math.sin(0.0), EPSILON); | |
41 checkClose(0.0, Math.sin(Math.PI), EPSILON); | |
42 checkClose(0.0, Math.sin(2.0 * Math.PI), EPSILON); | |
43 checkClose(1.0, Math.sin(Math.PI / 2.0), EPSILON); | |
44 checkClose(-1.0, Math.sin(Math.PI * (3.0 / 2.0)), EPSILON); | |
45 } | |
46 | |
47 static void testCos() { | |
48 // Given the imprecision of PI we can't expect better results than this. | |
49 final double EPSILON = 1e-15; | |
50 checkClose(1.0, Math.cos(0.0), EPSILON); | |
51 checkClose(-1.0, Math.cos(Math.PI), EPSILON); | |
52 checkClose(1.0, Math.cos(2.0 * Math.PI), EPSILON); | |
53 checkClose(0.0, Math.cos(Math.PI / 2.0), EPSILON); | |
54 checkClose(0.0, Math.cos(Math.PI * (3.0 / 2.0)), EPSILON); | |
55 } | |
56 | |
57 static void testTan() { | |
58 // Given the imprecision of PI we can't expect better results than this. | |
59 final double EPSILON = 1e-15; | |
60 checkClose(0.0, Math.tan(0.0), EPSILON); | |
61 checkClose(0.0, Math.tan(Math.PI), EPSILON); | |
62 checkClose(0.0, Math.tan(2.0 * Math.PI), EPSILON); | |
63 checkClose(1.0, Math.tan(Math.PI / 4.0), EPSILON); | |
64 } | |
65 | |
66 static void testAsin() { | |
67 // Given the imprecision of PI we can't expect better results than this. | |
68 final double EPSILON = 1e-15; | |
69 checkClose(0.0, Math.asin(0.0), EPSILON); | |
70 checkClose(Math.PI / 2.0, Math.asin(1.0), EPSILON); | |
71 checkClose(-Math.PI / 2.0, Math.asin(-1.0), EPSILON); | |
72 } | |
73 | |
74 | |
75 static void testAcos() { | |
76 // Given the imprecision of PI we can't expect better results than this. | |
77 final double EPSILON = 1e-15; | |
78 checkClose(0.0, Math.acos(1.0), EPSILON); | |
79 checkClose(Math.PI, Math.acos(-1.0), EPSILON); | |
80 checkClose(Math.PI / 2.0, Math.acos(0.0), EPSILON); | |
81 } | |
82 | |
83 static void testAtan() { | |
84 // Given the imprecision of PI we can't expect better results than this. | |
85 final double EPSILON = 1e-15; | |
86 checkClose(0.0, Math.atan(0.0), EPSILON); | |
87 checkClose(Math.PI / 4.0, Math.atan(1.0), EPSILON); | |
88 checkClose(-Math.PI / 4.0, Math.atan(-1.0), EPSILON); | |
89 } | |
90 | |
91 static void testAtan2() { | |
92 // Given the imprecision of PI we can't expect better results than this. | |
93 final double EPSILON = 1e-15; | |
94 checkClose(0.0, Math.atan2(0.0, 5.0), EPSILON); | |
95 checkClose(Math.PI / 4.0, Math.atan2(2.0, 2.0), EPSILON); | |
96 checkClose(3 * Math.PI / 4.0, Math.atan2(0.5, -0.5), EPSILON); | |
97 checkClose(-3 * Math.PI / 4.0, Math.atan2(-2.5, -2.5), EPSILON); | |
98 } | |
99 | |
100 static checkVeryClose(double a, double b) { | |
101 // We find a ulp (unit in the last place) by shifting the original number | |
102 // to the right. This only works if we are not too close to infinity or if | |
103 // we work with denormals. | |
104 // We special case or 0.0, but not for infinity. | |
105 if (a == 0.0) { | |
106 final minimalDouble = 4.9406564584124654e-324; | |
107 Expect.equals(true, b.abs() <= minimalDouble); | |
108 return; | |
109 } | |
110 if (b == 0.0) { | |
111 // No need to look if they are close. Otherwise the check for 'a' above | |
112 // whould have triggered. | |
113 Expect.equals(a, b); | |
114 } | |
115 final double shiftRightBy52 = 2.220446049250313080847263336181640625e-16; | |
116 final double shiftedA = (a * shiftRightBy52).abs(); | |
117 // Compared to 'a', 'shiftedA' is now ~1-2 ulp. | |
118 | |
119 final double limitLow = a - shiftedA; | |
120 final double limitHigh = a + shiftedA; | |
121 Expect.equals(false, a == limitLow); | |
122 Expect.equals(false, a == limitHigh); | |
123 Expect.equals(true, limitLow <= b); | |
124 Expect.equals(true, b <= limitHigh); | |
125 } | |
126 | |
127 static void testSqrt() { | |
128 checkVeryClose(2.0, Math.sqrt(4.0)); | |
129 checkVeryClose(Math.SQRT2, Math.sqrt(2.0)); | |
130 checkVeryClose(Math.SQRT1_2, Math.sqrt(0.5)); | |
131 checkVeryClose(1e50, Math.sqrt(1e100)); | |
132 checkVeryClose(1.1111111061110855443054405046358901279277111935183977e56, | |
133 Math.sqrt(12345678901234e99)); | |
134 } | |
135 | |
136 static void testExp() { | |
137 checkVeryClose(Math.E, Math.exp(1.0)); | |
138 final EPSILON = 1e-15; | |
139 checkClose(10.0, Math.exp(Math.LN10), EPSILON); | |
140 checkClose(2.0, Math.exp(Math.LN2), EPSILON); | |
141 } | |
142 | |
143 static void testLog() { | |
144 // Even though E is imprecise, it is good enough to get really close to 1. | |
145 // We still provide an epsilon. | |
146 checkClose(1.0, Math.log(Math.E), 1e-16); | |
147 checkVeryClose(Math.LN10, Math.log(10.0)); | |
148 checkVeryClose(Math.LN2, Math.log(2.0)); | |
149 } | |
150 | |
151 static void testPow() { | |
152 checkVeryClose(16.0, Math.pow(4.0, 2.0)); | |
153 checkVeryClose(Math.SQRT2, Math.pow(2.0, 0.5)); | |
154 checkVeryClose(Math.SQRT1_2, Math.pow(0.5, 0.5)); | |
155 } | |
156 | |
157 static bool parseIntThrowsFormatException(str) { | |
158 try { | |
159 Math.parseInt(str); | |
160 return false; | |
161 } catch (FormatException e) { | |
162 return true; | |
163 } | |
164 } | |
165 | |
166 static void testParseInt() { | |
167 Expect.equals(499, Math.parseInt("499")); | |
168 Expect.equals(499, Math.parseInt("+499")); | |
169 Expect.equals(-499, Math.parseInt("-499")); | |
170 Expect.equals(499, Math.parseInt(" 499 ")); | |
171 Expect.equals(499, Math.parseInt(" +499 ")); | |
172 Expect.equals(-499, Math.parseInt(" -499 ")); | |
173 Expect.equals(0, Math.parseInt("0")); | |
174 Expect.equals(0, Math.parseInt("+0")); | |
175 Expect.equals(0, Math.parseInt("-0")); | |
176 Expect.equals(0, Math.parseInt(" 0 ")); | |
177 Expect.equals(0, Math.parseInt(" +0 ")); | |
178 Expect.equals(0, Math.parseInt(" -0 ")); | |
179 Expect.equals(0x1234567890, Math.parseInt("0x1234567890")); | |
180 Expect.equals(-0x1234567890, Math.parseInt("-0x1234567890")); | |
181 Expect.equals(0x1234567890, Math.parseInt(" 0x1234567890 ")); | |
182 Expect.equals(-0x1234567890, Math.parseInt(" -0x1234567890 ")); | |
183 Expect.equals(256, Math.parseInt("0x100")); | |
184 Expect.equals(-256, Math.parseInt("-0x100")); | |
185 Expect.equals(256, Math.parseInt(" 0x100 ")); | |
186 Expect.equals(-256, Math.parseInt(" -0x100 ")); | |
187 Expect.equals(0xabcdef, Math.parseInt("0xabcdef")); | |
188 Expect.equals(0xABCDEF, Math.parseInt("0xABCDEF")); | |
189 Expect.equals(0xabcdef, Math.parseInt("0xabCDEf")); | |
190 Expect.equals(-0xabcdef, Math.parseInt("-0xabcdef")); | |
191 Expect.equals(-0xABCDEF, Math.parseInt("-0xABCDEF")); | |
192 Expect.equals(0xabcdef, Math.parseInt(" 0xabcdef ")); | |
193 Expect.equals(0xABCDEF, Math.parseInt(" 0xABCDEF ")); | |
194 Expect.equals(-0xabcdef, Math.parseInt(" -0xabcdef ")); | |
195 Expect.equals(-0xABCDEF, Math.parseInt(" -0xABCDEF ")); | |
196 Expect.equals(0xabcdef, Math.parseInt("0x00000abcdef")); | |
197 Expect.equals(0xABCDEF, Math.parseInt("0x00000ABCDEF")); | |
198 Expect.equals(-0xabcdef, Math.parseInt("-0x00000abcdef")); | |
199 Expect.equals(-0xABCDEF, Math.parseInt("-0x00000ABCDEF")); | |
200 Expect.equals(0xabcdef, Math.parseInt(" 0x00000abcdef ")); | |
201 Expect.equals(0xABCDEF, Math.parseInt(" 0x00000ABCDEF ")); | |
202 Expect.equals(-0xabcdef, Math.parseInt(" -0x00000abcdef ")); | |
203 Expect.equals(-0xABCDEF, Math.parseInt(" -0x00000ABCDEF ")); | |
204 Expect.equals(10, Math.parseInt("010")); | |
205 Expect.equals(-10, Math.parseInt("-010")); | |
206 Expect.equals(10, Math.parseInt(" 010 ")); | |
207 Expect.equals(-10, Math.parseInt(" -010 ")); | |
208 Expect.equals(9, Math.parseInt("09")); | |
209 Expect.equals(9, Math.parseInt(" 09 ")); | |
210 Expect.equals(-9, Math.parseInt("-09")); | |
211 Expect.equals(true, parseIntThrowsFormatException("1b")); | |
212 Expect.equals(true, parseIntThrowsFormatException(" 1b ")); | |
213 Expect.equals(true, parseIntThrowsFormatException(" 1 b ")); | |
214 Expect.equals(true, parseIntThrowsFormatException("1e2")); | |
215 Expect.equals(true, parseIntThrowsFormatException(" 1e2 ")); | |
216 Expect.equals(true, parseIntThrowsFormatException("00x12")); | |
217 Expect.equals(true, parseIntThrowsFormatException(" 00x12 ")); | |
218 Expect.equals(true, parseIntThrowsFormatException("-1b")); | |
219 Expect.equals(true, parseIntThrowsFormatException(" -1b ")); | |
220 Expect.equals(true, parseIntThrowsFormatException(" -1 b ")); | |
221 Expect.equals(true, parseIntThrowsFormatException("-1e2")); | |
222 Expect.equals(true, parseIntThrowsFormatException(" -1e2 ")); | |
223 Expect.equals(true, parseIntThrowsFormatException("-00x12")); | |
224 Expect.equals(true, parseIntThrowsFormatException(" -00x12 ")); | |
225 Expect.equals(true, parseIntThrowsFormatException(" -00x12 ")); | |
226 Expect.equals(true, parseIntThrowsFormatException("0x0x12")); | |
227 Expect.equals(true, parseIntThrowsFormatException("0.1")); | |
228 Expect.equals(true, parseIntThrowsFormatException("0x3.1")); | |
229 Expect.equals(true, parseIntThrowsFormatException("5.")); | |
230 Expect.equals(true, parseIntThrowsFormatException("+-5")); | |
231 Expect.equals(true, parseIntThrowsFormatException("-+5")); | |
232 Expect.equals(true, parseIntThrowsFormatException("--5")); | |
233 Expect.equals(true, parseIntThrowsFormatException("++5")); | |
234 Expect.equals(true, parseIntThrowsFormatException("+ 5")); | |
235 Expect.equals(true, parseIntThrowsFormatException("- 5")); | |
236 Expect.equals(true, parseIntThrowsFormatException("")); | |
237 Expect.equals(true, parseIntThrowsFormatException(" ")); | |
238 Expect.equals(true, parseIntThrowsFormatException("+0x1234567890")); | |
239 Expect.equals(true, parseIntThrowsFormatException(" +0x1234567890 ")); | |
240 Expect.equals(true, parseIntThrowsFormatException("+0x100")); | |
241 Expect.equals(true, parseIntThrowsFormatException(" +0x100 ")); | |
242 } | |
243 | |
244 static testMain() { | |
245 testConstants(); | |
246 testSin(); | |
247 testCos(); | |
248 testTan(); | |
249 testAsin(); | |
250 testAcos(); | |
251 testAtan(); | |
252 testAtan2(); | |
253 testSqrt(); | |
254 testLog(); | |
255 testExp(); | |
256 testPow(); | |
257 testParseInt(); | |
258 } | |
259 } | |
260 | |
261 class MathLibraryTest { | |
262 static void testConstants() { | |
263 // Source for mathematical constants is Wolfram Alpha. | |
264 Expect.equals(2.7182818284590452353602874713526624977572470936999595749669, | |
265 math.E); | |
266 Expect.equals(2.3025850929940456840179914546843642076011014886287729760333, | |
267 math.LN10); | |
268 Expect.equals(0.6931471805599453094172321214581765680755001343602552541206, | |
269 math.LN2); | |
270 Expect.equals(1.4426950408889634073599246810018921374266459541529859341354, | |
271 math.LOG2E); | |
272 Expect.equals(0.4342944819032518276511289189166050822943970058036665661144, | |
273 math.LOG10E); | |
274 Expect.equals(3.1415926535897932384626433832795028841971693993751058209749, | |
275 math.PI); | |
276 Expect.equals(0.7071067811865475244008443621048490392848359376884740365883, | |
277 math.SQRT1_2); | |
278 Expect.equals(1.4142135623730950488016887242096980785696718753769480731766, | |
279 math.SQRT2); | |
280 } | |
281 | |
282 static checkClose(double a, double b, EPSILON) { | |
283 Expect.equals(true, a - EPSILON <= b); | |
284 Expect.equals(true, b <= a + EPSILON); | |
285 } | |
286 | |
287 static void testSin() { | |
288 // Given the imprecision of PI we can't expect better results than this. | |
289 final double EPSILON = 1e-15; | |
290 checkClose(0.0, math.sin(0.0), EPSILON); | |
291 checkClose(0.0, math.sin(math.PI), EPSILON); | |
292 checkClose(0.0, math.sin(2.0 * math.PI), EPSILON); | |
293 checkClose(1.0, math.sin(math.PI / 2.0), EPSILON); | |
294 checkClose(-1.0, math.sin(math.PI * (3.0 / 2.0)), EPSILON); | |
295 } | |
296 | |
297 static void testCos() { | |
298 // Given the imprecision of PI we can't expect better results than this. | |
299 final double EPSILON = 1e-15; | |
300 checkClose(1.0, math.cos(0.0), EPSILON); | |
301 checkClose(-1.0, math.cos(math.PI), EPSILON); | |
302 checkClose(1.0, math.cos(2.0 * math.PI), EPSILON); | |
303 checkClose(0.0, math.cos(math.PI / 2.0), EPSILON); | |
304 checkClose(0.0, math.cos(math.PI * (3.0 / 2.0)), EPSILON); | |
305 } | |
306 | |
307 static void testTan() { | |
308 // Given the imprecision of PI we can't expect better results than this. | |
309 final double EPSILON = 1e-15; | |
310 checkClose(0.0, math.tan(0.0), EPSILON); | |
311 checkClose(0.0, math.tan(math.PI), EPSILON); | |
312 checkClose(0.0, math.tan(2.0 * math.PI), EPSILON); | |
313 checkClose(1.0, math.tan(math.PI / 4.0), EPSILON); | |
314 } | |
315 | |
316 static void testAsin() { | |
317 // Given the imprecision of PI we can't expect better results than this. | |
318 final double EPSILON = 1e-15; | |
319 checkClose(0.0, math.asin(0.0), EPSILON); | |
320 checkClose(math.PI / 2.0, math.asin(1.0), EPSILON); | |
321 checkClose(-math.PI / 2.0, math.asin(-1.0), EPSILON); | |
322 } | |
323 | |
324 | |
325 static void testAcos() { | |
326 // Given the imprecision of PI we can't expect better results than this. | |
327 final double EPSILON = 1e-15; | |
328 checkClose(0.0, math.acos(1.0), EPSILON); | |
329 checkClose(math.PI, math.acos(-1.0), EPSILON); | |
330 checkClose(math.PI / 2.0, math.acos(0.0), EPSILON); | |
331 } | |
332 | |
333 static void testAtan() { | |
334 // Given the imprecision of PI we can't expect better results than this. | |
335 final double EPSILON = 1e-15; | |
336 checkClose(0.0, math.atan(0.0), EPSILON); | |
337 checkClose(math.PI / 4.0, math.atan(1.0), EPSILON); | |
338 checkClose(-math.PI / 4.0, math.atan(-1.0), EPSILON); | |
339 } | |
340 | |
341 static void testAtan2() { | |
342 // Given the imprecision of PI we can't expect better results than this. | |
343 final double EPSILON = 1e-15; | |
344 checkClose(0.0, math.atan2(0.0, 5.0), EPSILON); | |
345 checkClose(math.PI / 4.0, math.atan2(2.0, 2.0), EPSILON); | |
346 checkClose(3 * math.PI / 4.0, math.atan2(0.5, -0.5), EPSILON); | |
347 checkClose(-3 * math.PI / 4.0, math.atan2(-2.5, -2.5), EPSILON); | |
348 } | |
349 | |
350 static checkVeryClose(double a, double b) { | |
351 // We find a ulp (unit in the last place) by shifting the original number | |
352 // to the right. This only works if we are not too close to infinity or if | |
353 // we work with denormals. | |
354 // We special case or 0.0, but not for infinity. | |
355 if (a == 0.0) { | |
356 final minimalDouble = 4.9406564584124654e-324; | |
357 Expect.equals(true, b.abs() <= minimalDouble); | |
358 return; | |
359 } | |
360 if (b == 0.0) { | |
361 // No need to look if they are close. Otherwise the check for 'a' above | |
362 // whould have triggered. | |
363 Expect.equals(a, b); | |
364 } | |
365 final double shiftRightBy52 = 2.220446049250313080847263336181640625e-16; | |
366 final double shiftedA = (a * shiftRightBy52).abs(); | |
367 // Compared to 'a', 'shiftedA' is now ~1-2 ulp. | |
368 | |
369 final double limitLow = a - shiftedA; | |
370 final double limitHigh = a + shiftedA; | |
371 Expect.equals(false, a == limitLow); | |
372 Expect.equals(false, a == limitHigh); | |
373 Expect.equals(true, limitLow <= b); | |
374 Expect.equals(true, b <= limitHigh); | |
375 } | |
376 | |
377 static void testSqrt() { | |
378 checkVeryClose(2.0, math.sqrt(4.0)); | |
379 checkVeryClose(math.SQRT2, math.sqrt(2.0)); | |
380 checkVeryClose(math.SQRT1_2, math.sqrt(0.5)); | |
381 checkVeryClose(1e50, math.sqrt(1e100)); | |
382 checkVeryClose(1.1111111061110855443054405046358901279277111935183977e56, | |
383 math.sqrt(12345678901234e99)); | |
384 } | |
385 | |
386 static void testExp() { | |
387 checkVeryClose(math.E, math.exp(1.0)); | |
388 final EPSILON = 1e-15; | |
389 checkClose(10.0, math.exp(math.LN10), EPSILON); | |
390 checkClose(2.0, math.exp(math.LN2), EPSILON); | |
391 } | |
392 | |
393 static void testLog() { | |
394 // Even though E is imprecise, it is good enough to get really close to 1. | |
395 // We still provide an epsilon. | |
396 checkClose(1.0, math.log(math.E), 1e-16); | |
397 checkVeryClose(math.LN10, math.log(10.0)); | |
398 checkVeryClose(math.LN2, math.log(2.0)); | |
399 } | |
400 | |
401 static void testPow() { | |
402 checkVeryClose(16.0, math.pow(4.0, 2.0)); | |
403 checkVeryClose(math.SQRT2, math.pow(2.0, 0.5)); | |
404 checkVeryClose(math.SQRT1_2, math.pow(0.5, 0.5)); | |
405 } | |
406 | |
407 static bool parseIntThrowsFormatException(str) { | |
408 try { | |
409 math.parseInt(str); | |
410 return false; | |
411 } catch (FormatException e) { | |
412 return true; | |
413 } | |
414 } | |
415 | |
416 static void testParseInt() { | |
417 Expect.equals(499, math.parseInt("499")); | |
418 Expect.equals(499, math.parseInt("+499")); | |
419 Expect.equals(-499, math.parseInt("-499")); | |
420 Expect.equals(499, math.parseInt(" 499 ")); | |
421 Expect.equals(499, math.parseInt(" +499 ")); | |
422 Expect.equals(-499, math.parseInt(" -499 ")); | |
423 Expect.equals(0, math.parseInt("0")); | |
424 Expect.equals(0, math.parseInt("+0")); | |
425 Expect.equals(0, math.parseInt("-0")); | |
426 Expect.equals(0, math.parseInt(" 0 ")); | |
427 Expect.equals(0, math.parseInt(" +0 ")); | |
428 Expect.equals(0, math.parseInt(" -0 ")); | |
429 Expect.equals(0x1234567890, math.parseInt("0x1234567890")); | |
430 Expect.equals(-0x1234567890, math.parseInt("-0x1234567890")); | |
431 Expect.equals(0x1234567890, math.parseInt(" 0x1234567890 ")); | |
432 Expect.equals(-0x1234567890, math.parseInt(" -0x1234567890 ")); | |
433 Expect.equals(256, math.parseInt("0x100")); | |
434 Expect.equals(-256, math.parseInt("-0x100")); | |
435 Expect.equals(256, math.parseInt(" 0x100 ")); | |
436 Expect.equals(-256, math.parseInt(" -0x100 ")); | |
437 Expect.equals(0xabcdef, math.parseInt("0xabcdef")); | |
438 Expect.equals(0xABCDEF, math.parseInt("0xABCDEF")); | |
439 Expect.equals(0xabcdef, math.parseInt("0xabCDEf")); | |
440 Expect.equals(-0xabcdef, math.parseInt("-0xabcdef")); | |
441 Expect.equals(-0xABCDEF, math.parseInt("-0xABCDEF")); | |
442 Expect.equals(0xabcdef, math.parseInt(" 0xabcdef ")); | |
443 Expect.equals(0xABCDEF, math.parseInt(" 0xABCDEF ")); | |
444 Expect.equals(-0xabcdef, math.parseInt(" -0xabcdef ")); | |
445 Expect.equals(-0xABCDEF, math.parseInt(" -0xABCDEF ")); | |
446 Expect.equals(0xabcdef, math.parseInt("0x00000abcdef")); | |
447 Expect.equals(0xABCDEF, math.parseInt("0x00000ABCDEF")); | |
448 Expect.equals(-0xabcdef, math.parseInt("-0x00000abcdef")); | |
449 Expect.equals(-0xABCDEF, math.parseInt("-0x00000ABCDEF")); | |
450 Expect.equals(0xabcdef, math.parseInt(" 0x00000abcdef ")); | |
451 Expect.equals(0xABCDEF, math.parseInt(" 0x00000ABCDEF ")); | |
452 Expect.equals(-0xabcdef, math.parseInt(" -0x00000abcdef ")); | |
453 Expect.equals(-0xABCDEF, math.parseInt(" -0x00000ABCDEF ")); | |
454 Expect.equals(10, math.parseInt("010")); | |
455 Expect.equals(-10, math.parseInt("-010")); | |
456 Expect.equals(10, math.parseInt(" 010 ")); | |
457 Expect.equals(-10, math.parseInt(" -010 ")); | |
458 Expect.equals(9, math.parseInt("09")); | |
459 Expect.equals(9, math.parseInt(" 09 ")); | |
460 Expect.equals(-9, math.parseInt("-09")); | |
461 Expect.equals(true, parseIntThrowsFormatException("1b")); | |
462 Expect.equals(true, parseIntThrowsFormatException(" 1b ")); | |
463 Expect.equals(true, parseIntThrowsFormatException(" 1 b ")); | |
464 Expect.equals(true, parseIntThrowsFormatException("1e2")); | |
465 Expect.equals(true, parseIntThrowsFormatException(" 1e2 ")); | |
466 Expect.equals(true, parseIntThrowsFormatException("00x12")); | |
467 Expect.equals(true, parseIntThrowsFormatException(" 00x12 ")); | |
468 Expect.equals(true, parseIntThrowsFormatException("-1b")); | |
469 Expect.equals(true, parseIntThrowsFormatException(" -1b ")); | |
470 Expect.equals(true, parseIntThrowsFormatException(" -1 b ")); | |
471 Expect.equals(true, parseIntThrowsFormatException("-1e2")); | |
472 Expect.equals(true, parseIntThrowsFormatException(" -1e2 ")); | |
473 Expect.equals(true, parseIntThrowsFormatException("-00x12")); | |
474 Expect.equals(true, parseIntThrowsFormatException(" -00x12 ")); | |
475 Expect.equals(true, parseIntThrowsFormatException(" -00x12 ")); | |
476 Expect.equals(true, parseIntThrowsFormatException("0x0x12")); | |
477 Expect.equals(true, parseIntThrowsFormatException("0.1")); | |
478 Expect.equals(true, parseIntThrowsFormatException("0x3.1")); | |
479 Expect.equals(true, parseIntThrowsFormatException("5.")); | |
480 Expect.equals(true, parseIntThrowsFormatException("+-5")); | |
481 Expect.equals(true, parseIntThrowsFormatException("-+5")); | |
482 Expect.equals(true, parseIntThrowsFormatException("--5")); | |
483 Expect.equals(true, parseIntThrowsFormatException("++5")); | |
484 Expect.equals(true, parseIntThrowsFormatException("+ 5")); | |
485 Expect.equals(true, parseIntThrowsFormatException("- 5")); | |
486 Expect.equals(true, parseIntThrowsFormatException("")); | |
487 Expect.equals(true, parseIntThrowsFormatException(" ")); | |
488 Expect.equals(true, parseIntThrowsFormatException("+0x1234567890")); | |
489 Expect.equals(true, parseIntThrowsFormatException(" +0x1234567890 ")); | |
490 Expect.equals(true, parseIntThrowsFormatException("+0x100")); | |
491 Expect.equals(true, parseIntThrowsFormatException(" +0x100 ")); | |
492 } | |
493 | |
494 static testMain() { | |
495 testConstants(); | |
496 testSin(); | |
497 testCos(); | |
498 testTan(); | |
499 testAsin(); | |
500 testAcos(); | |
501 testAtan(); | |
502 testAtan2(); | |
503 testSqrt(); | |
504 testLog(); | |
505 testExp(); | |
506 testPow(); | |
507 testParseInt(); | |
508 } | |
509 } | |
510 | |
511 main() { | |
512 MathTest.testMain(); | |
513 MathLibraryTest.testMain(); | |
514 } | |
OLD | NEW |