Steve Tell fixed a nested for-loop bug in the PIC Port
[fw/sdcc] / src / regression / pointer1.c
1 #define __16F873
2 #include "p16f873.h"
3
4 // Pointer tests
5
6 unsigned char success = 0;
7 unsigned char failures = 0;
8 unsigned char dummy = 0;
9
10 bit bit0 = 0;
11 unsigned int aint0 = 0;
12 unsigned int aint1 = 0;
13 unsigned char achar0 = 0;
14 unsigned char achar1 = 0;
15 unsigned char *acharP = 0;
16
17 char buff[10];
18
19 void
20 done ()
21 {
22
23   dummy++;
24
25 }
26
27 void
28 f1 (unsigned char *ucP)
29 {
30
31   if (ucP == 0)
32     {
33       failures++;
34       return;
35     }
36
37   if (*ucP)
38     failures++;
39 }
40
41 void
42 f2 (unsigned int *uiP)
43 {
44
45   if (uiP == 0)
46     {
47       failures++;
48       return;
49     }
50
51   if (*uiP)
52     failures++;
53
54 }
55
56 unsigned char *
57 f3 (void)
58 {
59
60   return &achar0;
61 }
62
63 void f4(unsigned char *ucP, unsigned char uc)
64 {
65
66   if(!ucP) {
67     failures++;
68     return;
69   }
70
71   if(*ucP != uc)
72     failures++;
73
74 }
75
76 void init_array(char start_value)
77 {
78   unsigned char c;
79
80   for(c=0; c<sizeof(buff); c++)
81     buff[c] = start_value++;
82
83 }
84
85 void check_array(char base_value)
86 {
87   unsigned char c;
88
89   for(c=0; c<sizeof(buff); c++)
90     if(buff[c] != (base_value+c))
91       failures++;
92
93 }
94
95 void index_by_pointer(unsigned char *index, unsigned char expected_value)
96 {
97
98   if(buff[*index] != expected_value)
99     failures++;
100
101 }
102
103 void
104 main (void)
105 {
106
107   init_array(4);
108   check_array(4);
109
110   if(buff[achar0 + 7] != 4+7)
111     failures++;
112
113   //  dummy = buff[5];
114   dummy = buff[achar0];
115
116   if(dummy != 4)
117     failures++;
118
119   if(dummy != (buff[achar0+1] -1)) 
120     failures++;
121
122   index_by_pointer(&dummy, 8);
123
124   f1 (&achar0);
125   f2 (&aint0);
126
127   acharP = f3 ();
128   if ((acharP == 0) || (*acharP))
129     failures++;
130
131   achar0 = 5;
132   f4(&achar0, achar0);
133
134   success = failures;
135   done ();
136 }