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