OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 // sane result, i.e. it terminates without error and retains the elements | 145 // sane result, i.e. it terminates without error and retains the elements |
146 // in the array. | 146 // in the array. |
147 function TestArraySortingWithUnsoundComparisonFunction() { | 147 function TestArraySortingWithUnsoundComparisonFunction() { |
148 var a = [ 3, void 0, 2 ]; | 148 var a = [ 3, void 0, 2 ]; |
149 a.sort(function(x, y) { return 1; }); | 149 a.sort(function(x, y) { return 1; }); |
150 a.sort(); | 150 a.sort(); |
151 assertArrayEquals([ 2, 3, void 0 ], a); | 151 assertArrayEquals([ 2, 3, void 0 ], a); |
152 } | 152 } |
153 | 153 |
154 TestArraySortingWithUnsoundComparisonFunction(); | 154 TestArraySortingWithUnsoundComparisonFunction(); |
| 155 |
| 156 function TestSparseNonArraySorting(length) { |
| 157 assertTrue(length > 101); |
| 158 var obj = {length: length}; |
| 159 obj[0] = 42; |
| 160 obj[10] = 37; |
| 161 obj[100] = undefined; |
| 162 obj[length - 1] = null; |
| 163 Array.prototype.sort.call(obj); |
| 164 assertEquals(length, obj.length, "objsort length unaffected"); |
| 165 assertEquals(37, obj[0], "objsort smallest number"); |
| 166 assertEquals(42, obj[1], "objsort largest number"); |
| 167 assertEquals(null, obj[2], "objsort null"); |
| 168 assertEquals(undefined, obj[3], "objsort undefined"); |
| 169 assertTrue(3 in obj, "objsort undefined retained"); |
| 170 assertFalse(4 in obj, "objsort non-existing retained"); |
| 171 } |
| 172 |
| 173 TestSparseNonArraySorting(5000); |
| 174 TestSparseNonArraySorting(500000); |
| 175 TestSparseNonArraySorting(Math.pow(2, 31) + 1); |
OLD | NEW |