1: var curry_test;
2: var tests = function(num) {
3: if (typeof num === typeof undefined) num = +Infinity;
4: var ts = [
5: curry_test = function() {
6: // Use uncurried take and map, since we're testing curry!
7: var take = function(n, stream) {
8: var result = [];
9: for (var i = 0; i < n; i++) result.push(stream());
10: return result;
11: };
12: var map = function(f, comb) {
13: return function() {
14: return f(comb());
15: };
16: };
17: var args;
18: var start = 'var a = c(function(';
19: var mid = ') { return ';
20: var end = '; })';
21: var s;
22: var i = 1;
23: return function() {
24: args = take(i, map(
25: function(x) { return take(x+1, constant('b')).join(''); },
26: counter()
27: ));
28: s = start + args.join(', ') + mid + args.join(' + ') + end;
29: eval(s);
30: var f = a;
31: for (var j = 1; j < args.length; j++) f = f(1);
32: var val = f(1);
33: if (
34: typeof val !== typeof 1 ||
35: val != args.length
36: ) return 'curry';
37: i = i+1 % 1000;
38: };
39: }, // curry
40: function() {
41: var summer = function() {
42: var result = 0;
43: for (var i = 0; i < arguments.length; i++) result += arguments[i];
44: return result;
45: };
46: var i = 0;
47: return function() {
48: var args = [];
49: for (var j = 0; j < i; j++) args.push(1);
50: var val = apply(summer, args);
51: if (
52: typeof val !== typeof 0 ||
53: val !== i
54: ) return 'apply';
55: };
56: }, // apply
57: function() {
58: var i = 0;
59: return function() {
60: var a = Math.random() * i;
61: var b = Math.random() * i;
62: if (plus(a, b) !== a + b) return 'plus';
63: i++;
64: };
65: }, // plus
66: function() {
67: var i = 0;
68: return function() {
69: var a = Math.random() * i;
70: if (negate(a) !== a * -1) return 'negate';
71: i++;
72: };
73: }, // negate
74: function() {
75: var i = 0;
76: return function() {
77: var a = Math.random() * i;
78: var b = Math.random() * i;
79: if (multiply(a, b) !== a * b) return 'multiply';
80: i++;
81: };
82: }, // multiply
83: function() {
84: var i = 1;
85: return function() {
86: var a = Math.random() * i;
87: var b = (1 - Math.random()) * i; // Avoids division by zero
88: if (divide(a, b) !== a / b) return 'divide';
89: i++;
90: };
91: }, // divide
92: function() {
93: var i = 1;
94: return function() {
95: var a = Math.ceil(Math.random() * i);
96: var b = Math.ceil((1 - Math.random()) * i);
97: if (modulus(a, b) !== a % b) return 'modulus';
98: i++;
99: };
100: }, // modulus
101: function() {
102: var i = 1;
103: return function() {
104: var arr = take(i, counter());
105: for (var j = 0; j < i; j++) {
106: if (
107: subscript(arr, j) !== arr[j] ||
108: subscript(arr, j) !== j
109: ) return 'subscript';
110: }
111: i++;
112: };
113: }, // subscript
114: function() {
115: var i = 0;
116: return function() {
117: var a = take(i, Math.random);
118: var b = take(i, Math.random);
119: if (!array_compare(catenate(a, b), a.concat(b))) return 'catenate';
120: i++;
121: };
122: }, // catenate
123: function() {
124: var i = 1;
125: return function() {
126: var head = Math.random();
127: var tail = take(i, Math.random);
128: if (!array_compare(cons(head, tail), [head, tail])) return 'cons';
129: };
130: }, // cons
131: function() {
132: return function() {
133: var bit = Math.round(Math.random());
134: if (choose_direction(bit) !== (2 * bit) - 1) return 'choose_direction';
135: };
136: }, // choose_direction
137: function() {
138: var i = 1;
139: return function() {
140: var base = Math.ceil((1.1 - Math.random()) * i);
141: var arr = take(i, map(Math.floor, map(multiply(base), Math.random)));
142: var result = 0;
143: for (var j = 0; j < arr.length; j++) result = (base * result) + arr[j];
144: while (arr.length > 1 && arr[0] === 0) arr.shift();
145: if (!array_compare(rebase(result, base), arr)) return 'rebase';
146: i = (i + 1) % 13 + 1; // "result" loses precision once we hit about 13^13
147: };
148: }, // rebase
149: function() {
150: var i = 0;
151: return function() {
152: var arr = take(i, zip_with(cons, product(plus, counter(), Math.random), Math.random));
153: var limit = Math.round(Math.random() * i);
154: var pruned = tagged_pruner(arr, limit);
155: while (arr.length > limit) arr.shift();
156: if (!array_compare(pruned, arr)) return 'tagged_pruner';
157: i++;
158: };
159: }, // tagged_pruner
160: function() {
161: var i = 0;
162: return function() {
163: var arr = [];
164: for (var j = 0; j < Math.round(i*(1+Math.random())); j++) arr.push(Math.random());
165: var amount = Math.round(Math.random()*i);
166: var k = 0;
167: var taken = take(amount, function() { return arr[k++]; });
168: while (arr.length > amount) arr.pop();
169: if (!array_compare(arr, taken)) return 'take';
170: i++;
171: };
172: }, // take
173: function() {
174: var dimensions = 2;
175: return function() {
176: var coords = take(dimensions, Math.random);
177: var length = 0;
178: coords.forEach(function(x) { length = Math.sqrt(length*length + x*x); });
179: coords.map(function(x) { return x / length; });
180: };
181: }, // cartesian_from_polar
182: function() {
183: var i = 0;
184: return function() {
185: var val = Math.random();
186: var arr = [];
187: for (var j = 0; j < i; j++) arr.push(val);
188: if (!array_compare(times(i, val), arr)) return 'times';
189: i++;
190: };
191: }, // times
192: function() {
193: var i = 0;
194: return function() {/*
195: var arr = take(Math.pow(2, i)+(3*i), delayer(take(i, random_bits()), zeros()));
196: var m = {pc: 0, mem: arr, w: 2};
197: var w = Math.max(1, Math.round(Math.random()*i));
198: var result = bitbitjump_step()
199: if (!array_compare())
200: i++;
201: */};
202: }, // bitbitjump_step
203: function() {
204: return function() {
205:
206: };
207: }, // bbj_io
208: function() {
209: return function() {
210:
211: };
212: }, // bbj_outputter*/
213: function() {
214: var con;
215: var i = 0;
216: return function() {
217: con = constant(i);
218: for (var j = 0; j < 10; j++) {
219: if (con() !== i) return 'constant';
220: }
221: i++;
222: };
223: }, // constant
224: function() {
225: var z = zeros();
226: return function() {
227: if (z() !== 0) return 'zeros';
228: };
229: }, // zeros
230: function() {
231: var o = ones();
232: return function() {
233: if (o() !== 1) return 'ones';
234: };
235: }, // ones
236: function() {
237: var stream = ones();
238: var reducer = reduce(0, plus, stream);
239: var i = 0;
240: return function () {
241: if (reducer() !== i) return 'reduce';
242: i++;
243: };
244: }, // reduce
245: function() {
246: var count = counter();
247: var i = 0;
248: return function() {
249: if (count() !== i) return 'counter';
250: i++;
251: };
252: }, // counter
253: function() {
254: var h = hoard(counter());
255: var arr = [];
256: var t;
257: var i = 0;
258: return function () {
259: t = h();
260: for (var j = 0; j < arr.length; j++) {
261: if (arr[j] !== t[j]) return 'hoard';
262: }
263: arr.push(i);
264: i++;
265: };
266: }, // hoard
267: function() {
268: var arr = take(500, Math.random);
269: var d = delayer(arr, counter());
270: var i = 0;
271: return function() {
272: if (i < 500 && d() !== arr[i]) return 'delayer';
273: if (i >= 500 && d() !== i - 500) return 'delayer';
274: i++;
275: };
276: }, // delayer
277: function() {
278: var d = delay(-1, counter());
279: var i = -1;
280: return function() {
281: if (d() !== i) return 'delay';
282: i++;
283: };
284: }, // delay
285: function() {
286: var m = map(multiply(2), counter());
287: var i = 0;
288: return function() {
289: if (m() !== 2*i) return 'map';
290: i++;
291: };
292: }, // map
293: function() {
294: var i = iterate(plus(1), 0);
295: var j = 1;
296: return function() {
297: if (i() !== j) return 'iterate';
298: j++;
299: };
300: }, // iterate
301: function() {
302: var s = simple();
303: var length = 0;
304: var val = -Infinity;
305: var temp;
306: return function() {
307: temp = s();
308: if (temp.length <= length && parseInt(temp.join(''), 2) <= val) return 'simple';
309: length = temp.length;
310: val = parseInt(temp.join(''), 2);
311: };
312: }, // simple
313: function() {
314: var f = fast([0, 1], bbj_outputter());
315: var val;
316: return function() {
317: val = f();
318: if (typeof val !== typeof []) return 'fast';
319: for (var j = 0; j < val.length; j++) {
320: if (val[j] !== 0 && val[j] !== 1) return 'fast';
321: }
322: };
323: }, // fast
324: function() {
325: var f = fast_bbj_out();
326: var val;
327: return function() {
328: val = f();
329: if (
330: typeof val !== typeof [] ||
331: typeof val.length !== typeof 0
332: ) return 'fast_bbj_out';
333: for (var j = 0; j < val.length; j++) {
334: if (j !== 0 && j !== 1) return 'fast_bbj_out';
335: }
336: };
337: }, // fast_bbj_out
338: function() {
339: var f = fast_bbj_in(ones());
340: var val;
341: return function() {
342: val = f();
343: if (
344: typeof val !== typeof [] ||
345: typeof val.length !== typeof 0
346: ) return 'fast_bbj_in';
347: for (var j = 0; j < val.length; j++) {
348: if (val[j] !== 0 && val[j] !== 1) return 'fast_bbj_in';
349: }
350: };
351: }, // fast_bbj_in
352: function() {
353: var u = uniform_randoms();
354: var val;
355: return function (i) {
356: val = u();
357: if (
358: typeof val !== typeof 0.5 ||
359: 0 > val ||
360: 1 <= val
361: ) return 'uniform_randoms';
362: };
363: }, // uniform_randoms
364: function() {
365: var n;
366: var r = scaled_randoms(
367: product(
368: function(x, y) { return n = x * y; },
369: counter(),
370: uniform_randoms()
371: )
372: );
373: var val;
374: return function() {
375: val = r();
376: if (
377: typeof val !== typeof 0.5 ||
378: 0 > val ||
379: (n <= val && n > 0)
380: ) return 'scaled_randoms';
381: };
382: }, // scaled_randoms
383: function() {
384: var n;
385: var i = random_ints(
386: product(
387: function(x, y) {
388: return n = x * y;
389: },
390: counter(),
391: scaled_randoms(counter())
392: )
393: );
394: var val;
395: return function() {
396: val = i();
397: if (
398: typeof val != typeof 0 ||
399: 0 > val ||
400: (n <= val && n > 0) ||
401: Math.floor(val) !== val
402: ) return 'random_ints';
403: };
404: }, // random_ints
405: function() {
406: var b = random_bits();
407: var val;
408: return function() {
409: val = b();
410: if (val !== 0 && val !== 1) return 'random_bits';
411: };
412: }, // random_bits
413: function() {
414: var a = random_steps();
415: var val;
416: return function() {
417: val = a();
418: if (val !== -1 && val !== 1) return 'random_steps';
419: };
420: }, // random_steps
421: function() {
422: var n;
423: var w = random_walker(
424: product(
425: function(x, y) { n = x * y; return n; },
426: counter(),
427: scaled_randoms(counter())
428: )
429: );
430: var current = w();
431: var val;
432: return function() {
433: val = w();
434: if (
435: typeof val !== typeof 0.5 ||
436: (val !== current + n && val !== current - n)
437: ) return 'random_walker';
438: current = val;
439: };
440: }, // random_walker
441: function() {
442: var w = random_walk();
443: var current = w();
444: var val;
445: return function() {
446: val = w();
447: if (
448: typeof val !== typeof 0 ||
449: (val !== current - 1 && val !== current + 1)
450: ) return 'random_walk';
451: current = val;
452: };
453: }, // random_walk
454: function() {
455: var p = product(plus, counter(), counter());
456: var m = map(multiply(2), counter());
457: return function() {
458: if (p() !== m()) return 'product';
459: };
460: }, // product
461: function() {
462: var p = make_pareto(ones());
463: var val;
464: return function() {
465: val = p();
466: if (
467: typeof val !== typeof 0 ||
468: val <= 0
469: ) return 'make_pareto';
470: };
471: }, // make_pareto
472: function() {
473: var p = pareto();
474: var val;
475: return function() {
476:
477: };
478: }, // pareto
479: function() {
480: var known = [];
481: var i = 0;
482: var stream = Math.random;
483: return function() {
484:
485: };
486: }, // tabu
487: function() {
488: var known = [];
489: var i = 1;
490: var stream = map(Math.round, product(multiply, function() { return i++; }, Math.random));
491: stream = innovator(stream);
492: return function() {
493: var val = stream();
494: if (known.indexOf(val) !== -1) return 'innovator';
495: known.push(val);
496: };
497: }, // innovator
498: ];
499:
500: var test_cases = ts.map(
501: function(f) {
502: return f();
503: }
504: );
505: var failed = [];
506: var result;
507: for (var i = 0; i < num; i++) test_cases.forEach(function(t) {
508: var result = t();
509: if (
510: typeof result !== typeof undefined &&
511: failed.indexOf(result) === -1
512: ) {
513: failed.push(result);
514: test_cases = [];
515: }
516: });
517:
518: if (failed.length) return failed;
519: return true;
520: };
521:
522: var countdown = function(n, s) {
523: while (n-- > 0) s();
524: };
525:
526: var p2 = function(a) {
527: p(a);
528: return a;
529: }
530:
531: var d;
532: var b = function(n) {countdown(n, filter(
533: function(a)
534: {
535: p(a);
536: return true;
537: },innovator(
538: //ratchet(
539: // tag(
540: // function(a)
541: // {
542: // return Math.sin(
543: // parseInt(
544: // a.join(''),
545: // 2
546: // )
547: // );
548: // },
549: fast_bbj_out()
550: // )
551: //)
552: )))};
Generated by git2html.