Chromium Code Reviews| Index: test/mjsunit/array-sort.js |
| =================================================================== |
| --- test/mjsunit/array-sort.js (revision 8424) |
| +++ 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() { |
| + |
| + assertEquals(false, %_IsSmi(2147483648), 'Update test for >32 bit Smi'); |
|
Lasse Reichstein
2011/06/27 08:41:48
Use assertFalse instead of assertEquals(false,
|
| + |
| + // 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); |