Index: test/mjsunit/array-sort.js |
=================================================================== |
--- test/mjsunit/array-sort.js (revision 321) |
+++ test/mjsunit/array-sort.js (working copy) |
@@ -25,6 +25,8 @@ |
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
+// Flags: --allow-natives-syntax |
+ |
// Test array sort. |
// Test counter-intuitive default number sorting. |
@@ -49,10 +51,46 @@ |
a.sort(); |
assertArrayEquals([-123,-1234,-12345,-123456,0,0,123,1234,12345,123456], a); |
+ // Tricky case avoiding integer overflow in Runtime_SmiLexicographicCompare. |
+ a = [9, 1000000000].sort(); |
+ assertArrayEquals([1000000000, 9], a); |
+ a = [1000000000, 1].sort(); |
+ assertArrayEquals([1, 1000000000], a); |
+ a = [1000000000, 0].sort(); |
+ assertArrayEquals([0, 1000000000], a); |
+ |
+ // One string is a prefix of the other. |
+ a = [1230, 123].sort(); |
+ assertArrayEquals([123, 1230], a); |
+ a = [1231, 123].sort(); |
+ assertArrayEquals([123, 1231], a); |
+ |
// Default sort on Smis and non-Smis. |
a = [1000000000, 10000000000, 1000000001, -1000000000, -10000000000, -1000000001]; |
a.sort(); |
assertArrayEquals([-1000000000, -10000000000, -1000000001, 1000000000, 10000000000, 1000000001], a); |
+ |
+ |
+ for (var xb = 1; xb <= 1000 * 1000 * 1000; 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); |
+ } |
+ } |
+ } |
+ } |
+ } |
+ } |
} |
TestNumberSort(); |