| Index: test/mjsunit/array-sort.js
|
| ===================================================================
|
| --- test/mjsunit/array-sort.js (revision 8431)
|
| +++ test/mjsunit/array-sort.js (working copy)
|
| @@ -70,30 +70,59 @@
|
| a.sort();
|
| assertArrayEquals([-1000000000, -10000000000, -1000000001, 1000000000, 10000000000, 1000000001], a);
|
|
|
| + // Other cases are tested implicitly in TestSmiLexicographicCompare.
|
| +}
|
|
|
| - for (var xb = 1; xb <= 1000 * 1000 * 1000; xb *= 10) {
|
| +TestNumberSort();
|
| +
|
| +function TestSmiLexicographicCompare() {
|
| +
|
| + assertFalse(%_IsSmi(2147483648), 'Update test for >32 bit Smi');
|
| +
|
| + // Collect a list of interesting Smis.
|
| + var seen = {};
|
| + var smis = [];
|
| + function add(x) {
|
| + if (x | 0 == x) {
|
| + x = x | 0; // Canonicalizes to Smi if 32-bit signed and fits in Smi.
|
| + }
|
| + if (%_IsSmi(x) && !seen[x]) {
|
| + seen[x] = 1;
|
| + smis.push(x);
|
| + }
|
| + }
|
| + function addSigned(x) {
|
| + add(x);
|
| + add(-x);
|
| + }
|
| +
|
| + var BIGGER_THAN_ANY_SMI = 10 * 1000 * 1000 * 1000;
|
| + for (var xb = 1; xb <= BIGGER_THAN_ANY_SMI; xb *= 10) {
|
| for (var xf = 0; xf <= 9; xf++) {
|
| for (var xo = -1; xo <= 1; xo++) {
|
| - for (var yb = 1; yb <= 1000 * 1000 * 1000; yb *= 10) {
|
| - for (var yf = 0; yf <= 9; yf++) {
|
| - for (var yo = -1; yo <= 1; yo++) {
|
| - var x = xb * xf + xo;
|
| - var y = yb * yf + yo;
|
| - if (!%_IsSmi(x)) continue;
|
| - if (!%_IsSmi(y)) continue;
|
| - var lex = %SmiLexicographicCompare(x, y);
|
| - if (lex < 0) lex = -1;
|
| - if (lex > 0) lex = 1;
|
| - assertEquals(lex, (x == y) ? 0 : ((x + "") < (y + "") ? -1 : 1), x + " < " + y);
|
| - }
|
| - }
|
| - }
|
| + addSigned(xb * xf + xo);
|
| }
|
| }
|
| }
|
| +
|
| + for (var yb = 1; yb <= BIGGER_THAN_ANY_SMI; yb *= 2) {
|
| + for (var yo = -2; yo <= 2; yo++) {
|
| + addSigned(yb + yo);
|
| + }
|
| + }
|
| +
|
| + for (var i = 0; i < smis.length; i++) {
|
| + for (var j = 0; j < smis.length; j++) {
|
| + var x = smis[i];
|
| + var y = smis[j];
|
| + var lex = %SmiLexicographicCompare(x, y);
|
| + var expected = (x == y) ? 0 : ((x + "") < (y + "") ? -1 : 1);
|
| + assertEquals(lex, expected, x + " < " + y);
|
| + }
|
| + }
|
| }
|
|
|
| -TestNumberSort();
|
| +TestSmiLexicographicCompare();
|
|
|
|
|
| // Test lexicographical string sorting.
|
| @@ -374,4 +403,4 @@
|
| assertTrue(b instanceof o);
|
| return a.val - b.val;
|
| }
|
| -arr.sort(cmpTest);
|
| +arr.sort(cmpTest);
|
|
|