| /* -*- tab-width: 2; indent-tabs-mode: nil; js-indent-level: 2 -*- */ |
| /* This Source Code Form is subject to the terms of the Mozilla Public |
| * License, v. 2.0. If a copy of the MPL was not distributed with this |
| * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
| |
| //----------------------------------------------------------------------------- |
| var BUGNUMBER = 311497; |
| var summary = 'Root pivots in js_HeapSort'; |
| var actual = 'No Crash'; |
| var expect = 'No Crash'; |
| |
| printBugNumber(BUGNUMBER); |
| printStatus (summary); |
| |
| |
| function force_gc() |
| { |
| if (this.gc) gc(); |
| for (var i = 0; i != 30000; ++i) { |
| var tmp = Math.sin(i); |
| tmp = null; |
| } |
| } |
| |
| var array = new Array(10); |
| for (var i = 0; i != array.length; ++i) { |
| array[i] = String.fromCharCode(i, i, i); |
| } |
| |
| function cmp(a, b) |
| { |
| for (var i = 0; i != array.length; ++i) { |
| array[i] = null; |
| } |
| force_gc(); |
| return 0; |
| } |
| |
| array.sort(cmp); |
| |
| // Verify that array contains either null or original strings |
| |
| var null_count = 0; |
| var original_string_count = 0; |
| for (var i = 0; i != array.length; ++i) { |
| var elem = array[i]; |
| if (elem === null) { |
| ++null_count; |
| } else if (typeof elem == "string" && elem.length == 3) { |
| var code = elem.charCodeAt(0); |
| if (0 <= code && code < array.length) { |
| if (code === elem.charCodeAt(1) && code == elem.charCodeAt(2)) |
| ++original_string_count; |
| } |
| } |
| } |
| |
| var expect = array.length; |
| var actual = null_count + original_string_count; |
| |
| reportCompare(expect, actual, summary); |