1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/basic/testComparisons.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,988 @@ 1.4 +function testComparisons() 1.5 +{ 1.6 + // All the special values from each of the types in 1.7 + // ECMA-262, 3rd ed. section 8 1.8 + var undefinedType, nullType, booleanType, stringType, numberType, objectType; 1.9 + 1.10 + var types = []; 1.11 + types[undefinedType = 0] = "Undefined"; 1.12 + types[nullType = 1] = "Null"; 1.13 + types[booleanType = 2] = "Boolean"; 1.14 + types[stringType = 3] = "String"; 1.15 + types[numberType = 4] = "Number"; 1.16 + types[objectType = 5] = "Object"; 1.17 + 1.18 + var JSVAL_INT_MIN = -Math.pow(2, 30); 1.19 + var JSVAL_INT_MAX = Math.pow(2, 30) - 1; 1.20 + 1.21 + // Values from every ES3 type, hitting all the edge-case and special values 1.22 + // that can be dreamed up 1.23 + var values = 1.24 + { 1.25 + "undefined": 1.26 + { 1.27 + value: function() { return undefined; }, 1.28 + type: undefinedType 1.29 + }, 1.30 + "null": 1.31 + { 1.32 + value: function() { return null; }, 1.33 + type: nullType 1.34 + }, 1.35 + "true": 1.36 + { 1.37 + value: function() { return true; }, 1.38 + type: booleanType 1.39 + }, 1.40 + "false": 1.41 + { 1.42 + value: function() { return false; }, 1.43 + type: booleanType 1.44 + }, 1.45 + '""': 1.46 + { 1.47 + value: function() { return ""; }, 1.48 + type: stringType 1.49 + }, 1.50 + '"a"': 1.51 + { 1.52 + // a > [, for string-object comparisons 1.53 + value: function() { return "a"; }, 1.54 + type: stringType 1.55 + }, 1.56 + '"Z"': 1.57 + { 1.58 + // Z < [, for string-object comparisons 1.59 + value: function() { return "Z"; }, 1.60 + type: stringType 1.61 + }, 1.62 + "0": 1.63 + { 1.64 + value: function() { return 0; }, 1.65 + type: numberType 1.66 + }, 1.67 + "-0": 1.68 + { 1.69 + value: function() { return -0; }, 1.70 + type: numberType 1.71 + }, 1.72 + "1": 1.73 + { 1.74 + value: function() { return 1; }, 1.75 + type: numberType 1.76 + }, 1.77 + "Math.E": 1.78 + { 1.79 + value: function() { return Math.E; }, 1.80 + type: numberType 1.81 + }, 1.82 + "JSVAL_INT_MIN - 1": 1.83 + { 1.84 + value: function() { return JSVAL_INT_MIN - 1; }, 1.85 + type: numberType 1.86 + }, 1.87 + "JSVAL_INT_MIN": 1.88 + { 1.89 + value: function() { return JSVAL_INT_MIN; }, 1.90 + type: numberType 1.91 + }, 1.92 + "JSVAL_INT_MIN + 1": 1.93 + { 1.94 + value: function() { return JSVAL_INT_MIN + 1; }, 1.95 + type: numberType 1.96 + }, 1.97 + "JSVAL_INT_MAX - 1": 1.98 + { 1.99 + value: function() { return JSVAL_INT_MAX - 1; }, 1.100 + type: numberType 1.101 + }, 1.102 + "JSVAL_INT_MAX": 1.103 + { 1.104 + value: function() { return JSVAL_INT_MAX; }, 1.105 + type: numberType 1.106 + }, 1.107 + "JSVAL_INT_MAX + 1": 1.108 + { 1.109 + value: function() { return JSVAL_INT_MAX + 1; }, 1.110 + type: numberType 1.111 + }, 1.112 + "Infinity": 1.113 + { 1.114 + value: function() { return Infinity; }, 1.115 + type: numberType 1.116 + }, 1.117 + "-Infinity": 1.118 + { 1.119 + value: function() { return -Infinity; }, 1.120 + type: numberType 1.121 + }, 1.122 + "NaN": 1.123 + { 1.124 + value: function() { return NaN; }, 1.125 + type: numberType 1.126 + }, 1.127 + "{}": 1.128 + { 1.129 + value: function() { return {}; }, 1.130 + type: objectType 1.131 + }, 1.132 + "{ valueOf: undefined }": 1.133 + { 1.134 + value: function() { return { valueOf: undefined }; }, 1.135 + type: objectType 1.136 + }, 1.137 + "[]": 1.138 + { 1.139 + value: function() { return []; }, 1.140 + type: objectType 1.141 + }, 1.142 + '[""]': 1.143 + { 1.144 + value: function() { return [""]; }, 1.145 + type: objectType 1.146 + }, 1.147 + '["a"]': 1.148 + { 1.149 + value: function() { return ["a"]; }, 1.150 + type: objectType 1.151 + }, 1.152 + "[0]": 1.153 + { 1.154 + value: function() { return [0]; }, 1.155 + type: objectType 1.156 + } 1.157 + }; 1.158 + 1.159 + var orderOps = 1.160 + { 1.161 + "<": function(a, b) { return a < b; }, 1.162 + ">": function(a, b) { return a > b; }, 1.163 + "<=": function(a, b) { return a <= b; }, 1.164 + ">=": function(a, b) { return a >= b; } 1.165 + }; 1.166 + var eqOps = 1.167 + { 1.168 + "==": function(a, b) { return a == b; }, 1.169 + "!=": function(a, b) { return a != b; }, 1.170 + "===": function(a, b) { return a === b; }, 1.171 + "!==": function(a, b) { return a !== b; } 1.172 + }; 1.173 + 1.174 + 1.175 + var notEqualIncomparable = 1.176 + { 1.177 + eq: { "==": false, "!=": true, "===": false, "!==": true }, 1.178 + order: { "<": false, ">": false, "<=": false, ">=": false } 1.179 + }; 1.180 + var notEqualLessThan = 1.181 + { 1.182 + eq: { "==": false, "!=": true, "===": false, "!==": true }, 1.183 + order: { "<": true, ">": false, "<=": true, ">=": false } 1.184 + }; 1.185 + var notEqualGreaterThan = 1.186 + { 1.187 + eq: { "==": false, "!=": true, "===": false, "!==": true }, 1.188 + order: { "<": false, ">": true, "<=": false, ">=": true } 1.189 + }; 1.190 + var notEqualNorDifferent = 1.191 + { 1.192 + eq: { "==": false, "!=": true, "===": false, "!==": true }, 1.193 + order: { "<": false, ">": false, "<=": true, ">=": true } 1.194 + }; 1.195 + var strictlyEqual = 1.196 + { 1.197 + eq: { "==": true, "!=": false, "===": true, "!==": false }, 1.198 + order: { "<": false, ">": false, "<=": true, ">=": true } 1.199 + }; 1.200 + var looselyEqual = 1.201 + { 1.202 + eq: { "==": true, "!=": false, "===": false, "!==": true }, 1.203 + order: { "<": false, ">": false, "<=": true, ">=": true } 1.204 + }; 1.205 + var looselyEqualNotDifferent = 1.206 + { 1.207 + eq: { "==": true, "!=": false, "===": false, "!==": true }, 1.208 + order: { "<": false, ">": false, "<=": true, ">=": true } 1.209 + }; 1.210 + var looselyEqualIncomparable = 1.211 + { 1.212 + eq: { "==": true, "!=": false, "===": false, "!==": true }, 1.213 + order: { "<": false, ">": false, "<=": false, ">=": false } 1.214 + }; 1.215 + var strictlyEqualNotDifferent = 1.216 + { 1.217 + eq: { "==": true, "!=": false, "===": true, "!==": false }, 1.218 + order: { "<": false, ">": false, "<=": true, ">=": true } 1.219 + }; 1.220 + var strictlyEqualIncomparable = 1.221 + { 1.222 + eq: { "==": true, "!=": false, "===": true, "!==": false }, 1.223 + order: { "<": false, ">": false, "<=": false, ">=": false } 1.224 + }; 1.225 + 1.226 + var comparingZeroToSomething = 1.227 + { 1.228 + "undefined": notEqualIncomparable, 1.229 + "null": notEqualNorDifferent, 1.230 + "true": notEqualLessThan, 1.231 + "false": looselyEqual, 1.232 + '""': looselyEqualNotDifferent, 1.233 + '"a"': notEqualIncomparable, 1.234 + '"Z"': notEqualIncomparable, 1.235 + "0": strictlyEqual, 1.236 + "-0": strictlyEqual, 1.237 + "1": notEqualLessThan, 1.238 + "Math.E": notEqualLessThan, 1.239 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.240 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.241 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.242 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.243 + "JSVAL_INT_MAX": notEqualLessThan, 1.244 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.245 + "Infinity": notEqualLessThan, 1.246 + "-Infinity": notEqualGreaterThan, 1.247 + "NaN": notEqualIncomparable, 1.248 + "{}": notEqualIncomparable, 1.249 + "{ valueOf: undefined }": notEqualIncomparable, 1.250 + "[]": looselyEqual, 1.251 + '[""]': looselyEqual, 1.252 + '["a"]': notEqualIncomparable, 1.253 + "[0]": looselyEqual 1.254 + }; 1.255 + 1.256 + var comparingObjectOrObjectWithValueUndefined = 1.257 + { 1.258 + "undefined": notEqualIncomparable, 1.259 + "null": notEqualIncomparable, 1.260 + "true": notEqualIncomparable, 1.261 + "false": notEqualIncomparable, 1.262 + '""': notEqualGreaterThan, 1.263 + '"a"': notEqualLessThan, 1.264 + '"Z"': notEqualGreaterThan, 1.265 + "0": notEqualIncomparable, 1.266 + "-0": notEqualIncomparable, 1.267 + "1": notEqualIncomparable, 1.268 + "Math.E": notEqualIncomparable, 1.269 + "JSVAL_INT_MIN - 1": notEqualIncomparable, 1.270 + "JSVAL_INT_MIN": notEqualIncomparable, 1.271 + "JSVAL_INT_MIN + 1": notEqualIncomparable, 1.272 + "JSVAL_INT_MAX - 1": notEqualIncomparable, 1.273 + "JSVAL_INT_MAX": notEqualIncomparable, 1.274 + "JSVAL_INT_MAX + 1": notEqualIncomparable, 1.275 + "Infinity": notEqualIncomparable, 1.276 + "-Infinity": notEqualIncomparable, 1.277 + "NaN": notEqualIncomparable, 1.278 + "{}": notEqualNorDifferent, 1.279 + "{ valueOf: undefined }": notEqualNorDifferent, 1.280 + "[]": notEqualGreaterThan, 1.281 + '[""]': notEqualGreaterThan, 1.282 + '["a"]': notEqualLessThan, 1.283 + "[0]": notEqualGreaterThan 1.284 + }; 1.285 + 1.286 + // Constructed expected-value matrix 1.287 + var expected = 1.288 + { 1.289 + "undefined": 1.290 + { 1.291 + "undefined": strictlyEqualIncomparable, 1.292 + "null": looselyEqualIncomparable, 1.293 + "true": notEqualIncomparable, 1.294 + "false": notEqualIncomparable, 1.295 + '""': notEqualIncomparable, 1.296 + '"a"': notEqualIncomparable, 1.297 + '"Z"': notEqualIncomparable, 1.298 + "0": notEqualIncomparable, 1.299 + "-0": notEqualIncomparable, 1.300 + "1": notEqualIncomparable, 1.301 + "Math.E": notEqualIncomparable, 1.302 + "JSVAL_INT_MIN - 1": notEqualIncomparable, 1.303 + "JSVAL_INT_MIN": notEqualIncomparable, 1.304 + "JSVAL_INT_MIN + 1": notEqualIncomparable, 1.305 + "JSVAL_INT_MAX - 1": notEqualIncomparable, 1.306 + "JSVAL_INT_MAX": notEqualIncomparable, 1.307 + "JSVAL_INT_MAX + 1": notEqualIncomparable, 1.308 + "Infinity": notEqualIncomparable, 1.309 + "-Infinity": notEqualIncomparable, 1.310 + "NaN": notEqualIncomparable, 1.311 + "{}": notEqualIncomparable, 1.312 + "{ valueOf: undefined }": notEqualIncomparable, 1.313 + "[]": notEqualIncomparable, 1.314 + '[""]': notEqualIncomparable, 1.315 + '["a"]': notEqualIncomparable, 1.316 + "[0]": notEqualIncomparable 1.317 + }, 1.318 + "null": 1.319 + { 1.320 + "undefined": looselyEqualIncomparable, 1.321 + "null": strictlyEqualNotDifferent, 1.322 + "true": notEqualLessThan, 1.323 + "false": notEqualNorDifferent, 1.324 + '""': notEqualNorDifferent, 1.325 + '"a"': notEqualIncomparable, 1.326 + '"Z"': notEqualIncomparable, 1.327 + "0": notEqualNorDifferent, 1.328 + "-0": notEqualNorDifferent, 1.329 + "1": notEqualLessThan, 1.330 + "Math.E": notEqualLessThan, 1.331 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.332 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.333 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.334 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.335 + "JSVAL_INT_MAX": notEqualLessThan, 1.336 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.337 + "Infinity": notEqualLessThan, 1.338 + "-Infinity": notEqualGreaterThan, 1.339 + "NaN": notEqualIncomparable, 1.340 + "{}": notEqualIncomparable, 1.341 + "{ valueOf: undefined }": notEqualIncomparable, 1.342 + "[]": notEqualNorDifferent, 1.343 + '[""]': notEqualNorDifferent, 1.344 + '["a"]': notEqualIncomparable, 1.345 + "[0]": notEqualNorDifferent 1.346 + }, 1.347 + "true": 1.348 + { 1.349 + "undefined": notEqualIncomparable, 1.350 + "null": notEqualGreaterThan, 1.351 + "true": strictlyEqual, 1.352 + "false": notEqualGreaterThan, 1.353 + '""': notEqualGreaterThan, 1.354 + '"a"': notEqualIncomparable, 1.355 + '"Z"': notEqualIncomparable, 1.356 + "0": notEqualGreaterThan, 1.357 + "-0": notEqualGreaterThan, 1.358 + "1": looselyEqual, 1.359 + "Math.E": notEqualLessThan, 1.360 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.361 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.362 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.363 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.364 + "JSVAL_INT_MAX": notEqualLessThan, 1.365 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.366 + "Infinity": notEqualLessThan, 1.367 + "-Infinity": notEqualGreaterThan, 1.368 + "NaN": notEqualIncomparable, 1.369 + "{}": notEqualIncomparable, 1.370 + "{ valueOf: undefined }": notEqualIncomparable, 1.371 + "[]": notEqualGreaterThan, 1.372 + '[""]': notEqualGreaterThan, 1.373 + '["a"]': notEqualIncomparable, 1.374 + "[0]": notEqualGreaterThan 1.375 + }, 1.376 + "false": 1.377 + { 1.378 + "undefined": notEqualIncomparable, 1.379 + "null": notEqualNorDifferent, 1.380 + "true": notEqualLessThan, 1.381 + "false": strictlyEqual, 1.382 + '""': looselyEqualNotDifferent, 1.383 + '"a"': notEqualIncomparable, 1.384 + '"Z"': notEqualIncomparable, 1.385 + "0": looselyEqual, 1.386 + "-0": looselyEqual, 1.387 + "1": notEqualLessThan, 1.388 + "Math.E": notEqualLessThan, 1.389 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.390 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.391 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.392 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.393 + "JSVAL_INT_MAX": notEqualLessThan, 1.394 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.395 + "Infinity": notEqualLessThan, 1.396 + "-Infinity": notEqualGreaterThan, 1.397 + "NaN": notEqualIncomparable, 1.398 + "{}": notEqualIncomparable, 1.399 + "{ valueOf: undefined }": notEqualIncomparable, 1.400 + "[]": looselyEqual, 1.401 + '[""]': looselyEqual, 1.402 + '["a"]': notEqualIncomparable, 1.403 + "[0]": looselyEqual 1.404 + }, 1.405 + '""': 1.406 + { 1.407 + "undefined": notEqualIncomparable, 1.408 + "null": notEqualNorDifferent, 1.409 + "true": notEqualLessThan, 1.410 + "false": looselyEqual, 1.411 + '""': strictlyEqual, 1.412 + '"a"': notEqualLessThan, 1.413 + '"Z"': notEqualLessThan, 1.414 + "0": looselyEqual, 1.415 + "-0": looselyEqual, 1.416 + "1": notEqualLessThan, 1.417 + "Math.E": notEqualLessThan, 1.418 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.419 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.420 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.421 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.422 + "JSVAL_INT_MAX": notEqualLessThan, 1.423 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.424 + "Infinity": notEqualLessThan, 1.425 + "-Infinity": notEqualGreaterThan, 1.426 + "NaN": notEqualIncomparable, 1.427 + "{}": notEqualLessThan, 1.428 + "{ valueOf: undefined }": notEqualLessThan, 1.429 + "[]": looselyEqual, 1.430 + '[""]': looselyEqual, 1.431 + '["a"]': notEqualLessThan, 1.432 + "[0]": notEqualLessThan 1.433 + }, 1.434 + '"a"': 1.435 + { 1.436 + "undefined": notEqualIncomparable, 1.437 + "null": notEqualIncomparable, 1.438 + "true": notEqualIncomparable, 1.439 + "false": notEqualIncomparable, 1.440 + '""': notEqualGreaterThan, 1.441 + '"a"': strictlyEqual, 1.442 + '"Z"': notEqualGreaterThan, 1.443 + "0": notEqualIncomparable, 1.444 + "-0": notEqualIncomparable, 1.445 + "1": notEqualIncomparable, 1.446 + "Math.E": notEqualIncomparable, 1.447 + "JSVAL_INT_MIN - 1": notEqualIncomparable, 1.448 + "JSVAL_INT_MIN": notEqualIncomparable, 1.449 + "JSVAL_INT_MIN + 1": notEqualIncomparable, 1.450 + "JSVAL_INT_MAX - 1": notEqualIncomparable, 1.451 + "JSVAL_INT_MAX": notEqualIncomparable, 1.452 + "JSVAL_INT_MAX + 1": notEqualIncomparable, 1.453 + "Infinity": notEqualIncomparable, 1.454 + "-Infinity": notEqualIncomparable, 1.455 + "NaN": notEqualIncomparable, 1.456 + "{}": notEqualGreaterThan, 1.457 + "{ valueOf: undefined }": notEqualGreaterThan, 1.458 + "[]": notEqualGreaterThan, 1.459 + '[""]': notEqualGreaterThan, 1.460 + '["a"]': looselyEqualNotDifferent, 1.461 + "[0]": notEqualGreaterThan 1.462 + }, 1.463 + '"Z"': 1.464 + { 1.465 + "undefined": notEqualIncomparable, 1.466 + "null": notEqualIncomparable, 1.467 + "true": notEqualIncomparable, 1.468 + "false": notEqualIncomparable, 1.469 + '""': notEqualGreaterThan, 1.470 + '"a"': notEqualLessThan, 1.471 + '"Z"': strictlyEqual, 1.472 + "0": notEqualIncomparable, 1.473 + "-0": notEqualIncomparable, 1.474 + "1": notEqualIncomparable, 1.475 + "Math.E": notEqualIncomparable, 1.476 + "JSVAL_INT_MIN - 1": notEqualIncomparable, 1.477 + "JSVAL_INT_MIN": notEqualIncomparable, 1.478 + "JSVAL_INT_MIN + 1": notEqualIncomparable, 1.479 + "JSVAL_INT_MAX - 1": notEqualIncomparable, 1.480 + "JSVAL_INT_MAX": notEqualIncomparable, 1.481 + "JSVAL_INT_MAX + 1": notEqualIncomparable, 1.482 + "Infinity": notEqualIncomparable, 1.483 + "-Infinity": notEqualIncomparable, 1.484 + "NaN": notEqualIncomparable, 1.485 + "{}": notEqualLessThan, 1.486 + "{ valueOf: undefined }": notEqualLessThan, 1.487 + "[]": notEqualGreaterThan, 1.488 + '[""]': notEqualGreaterThan, 1.489 + '["a"]': notEqualLessThan, 1.490 + "[0]": notEqualGreaterThan 1.491 + }, 1.492 + "0": comparingZeroToSomething, 1.493 + "-0": comparingZeroToSomething, 1.494 + "1": 1.495 + { 1.496 + "undefined": notEqualIncomparable, 1.497 + "null": notEqualGreaterThan, 1.498 + "true": looselyEqual, 1.499 + "false": notEqualGreaterThan, 1.500 + '""': notEqualGreaterThan, 1.501 + '"a"': notEqualIncomparable, 1.502 + '"Z"': notEqualIncomparable, 1.503 + "0": notEqualGreaterThan, 1.504 + "-0": notEqualGreaterThan, 1.505 + "1": strictlyEqual, 1.506 + "Math.E": notEqualLessThan, 1.507 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.508 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.509 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.510 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.511 + "JSVAL_INT_MAX": notEqualLessThan, 1.512 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.513 + "Infinity": notEqualLessThan, 1.514 + "-Infinity": notEqualGreaterThan, 1.515 + "NaN": notEqualIncomparable, 1.516 + "{}": notEqualIncomparable, 1.517 + "{ valueOf: undefined }": notEqualIncomparable, 1.518 + "[]": notEqualGreaterThan, 1.519 + '[""]': notEqualGreaterThan, 1.520 + '["a"]': notEqualIncomparable, 1.521 + "[0]": notEqualGreaterThan 1.522 + }, 1.523 + "Math.E": 1.524 + { 1.525 + "undefined": notEqualIncomparable, 1.526 + "null": notEqualGreaterThan, 1.527 + "true": notEqualGreaterThan, 1.528 + "false": notEqualGreaterThan, 1.529 + '""': notEqualGreaterThan, 1.530 + '"a"': notEqualIncomparable, 1.531 + '"Z"': notEqualIncomparable, 1.532 + "0": notEqualGreaterThan, 1.533 + "-0": notEqualGreaterThan, 1.534 + "1": notEqualGreaterThan, 1.535 + "Math.E": strictlyEqual, 1.536 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.537 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.538 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.539 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.540 + "JSVAL_INT_MAX": notEqualLessThan, 1.541 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.542 + "Infinity": notEqualLessThan, 1.543 + "-Infinity": notEqualGreaterThan, 1.544 + "NaN": notEqualIncomparable, 1.545 + "{}": notEqualIncomparable, 1.546 + "{ valueOf: undefined }": notEqualIncomparable, 1.547 + "[]": notEqualGreaterThan, 1.548 + '[""]': notEqualGreaterThan, 1.549 + '["a"]': notEqualIncomparable, 1.550 + "[0]": notEqualGreaterThan 1.551 + }, 1.552 + "JSVAL_INT_MIN - 1": 1.553 + { 1.554 + "undefined": notEqualIncomparable, 1.555 + "null": notEqualLessThan, 1.556 + "true": notEqualLessThan, 1.557 + "false": notEqualLessThan, 1.558 + '""': notEqualLessThan, 1.559 + '"a"': notEqualIncomparable, 1.560 + '"Z"': notEqualIncomparable, 1.561 + "0": notEqualLessThan, 1.562 + "-0": notEqualLessThan, 1.563 + "1": notEqualLessThan, 1.564 + "Math.E": notEqualLessThan, 1.565 + "JSVAL_INT_MIN - 1": strictlyEqual, 1.566 + "JSVAL_INT_MIN": notEqualLessThan, 1.567 + "JSVAL_INT_MIN + 1": notEqualLessThan, 1.568 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.569 + "JSVAL_INT_MAX": notEqualLessThan, 1.570 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.571 + "Infinity": notEqualLessThan, 1.572 + "-Infinity": notEqualGreaterThan, 1.573 + "NaN": notEqualIncomparable, 1.574 + "{}": notEqualIncomparable, 1.575 + "{ valueOf: undefined }": notEqualIncomparable, 1.576 + "[]": notEqualLessThan, 1.577 + '[""]': notEqualLessThan, 1.578 + '["a"]': notEqualIncomparable, 1.579 + "[0]": notEqualLessThan 1.580 + }, 1.581 + "JSVAL_INT_MIN": 1.582 + { 1.583 + "undefined": notEqualIncomparable, 1.584 + "null": notEqualLessThan, 1.585 + "true": notEqualLessThan, 1.586 + "false": notEqualLessThan, 1.587 + '""': notEqualLessThan, 1.588 + '"a"': notEqualIncomparable, 1.589 + '"Z"': notEqualIncomparable, 1.590 + "0": notEqualLessThan, 1.591 + "-0": notEqualLessThan, 1.592 + "1": notEqualLessThan, 1.593 + "Math.E": notEqualLessThan, 1.594 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.595 + "JSVAL_INT_MIN": strictlyEqual, 1.596 + "JSVAL_INT_MIN + 1": notEqualLessThan, 1.597 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.598 + "JSVAL_INT_MAX": notEqualLessThan, 1.599 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.600 + "Infinity": notEqualLessThan, 1.601 + "-Infinity": notEqualGreaterThan, 1.602 + "NaN": notEqualIncomparable, 1.603 + "{}": notEqualIncomparable, 1.604 + "{ valueOf: undefined }": notEqualIncomparable, 1.605 + "[]": notEqualLessThan, 1.606 + '[""]': notEqualLessThan, 1.607 + '["a"]': notEqualIncomparable, 1.608 + "[0]": notEqualLessThan 1.609 + }, 1.610 + "JSVAL_INT_MIN + 1": 1.611 + { 1.612 + "undefined": notEqualIncomparable, 1.613 + "null": notEqualLessThan, 1.614 + "true": notEqualLessThan, 1.615 + "false": notEqualLessThan, 1.616 + '""': notEqualLessThan, 1.617 + '"a"': notEqualIncomparable, 1.618 + '"Z"': notEqualIncomparable, 1.619 + "0": notEqualLessThan, 1.620 + "-0": notEqualLessThan, 1.621 + "1": notEqualLessThan, 1.622 + "Math.E": notEqualLessThan, 1.623 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.624 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.625 + "JSVAL_INT_MIN + 1": strictlyEqual, 1.626 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.627 + "JSVAL_INT_MAX": notEqualLessThan, 1.628 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.629 + "Infinity": notEqualLessThan, 1.630 + "-Infinity": notEqualGreaterThan, 1.631 + "NaN": notEqualIncomparable, 1.632 + "{}": notEqualIncomparable, 1.633 + "{ valueOf: undefined }": notEqualIncomparable, 1.634 + "[]": notEqualLessThan, 1.635 + '[""]': notEqualLessThan, 1.636 + '["a"]': notEqualIncomparable, 1.637 + "[0]": notEqualLessThan 1.638 + }, 1.639 + "JSVAL_INT_MAX - 1": 1.640 + { 1.641 + "undefined": notEqualIncomparable, 1.642 + "null": notEqualGreaterThan, 1.643 + "true": notEqualGreaterThan, 1.644 + "false": notEqualGreaterThan, 1.645 + '""': notEqualGreaterThan, 1.646 + '"a"': notEqualIncomparable, 1.647 + '"Z"': notEqualIncomparable, 1.648 + "0": notEqualGreaterThan, 1.649 + "-0": notEqualGreaterThan, 1.650 + "1": notEqualGreaterThan, 1.651 + "Math.E": notEqualGreaterThan, 1.652 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.653 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.654 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.655 + "JSVAL_INT_MAX - 1": strictlyEqual, 1.656 + "JSVAL_INT_MAX": notEqualLessThan, 1.657 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.658 + "Infinity": notEqualLessThan, 1.659 + "-Infinity": notEqualGreaterThan, 1.660 + "NaN": notEqualIncomparable, 1.661 + "{}": notEqualIncomparable, 1.662 + "{ valueOf: undefined }": notEqualIncomparable, 1.663 + "[]": notEqualGreaterThan, 1.664 + '[""]': notEqualGreaterThan, 1.665 + '["a"]': notEqualIncomparable, 1.666 + "[0]": notEqualGreaterThan 1.667 + }, 1.668 + "JSVAL_INT_MAX": 1.669 + { 1.670 + "undefined": notEqualIncomparable, 1.671 + "null": notEqualGreaterThan, 1.672 + "true": notEqualGreaterThan, 1.673 + "false": notEqualGreaterThan, 1.674 + '""': notEqualGreaterThan, 1.675 + '"a"': notEqualIncomparable, 1.676 + '"Z"': notEqualIncomparable, 1.677 + "0": notEqualGreaterThan, 1.678 + "-0": notEqualGreaterThan, 1.679 + "1": notEqualGreaterThan, 1.680 + "Math.E": notEqualGreaterThan, 1.681 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.682 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.683 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.684 + "JSVAL_INT_MAX - 1": notEqualGreaterThan, 1.685 + "JSVAL_INT_MAX": strictlyEqual, 1.686 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.687 + "Infinity": notEqualLessThan, 1.688 + "-Infinity": notEqualGreaterThan, 1.689 + "NaN": notEqualIncomparable, 1.690 + "{}": notEqualIncomparable, 1.691 + "{ valueOf: undefined }": notEqualIncomparable, 1.692 + "[]": notEqualGreaterThan, 1.693 + '[""]': notEqualGreaterThan, 1.694 + '["a"]': notEqualIncomparable, 1.695 + "[0]": notEqualGreaterThan 1.696 + }, 1.697 + "JSVAL_INT_MAX + 1": 1.698 + { 1.699 + "undefined": notEqualIncomparable, 1.700 + "null": notEqualGreaterThan, 1.701 + "true": notEqualGreaterThan, 1.702 + "false": notEqualGreaterThan, 1.703 + '""': notEqualGreaterThan, 1.704 + '"a"': notEqualIncomparable, 1.705 + '"Z"': notEqualIncomparable, 1.706 + "0": notEqualGreaterThan, 1.707 + "-0": notEqualGreaterThan, 1.708 + "1": notEqualGreaterThan, 1.709 + "Math.E": notEqualGreaterThan, 1.710 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.711 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.712 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.713 + "JSVAL_INT_MAX - 1": notEqualGreaterThan, 1.714 + "JSVAL_INT_MAX": notEqualGreaterThan, 1.715 + "JSVAL_INT_MAX + 1": strictlyEqual, 1.716 + "Infinity": notEqualLessThan, 1.717 + "-Infinity": notEqualGreaterThan, 1.718 + "NaN": notEqualIncomparable, 1.719 + "{}": notEqualIncomparable, 1.720 + "{ valueOf: undefined }": notEqualIncomparable, 1.721 + "[]": notEqualGreaterThan, 1.722 + '[""]': notEqualGreaterThan, 1.723 + '["a"]': notEqualIncomparable, 1.724 + "[0]": notEqualGreaterThan 1.725 + }, 1.726 + "Infinity": 1.727 + { 1.728 + "undefined": notEqualIncomparable, 1.729 + "null": notEqualGreaterThan, 1.730 + "true": notEqualGreaterThan, 1.731 + "false": notEqualGreaterThan, 1.732 + '""': notEqualGreaterThan, 1.733 + '"a"': notEqualIncomparable, 1.734 + '"Z"': notEqualIncomparable, 1.735 + "0": notEqualGreaterThan, 1.736 + "-0": notEqualGreaterThan, 1.737 + "1": notEqualGreaterThan, 1.738 + "Math.E": notEqualGreaterThan, 1.739 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.740 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.741 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.742 + "JSVAL_INT_MAX - 1": notEqualGreaterThan, 1.743 + "JSVAL_INT_MAX": notEqualGreaterThan, 1.744 + "JSVAL_INT_MAX + 1": notEqualGreaterThan, 1.745 + "Infinity": strictlyEqual, 1.746 + "-Infinity": notEqualGreaterThan, 1.747 + "NaN": notEqualIncomparable, 1.748 + "{}": notEqualIncomparable, 1.749 + "{ valueOf: undefined }": notEqualIncomparable, 1.750 + "[]": notEqualGreaterThan, 1.751 + '[""]': notEqualGreaterThan, 1.752 + '["a"]': notEqualIncomparable, 1.753 + "[0]": notEqualGreaterThan 1.754 + }, 1.755 + "-Infinity": 1.756 + { 1.757 + "undefined": notEqualIncomparable, 1.758 + "null": notEqualLessThan, 1.759 + "true": notEqualLessThan, 1.760 + "false": notEqualLessThan, 1.761 + '""': notEqualLessThan, 1.762 + '"a"': notEqualIncomparable, 1.763 + '"Z"': notEqualIncomparable, 1.764 + "0": notEqualLessThan, 1.765 + "-0": notEqualLessThan, 1.766 + "1": notEqualLessThan, 1.767 + "Math.E": notEqualLessThan, 1.768 + "JSVAL_INT_MIN - 1": notEqualLessThan, 1.769 + "JSVAL_INT_MIN": notEqualLessThan, 1.770 + "JSVAL_INT_MIN + 1": notEqualLessThan, 1.771 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.772 + "JSVAL_INT_MAX": notEqualLessThan, 1.773 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.774 + "Infinity": notEqualLessThan, 1.775 + "-Infinity": strictlyEqual, 1.776 + "NaN": notEqualIncomparable, 1.777 + "{}": notEqualIncomparable, 1.778 + "{ valueOf: undefined }": notEqualIncomparable, 1.779 + "[]": notEqualLessThan, 1.780 + '[""]': notEqualLessThan, 1.781 + '["a"]': notEqualIncomparable, 1.782 + "[0]": notEqualLessThan 1.783 + }, 1.784 + "NaN": 1.785 + { 1.786 + "undefined": notEqualIncomparable, 1.787 + "null": notEqualIncomparable, 1.788 + "true": notEqualIncomparable, 1.789 + "false": notEqualIncomparable, 1.790 + '""': notEqualIncomparable, 1.791 + '"a"': notEqualIncomparable, 1.792 + '"Z"': notEqualIncomparable, 1.793 + "0": notEqualIncomparable, 1.794 + "-0": notEqualIncomparable, 1.795 + "1": notEqualIncomparable, 1.796 + "Math.E": notEqualIncomparable, 1.797 + "JSVAL_INT_MIN - 1": notEqualIncomparable, 1.798 + "JSVAL_INT_MIN": notEqualIncomparable, 1.799 + "JSVAL_INT_MIN + 1": notEqualIncomparable, 1.800 + "JSVAL_INT_MAX - 1": notEqualIncomparable, 1.801 + "JSVAL_INT_MAX": notEqualIncomparable, 1.802 + "JSVAL_INT_MAX + 1": notEqualIncomparable, 1.803 + "Infinity": notEqualIncomparable, 1.804 + "-Infinity": notEqualIncomparable, 1.805 + "NaN": notEqualIncomparable, 1.806 + "{}": notEqualIncomparable, 1.807 + "{ valueOf: undefined }": notEqualIncomparable, 1.808 + "[]": notEqualIncomparable, 1.809 + '[""]': notEqualIncomparable, 1.810 + '["a"]': notEqualIncomparable, 1.811 + "[0]": notEqualIncomparable 1.812 + }, 1.813 + "{}": comparingObjectOrObjectWithValueUndefined, 1.814 + "{ valueOf: undefined }": comparingObjectOrObjectWithValueUndefined, 1.815 + "[]": 1.816 + { 1.817 + "undefined": notEqualIncomparable, 1.818 + "null": notEqualNorDifferent, 1.819 + "true": notEqualLessThan, 1.820 + "false": looselyEqual, 1.821 + '""': looselyEqual, 1.822 + '"a"': notEqualLessThan, 1.823 + '"Z"': notEqualLessThan, 1.824 + "0": looselyEqual, 1.825 + "-0": looselyEqual, 1.826 + "1": notEqualLessThan, 1.827 + "Math.E": notEqualLessThan, 1.828 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.829 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.830 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.831 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.832 + "JSVAL_INT_MAX": notEqualLessThan, 1.833 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.834 + "Infinity": notEqualLessThan, 1.835 + "-Infinity": notEqualGreaterThan, 1.836 + "NaN": notEqualIncomparable, 1.837 + "{}": notEqualLessThan, 1.838 + "{ valueOf: undefined }": notEqualLessThan, 1.839 + "[]": notEqualNorDifferent, 1.840 + '[""]': notEqualNorDifferent, 1.841 + '["a"]': notEqualLessThan, 1.842 + "[0]": notEqualLessThan 1.843 + }, 1.844 + '[""]': 1.845 + { 1.846 + "undefined": notEqualIncomparable, 1.847 + "null": notEqualNorDifferent, 1.848 + "true": notEqualLessThan, 1.849 + "false": looselyEqual, 1.850 + '""': looselyEqual, 1.851 + '"a"': notEqualLessThan, 1.852 + '"Z"': notEqualLessThan, 1.853 + "0": looselyEqual, 1.854 + "-0": looselyEqual, 1.855 + "1": notEqualLessThan, 1.856 + "Math.E": notEqualLessThan, 1.857 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.858 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.859 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.860 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.861 + "JSVAL_INT_MAX": notEqualLessThan, 1.862 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.863 + "Infinity": notEqualLessThan, 1.864 + "-Infinity": notEqualGreaterThan, 1.865 + "NaN": notEqualIncomparable, 1.866 + "{}": notEqualLessThan, 1.867 + "{ valueOf: undefined }": notEqualLessThan, 1.868 + "[]": notEqualNorDifferent, 1.869 + '[""]': notEqualNorDifferent, 1.870 + '["a"]': notEqualLessThan, 1.871 + "[0]": notEqualLessThan 1.872 + }, 1.873 + '["a"]': 1.874 + { 1.875 + "undefined": notEqualIncomparable, 1.876 + "null": notEqualIncomparable, 1.877 + "true": notEqualIncomparable, 1.878 + "false": notEqualIncomparable, 1.879 + '""': notEqualGreaterThan, 1.880 + '"a"': looselyEqual, 1.881 + '"Z"': notEqualGreaterThan, 1.882 + "0": notEqualIncomparable, 1.883 + "-0": notEqualIncomparable, 1.884 + "1": notEqualIncomparable, 1.885 + "Math.E": notEqualIncomparable, 1.886 + "JSVAL_INT_MIN - 1": notEqualIncomparable, 1.887 + "JSVAL_INT_MIN": notEqualIncomparable, 1.888 + "JSVAL_INT_MIN + 1": notEqualIncomparable, 1.889 + "JSVAL_INT_MAX - 1": notEqualIncomparable, 1.890 + "JSVAL_INT_MAX": notEqualIncomparable, 1.891 + "JSVAL_INT_MAX + 1": notEqualIncomparable, 1.892 + "Infinity": notEqualIncomparable, 1.893 + "-Infinity": notEqualIncomparable, 1.894 + "NaN": notEqualIncomparable, 1.895 + "{}": notEqualGreaterThan, 1.896 + "{ valueOf: undefined }": notEqualGreaterThan, 1.897 + "[]": notEqualGreaterThan, 1.898 + '[""]': notEqualGreaterThan, 1.899 + '["a"]': notEqualNorDifferent, 1.900 + "[0]": notEqualGreaterThan 1.901 + }, 1.902 + "[0]": 1.903 + { 1.904 + "undefined": notEqualIncomparable, 1.905 + "null": notEqualNorDifferent, 1.906 + "true": notEqualLessThan, 1.907 + "false": looselyEqual, 1.908 + '""': notEqualGreaterThan, 1.909 + '"a"': notEqualLessThan, 1.910 + '"Z"': notEqualLessThan, 1.911 + "0": looselyEqual, 1.912 + "-0": looselyEqual, 1.913 + "1": notEqualLessThan, 1.914 + "Math.E": notEqualLessThan, 1.915 + "JSVAL_INT_MIN - 1": notEqualGreaterThan, 1.916 + "JSVAL_INT_MIN": notEqualGreaterThan, 1.917 + "JSVAL_INT_MIN + 1": notEqualGreaterThan, 1.918 + "JSVAL_INT_MAX - 1": notEqualLessThan, 1.919 + "JSVAL_INT_MAX": notEqualLessThan, 1.920 + "JSVAL_INT_MAX + 1": notEqualLessThan, 1.921 + "Infinity": notEqualLessThan, 1.922 + "-Infinity": notEqualGreaterThan, 1.923 + "NaN": notEqualIncomparable, 1.924 + "{}": notEqualLessThan, 1.925 + "{ valueOf: undefined }": notEqualLessThan, 1.926 + "[]": notEqualGreaterThan, 1.927 + '[""]': notEqualGreaterThan, 1.928 + '["a"]': notEqualLessThan, 1.929 + "[0]": notEqualNorDifferent 1.930 + } 1.931 + }; 1.932 + 1.933 + 1.934 + 1.935 + var failures = []; 1.936 + function fail(a, ta, b, tb, ex, ac, op) 1.937 + { 1.938 + failures.push("(" + a + " " + op + " " + b + ") wrong: " + 1.939 + "expected " + ex + ", got " + ac + 1.940 + " (types " + types[ta] + ", " + types[tb] + ")"); 1.941 + } 1.942 + 1.943 + var result = false; 1.944 + for (var i in values) 1.945 + { 1.946 + for (var j in values) 1.947 + { 1.948 + // Constants, so hoist to help JIT know that 1.949 + var vala = values[i], valb = values[j]; 1.950 + var a = vala.value(), b = valb.value(); 1.951 + 1.952 + for (var opname in orderOps) 1.953 + { 1.954 + var op = orderOps[opname]; 1.955 + var expect = expected[i][j].order[opname]; 1.956 + var failed = false; 1.957 + 1.958 + for (var iter = 0; iter < 5; iter++) 1.959 + { 1.960 + result = op(a, b); 1.961 + failed = failed || result !== expect; 1.962 + } 1.963 + 1.964 + if (failed) 1.965 + fail(i, vala.type, j, valb.type, expect, result, opname); 1.966 + } 1.967 + 1.968 + for (var opname in eqOps) 1.969 + { 1.970 + var op = eqOps[opname]; 1.971 + var expect = expected[i][j].eq[opname]; 1.972 + var failed = false; 1.973 + 1.974 + for (var iter = 0; iter < 5; iter++) 1.975 + { 1.976 + result = op(a, b); 1.977 + failed = failed || result !== expect; 1.978 + } 1.979 + 1.980 + if (failed) 1.981 + fail(i, vala.type, j, valb.type, expect, result, opname); 1.982 + } 1.983 + } 1.984 + } 1.985 + 1.986 + if (failures.length == 0) 1.987 + return "no failures reported!"; 1.988 + 1.989 + return "\n" + failures.join(",\n"); 1.990 +} 1.991 +assertEq(testComparisons(), "no failures reported!");