search-optimisation-streams: 345c0987554e1f4c498ae87959367143414094c6

     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.