mirror of https://github.com/svaarala/duktape.git
Sami Vaarala
8 years ago
committed by
GitHub
10 changed files with 196 additions and 33 deletions
@ -0,0 +1,33 @@ |
|||||
|
/* |
||||
|
* Gaps in .apply() args array. |
||||
|
*/ |
||||
|
|
||||
|
/*=== |
||||
|
undefined undefined |
||||
|
undefined undefined |
||||
|
undefined undefined |
||||
|
string foo |
||||
|
undefined undefined |
||||
|
===*/ |
||||
|
|
||||
|
function test() { |
||||
|
function f(a,b,c,d,e) { |
||||
|
print(typeof a, a); |
||||
|
print(typeof b, b); |
||||
|
print(typeof c, c); |
||||
|
print(typeof d, d); |
||||
|
print(typeof e, e); |
||||
|
} |
||||
|
|
||||
|
var args = []; |
||||
|
args.length = 10; |
||||
|
args[3] = 'foo'; |
||||
|
|
||||
|
f.apply(null, args); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
test(); |
||||
|
} catch (e) { |
||||
|
print(e.stack || e); |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
/*=== |
||||
|
123 |
||||
|
0 |
||||
|
dummy |
||||
|
0 |
||||
|
===*/ |
||||
|
|
||||
|
function test() { |
||||
|
var f, g; |
||||
|
|
||||
|
// In ES2015 .bind() doesn't coerce the length so '123' is treated as 0.
|
||||
|
f = function f() {}; |
||||
|
Object.defineProperty(f, 'length', { value: '123' }); |
||||
|
print(f.length); |
||||
|
g = f.bind(null, 123); |
||||
|
print(g.length); |
||||
|
|
||||
|
// Same for a string which isn't number like.
|
||||
|
f = function f() {}; |
||||
|
Object.defineProperty(f, 'length', { value: 'dummy' }); |
||||
|
print(f.length); |
||||
|
g = f.bind(null, 123); |
||||
|
print(g.length); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
test(); |
||||
|
} catch (e) { |
||||
|
print(e.stack || e); |
||||
|
} |
@ -0,0 +1,72 @@ |
|||||
|
if (typeof print !== 'function') { print = console.log; } |
||||
|
|
||||
|
function evolve(input, rule) { |
||||
|
var res = []; |
||||
|
var i; |
||||
|
var bits; |
||||
|
|
||||
|
for (i = 0; i < input.length; i++) { |
||||
|
bits = 0; |
||||
|
if (i - 1 >= 0) { |
||||
|
bits += input[i - 1] * 4; |
||||
|
} |
||||
|
if (i - 1 < input.length) { |
||||
|
bits += input[i + 1]; |
||||
|
} |
||||
|
if (i - 2 >= 0) { |
||||
|
bits += input[i - 2] * 8; |
||||
|
} |
||||
|
if (i + 2 < input.length) { |
||||
|
bits += input[i + 2] * 16; |
||||
|
} |
||||
|
bits += input[i] * 2; |
||||
|
|
||||
|
if ((1 << bits) & rule) { |
||||
|
res[i] = 0; |
||||
|
} else { |
||||
|
res[i] = 1; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
res[(Math.random() * input.length) >>> 0] = (Math.random() > 0.5 ? 1 : 0); |
||||
|
|
||||
|
return res; |
||||
|
} |
||||
|
|
||||
|
function mapchar(v) { |
||||
|
return v ? ' ' : '#'; |
||||
|
} |
||||
|
|
||||
|
function dump(input) { |
||||
|
var line = '|' + input.map(mapchar).join('') + '|'; |
||||
|
//print(line);
|
||||
|
} |
||||
|
|
||||
|
function test() { |
||||
|
var input; |
||||
|
var rulenum; |
||||
|
var round; |
||||
|
|
||||
|
//rulenum = (Math.random() * 0x100000000) >>> 0;
|
||||
|
rulenum = 0xdeadbeef; |
||||
|
|
||||
|
input = []; |
||||
|
while (input.length < 512) { |
||||
|
input.push(1); |
||||
|
} |
||||
|
input[256] = 0; |
||||
|
|
||||
|
for (round = 0; round < 1e4; round++) { |
||||
|
dump(input); |
||||
|
input = evolve(input, rulenum); |
||||
|
} |
||||
|
|
||||
|
print('done'); |
||||
|
} |
||||
|
|
||||
|
try { |
||||
|
test(); |
||||
|
} catch (e) { |
||||
|
print(e.stack || e); |
||||
|
throw e; |
||||
|
} |
Loading…
Reference in new issue