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