mirror of https://github.com/svaarala/duktape.git
Sami Vaarala
12 years ago
2 changed files with 186 additions and 1 deletions
@ -0,0 +1,144 @@ |
|||||
|
/*=== |
||||
|
0.1 |
||||
|
0.1 |
||||
|
1 |
||||
|
NaN |
||||
|
100000 |
||||
|
1 |
||||
|
1 |
||||
|
1 |
||||
|
Infinity |
||||
|
-Infinity |
||||
|
1461559270678 |
||||
|
-1461559270678 |
||||
|
0.1 |
||||
|
SyntaxError |
||||
|
SyntaxError |
||||
|
SyntaxError |
||||
|
100000 |
||||
|
SyntaxError |
||||
|
SyntaxError |
||||
|
SyntaxError |
||||
|
Infinity |
||||
|
-Infinity |
||||
|
1e+23 |
||||
|
10000000000000000000 |
||||
|
100000000000000000000 |
||||
|
1e+21 |
||||
|
1e+22 |
||||
|
10000000000000000000 |
||||
|
100000000000000000000 |
||||
|
1e+21 |
||||
|
1e+22 |
||||
|
10000000000000000000 |
||||
|
100000000000000000000 |
||||
|
1e+21 |
||||
|
1e+22 |
||||
|
0.0001 |
||||
|
0.0001 |
||||
|
0.0001 |
||||
|
0.0001 |
||||
|
0.0001 |
||||
|
===*/ |
||||
|
|
||||
|
/* Misc tests from specification and own documentation. */ |
||||
|
|
||||
|
function miscTest() { |
||||
|
function pFloat(x) { |
||||
|
try { |
||||
|
print(parseFloat(x)); |
||||
|
} catch (e) { |
||||
|
print(e.name); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function pInt(x, radix) { |
||||
|
try { |
||||
|
print(parseInt(x, radix)); |
||||
|
} catch (e) { |
||||
|
print(e.name); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function pJSON(x) { |
||||
|
try { |
||||
|
print(JSON.parse(x)); |
||||
|
} catch (e) { |
||||
|
print(e.name); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
// parseFloat() allows fractions without leading integer digit
|
||||
|
pFloat('0.1'); |
||||
|
pFloat('.1'); |
||||
|
|
||||
|
// parseFloat() also allows decimal point without fractions,
|
||||
|
// but does not allow a decimal point without a leading integer
|
||||
|
// digit AND without fraction digits
|
||||
|
pFloat('1.'); |
||||
|
pFloat('.'); |
||||
|
|
||||
|
// Exponent must have at least one digit. However, if the exponent
|
||||
|
// is malformed, pFloat() finds the shortest valid prefix, and parses
|
||||
|
// the invalid cases as '1'!
|
||||
|
pFloat('1e5'); |
||||
|
pFloat('1e'); |
||||
|
pFloat('1e+'); |
||||
|
pFloat('1e-'); |
||||
|
|
||||
|
// parseFloat() parses 'Infinity'
|
||||
|
pFloat('Infinity'); |
||||
|
pFloat('-Infinity'); |
||||
|
|
||||
|
// parseInt() does not; in suitable radix 'Infinity' is a valid number
|
||||
|
pInt('Infinity', 36); |
||||
|
pInt('-Infinity', 36); |
||||
|
|
||||
|
// JSON.parse does not allow fractions without leading digits, or
|
||||
|
// decimal point without at least one fractional digit
|
||||
|
pJSON('0.1'); // OK
|
||||
|
pJSON('.1'); |
||||
|
pJSON('1.'); |
||||
|
pJSON('.'); |
||||
|
|
||||
|
// JSON.parse requires at least one digit in exponent
|
||||
|
pJSON('1e5'); |
||||
|
pJSON('1e'); |
||||
|
pJSON('1e+'); |
||||
|
pJSON('1e-'); |
||||
|
|
||||
|
// JSON.parse() preserves sign
|
||||
|
print(1/JSON.parse('0')); // -> +inf
|
||||
|
print(1/JSON.parse('-0')); // -> -inf
|
||||
|
|
||||
|
// V8 prints "1e+23", some Duktape version prints something else
|
||||
|
// (a separate bug testcase opened)
|
||||
|
print(parseInt('0000100000000000000000000000', 10)); |
||||
|
|
||||
|
// various positions for precision digits
|
||||
|
pFloat('10000000000000000000'); |
||||
|
pFloat('100000000000000000000'); |
||||
|
pFloat('1000000000000000000000'); |
||||
|
pFloat('10000000000000000000000'); |
||||
|
pFloat('00010000000000000000000'); |
||||
|
pFloat('000100000000000000000000'); |
||||
|
pFloat('0001000000000000000000000'); |
||||
|
pFloat('00010000000000000000000000'); |
||||
|
pFloat('00000000000000000000000010000000000000000000'); |
||||
|
pFloat('000000000000000000000000100000000000000000000'); |
||||
|
pFloat('0000000000000000000000001000000000000000000000'); |
||||
|
pFloat('00000000000000000000000010000000000000000000000'); |
||||
|
pFloat('0.0001'); |
||||
|
pFloat('0.00010000000000000000000'); |
||||
|
pFloat('0.000100000000000000000000'); |
||||
|
pFloat('0.0001000000000000000000000'); |
||||
|
pFloat('0.00010000000000000000000000'); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
miscTest(); |
||||
|
} catch (e) { |
||||
|
print(e); |
||||
|
} |
||||
|
|
Loading…
Reference in new issue