|
1 function reallyDeepNestedExit(schedule) |
|
2 { |
|
3 var c = 0, j = 0; |
|
4 for (var i = 0; i < 5; i++) { |
|
5 for (j = 0; j < 4; j++) { |
|
6 c += (schedule[i*4 + j] == 1) ? 1 : 2; |
|
7 } |
|
8 } |
|
9 return c; |
|
10 } |
|
11 function testReallyDeepNestedExit() |
|
12 { |
|
13 var c = 0; |
|
14 var schedule1 = new Array(5*4); |
|
15 var schedule2 = new Array(5*4); |
|
16 for (var i = 0; i < 5*4; i++) { |
|
17 schedule1[i] = 0; |
|
18 schedule2[i] = 0; |
|
19 } |
|
20 /** |
|
21 * First innermost compile: true branch runs through. |
|
22 * Second '': false branch compiles new loop edge. |
|
23 * First outer compile: expect true branch. |
|
24 * Second '': hit false branch. |
|
25 */ |
|
26 schedule1[0*4 + 3] = 1; |
|
27 var schedules = [schedule1, |
|
28 schedule2, |
|
29 schedule1, |
|
30 schedule2, |
|
31 schedule2]; |
|
32 |
|
33 for (var i = 0; i < 5; i++) { |
|
34 c += reallyDeepNestedExit(schedules[i]); |
|
35 } |
|
36 return c; |
|
37 } |
|
38 assertEq(testReallyDeepNestedExit(), 198); |