michael@0: function testBug504520Harder() { michael@0: // test 1024 similar cases michael@0: var vals = [1/0, -1/0, 0, 0/0]; michael@0: var ops = ["===", "!==", "==", "!=", "<", ">", "<=", ">="]; michael@0: for each (var x in vals) { michael@0: for each (var y in vals) { michael@0: for each (var op in ops) { michael@0: for each (var z in vals) { michael@0: // Assume eval is correct. This depends on the global michael@0: // Infinity property not having been reassigned. michael@0: var xz = eval(x + op + z); michael@0: var yz = eval(y + op + z); michael@0: michael@0: var arr = [x, x, x, x, x, x, x, x, x, y]; michael@0: assertEq(arr.length > 9, true); michael@0: var expected = [xz, xz, xz, xz, xz, xz, xz, xz, xz, yz]; michael@0: michael@0: // ?: looks superfluous but that's what we're testing here michael@0: var fun = eval( michael@0: '(function (arr, results) {\n' + michael@0: ' for (let i = 0; i < arr.length; i++)\n' + michael@0: ' results.push(arr[i]' + op + z + ' ? "true" : "false");\n' + michael@0: '});\n'); michael@0: var actual = []; michael@0: fun(arr, actual); michael@0: print(x, y, op, z); michael@0: assertEq("" + actual, "" + expected); michael@0: } michael@0: } michael@0: } michael@0: } michael@0: } michael@0: testBug504520Harder();