js/src/jit-test/tests/basic/testComparisons.js

changeset 0
6474c204b198
     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!");

mercurial