|
1 function testValue() { |
|
2 function f(arr, x) { |
|
3 return arr[x]; |
|
4 } |
|
5 var a = [1, undefined, null, Math, 2.1, ""]; |
|
6 for (var i=0; i<50; i++) { |
|
7 assertEq(f(a, 0), 1); |
|
8 assertEq(f(a, 1), undefined); |
|
9 assertEq(f(a, 2), null); |
|
10 assertEq(f(a, 3), Math); |
|
11 assertEq(f(a, 4), 2.1); |
|
12 assertEq(f(a, 5), ""); |
|
13 assertEq(f(a, -1), undefined); |
|
14 assertEq(f(a, 6), undefined); |
|
15 } |
|
16 } |
|
17 testValue(); |
|
18 |
|
19 function testOutOfBounds() { |
|
20 function f(arr, x) { |
|
21 return arr[x]; |
|
22 } |
|
23 var a = [0, 1, 2, 3, 4]; |
|
24 |
|
25 for (var j=0; j<4; j++) { |
|
26 for (var i=0; i<5; i++) { |
|
27 assertEq(f(a, i), i); |
|
28 } |
|
29 for (var i=5; i<10; i++) { |
|
30 assertEq(f(a, i), undefined); |
|
31 } |
|
32 for (var i=-1; i>-10; i--) { |
|
33 assertEq(f(a, i), undefined); |
|
34 } |
|
35 } |
|
36 } |
|
37 testOutOfBounds(); |
|
38 |
|
39 function testHole() { |
|
40 function f(arr, x) { |
|
41 return arr[x]; |
|
42 } |
|
43 var a = [0, , 2, ]; |
|
44 for (var i=0; i<70; i++) { |
|
45 assertEq(f(a, 0), 0); |
|
46 assertEq(f(a, 1), undefined); |
|
47 assertEq(f(a, 2), 2); |
|
48 assertEq(f(a, 3), undefined); |
|
49 } |
|
50 } |
|
51 testHole(); |
|
52 |
|
53 function testClassGuard() { |
|
54 function f(arr) { |
|
55 return arr[2]; |
|
56 } |
|
57 var a = [1, 2, 3, 4]; |
|
58 for (var i=0; i<90; i++) { |
|
59 assertEq(f(a), 3); |
|
60 } |
|
61 var b = {2: 100}; |
|
62 assertEq(f(b), 100); |
|
63 } |
|
64 testClassGuard(); |
|
65 |
|
66 function testGeneric1() { |
|
67 function f(o, i) { |
|
68 return o[i]; |
|
69 } |
|
70 for (var i=0; i<100; i++) { |
|
71 assertEq(f("abc", 1), "b"); |
|
72 assertEq(f("foo", "length"), 3); |
|
73 assertEq(f([], -1), undefined); |
|
74 assertEq(f({x: 1}, "x"), 1); |
|
75 } |
|
76 } |
|
77 testGeneric1(); |