]> git.saurik.com Git - apple/javascriptcore.git/blob - tests/mozilla/js1_5/Array/array-001.js
JavaScriptCore-466.1.6.tar.gz
[apple/javascriptcore.git] / tests / mozilla / js1_5 / Array / array-001.js
1 /*
2 * The contents of this file are subject to the Netscape Public
3 * License Version 1.1 (the "License"); you may not use this file
4 * except in compliance with the License. You may obtain a copy of
5 * the License at http://www.mozilla.org/NPL/
6 *
7 * Software distributed under the License is distributed on an "AS
8 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
9 * implied. See the License for the specific language governing
10 * rights and limitations under the License.
11 *
12 * The Original Code is mozilla.org code.
13 *
14 * The Initial Developer of the Original Code is Netscape
15 * Communications Corporation. Portions created by Netscape are
16 * Copyright (C) 1998 Netscape Communications Corporation.
17 * All Rights Reserved.
18 *
19 * Contributor(s): igor@icesoft.no, pschwartau@netscape.com
20 * Date: 24 September 2001
21 *
22 * SUMMARY: Truncating arrays that have decimal property names.
23 * From correspondence with Igor Bukanov <igor@icesoft.no>:
24 */
25 //-----------------------------------------------------------------------------
26 var UBound = 0;
27 var bug = '(none)';
28 var summary = 'Truncating arrays that have decimal property names';
29 var BIG_INDEX = 4294967290;
30 var status = '';
31 var statusitems = [];
32 var actual = '';
33 var actualvalues = [];
34 var expect= '';
35 var expectedvalues = [];
36
37
38 var arr = Array(BIG_INDEX);
39 arr[BIG_INDEX - 1] = 'a';
40 arr[BIG_INDEX - 10000] = 'b';
41 arr[BIG_INDEX - 0.5] = 'c'; // not an array index - but a valid property name
42 // Truncate the array -
43 arr.length = BIG_INDEX - 5000;
44
45
46 // Enumerate its properties with for..in
47 var s = '';
48 for (var i in arr)
49 {
50 s += arr[i];
51 }
52
53
54 /*
55 * We expect s == 'cb' or 'bc' (EcmaScript does not fix the order).
56 * Note 'c' is included: for..in includes ALL enumerable properties,
57 * not just array-index properties. The bug was: Rhino gave s == ''.
58 */
59 status = inSection(1);
60 actual = sortThis(s);
61 expect = 'bc';
62 addThis();
63
64
65
66 //-----------------------------------------------------------------------------
67 test();
68 //-----------------------------------------------------------------------------
69
70
71
72 function sortThis(str)
73 {
74 var chars = str.split('');
75 chars = chars.sort();
76 return chars.join('');
77 }
78
79
80 function addThis()
81 {
82 statusitems[UBound] = status;
83 actualvalues[UBound] = actual;
84 expectedvalues[UBound] = expect;
85 UBound++;
86 }
87
88
89 function test()
90 {
91 enterFunc ('test');
92 printBugNumber (bug);
93 printStatus (summary);
94
95 for (var i=0; i<UBound; i++)
96 {
97 reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
98 }
99
100 exitFunc ('test');
101 }