* Makefile.in, configure.in, configure,
[fw/sdcc] / src / regression / nestfor.c
1 #include "gpsim_assert.h"
2 #include "picregs.h"
3
4 unsigned char failures=0;
5
6 unsigned int uint0 = 0;
7 unsigned int uint1 = 0;
8 unsigned char uchar0 = 0;
9 unsigned char uchar1 = 0;
10
11 void dput(unsigned char val)
12 {
13         PORTB = val;
14         PORTA = 0x01;
15         PORTA = 0x00;
16 }
17
18 void
19 done()
20 {
21   ASSERT(MANGLE(failures) == 0);
22   PASSED();
23 }
24
25 /* both loops use the loop variable inside the inner loop */
26 void for1(void)
27 {
28         unsigned char i, j;
29
30         uchar0 = 0;
31         uchar1 = 0;
32         for(i = 0; i < 3; i++) {
33                 uchar0++;
34                 for(j = 0; j < 4; j++) {
35                         uchar1++;
36                         dput(i);
37                         dput(j);
38                 }
39         }
40         if(uchar0 != 3)
41                 failures++;
42         if(uchar1 != 12)
43                 failures++;
44 }
45
46 /* only the outer loop's variable is used inside, inner can be optimized into a repeat-loop */
47 void for2(void)
48 {
49         unsigned char i, j;
50
51         uchar0 = 0;
52         uchar1 = 0;
53         for(i = 0; i < 3; i++) {
54                 uchar0++;
55                 for(j = 0; j < 4; j++) {
56                         uchar1++;
57                         dput(i);
58                 }
59         }
60         if(uchar0 != 3)
61                 failures++;
62         if(uchar1 != 12)
63                 failures++;
64 }
65
66 /* only the inner loop's variable is used inside */
67 void for3(void)
68 {
69         unsigned char i, j;
70
71         uchar0 = 0;
72         uchar1 = 0;
73         for(i = 0; i < 3; i++) {
74                 uchar0++;
75                 for(j = 0; j < 4; j++) {
76                         uchar1++;
77                         dput(j);
78                 }
79         }
80         if(uchar0 != 3)
81                 failures++;
82         if(uchar1 != 12)
83                 failures++;
84
85 }
86
87 /* neither loop variable used inside the loops */
88 void for4(void)
89 {
90         unsigned char i, j;
91
92         uchar0 = 0;
93         uchar1 = 0;
94         for(i = 0; i < 3; i++) {
95                 uchar0++;
96                 for(j = 0; j < 4; j++) {
97                         uchar1++;
98                         dput(uchar0);
99                         dput(uchar1);
100                 }
101         }
102         if(uchar0 != 3)
103                 failures++;
104         if(uchar1 != 12)
105                 failures++;
106
107 }
108
109 /* like for1 but different condition in inner loop */
110 void for5(void)
111 {
112         unsigned char i, j;
113
114         uchar0 = 0;
115         uchar1 = 0;
116         for(i = 0; i < 3; i++) {
117                 uchar0++;
118                 for(j = 10; j >= 5; j--) {
119                         uchar1++;
120                         dput(i);
121                         dput(j);
122                 }
123         }
124         if(uchar0 != 3)
125                 failures++;
126         if(uchar1 != 18)
127                 failures++;
128 }
129
130 void main(void)
131 {
132   for1();
133   for2();
134   for3();
135   for4();
136   for5();
137
138   done();
139 }