]> git.sur5r.net Git - cc65/blob - test/val/add1.c
All regression-tests subdirectories are cleaned before the first test starts, so...
[cc65] / test / val / add1.c
1 /*
2   !!DESCRIPTION!! Addition tests
3   !!ORIGIN!!      SDCC regression tests
4   !!LICENCE!!     GPL, read COPYING.GPL
5 */
6
7 #include <stdio.h>
8 #include <limits.h>
9
10 unsigned char success=0;
11 unsigned char failures=0;
12 unsigned char dummy=0;
13
14 #ifdef SUPPORT_BIT_TYPES
15
16 bit bit0 = 0;
17 bit bit1 = 0;
18 bit bit2 = 0;
19 bit bit3 = 0;
20 bit bit4 = 0;
21 bit bit5 = 0;
22 bit bit6 = 0;
23 bit bit7 = 0;
24 bit bit8 = 0;
25 bit bit9 = 0;
26 bit bit10 = 0;
27 bit bit11 = 0;
28
29 #endif
30
31 unsigned int aint0 = 0;
32 unsigned int aint1 = 0;
33 unsigned char achar0 = 0;
34 unsigned char achar1 = 0;
35 unsigned char achar2 = 0;
36 unsigned char achar3 = 0;
37 unsigned char *acharP = 0;
38
39 void done()
40 {
41   dummy++;
42 }
43
44 void add_lit2uchar(void)
45 {
46   achar0 = achar0 + 5;
47
48   if(achar0 != 5)
49     failures++;
50
51   achar0 += 10;
52
53   if(achar0 != 15)
54     failures++;
55
56   achar0 = achar0 +1;  /*Should be an increment */
57   if(achar0 != 16)
58     failures++;
59
60   for(achar1 = 0; achar1 < 100; achar1++)
61     achar0 += 2;
62
63   if(achar0 != 216)
64     failures++;
65 }
66
67 void add_uchar2uchar(void)
68 {
69   achar1 = achar1 + achar0;
70
71   if(achar1 != 16)
72     failures++;
73
74   for(achar2 = 0; achar2<7; achar2++)
75     achar1 += achar0;
76
77   if(achar1 != 128)
78     failures++;
79 }
80
81 /* assumes
82   achar0 = 0
83   achar1 = 32
84   achar2, achar3 can be anything.
85 */
86 void add_uchar2uchar2(void)
87 {
88   achar0++;
89   achar0 = achar0 + 1;
90   achar0 = achar0 + 2;
91   achar0 = achar0 + 3;
92   if(achar0 != 7)
93     failures++;
94
95   achar1 += achar0;
96   if(achar1 != 39)
97     failures++;
98
99   achar2 = achar1 + achar0;
100   if(achar2 != 46)
101     failures++;
102
103   achar3 = achar2 + achar1 + achar0;
104   if(achar3 != 92)
105     failures++;
106 }
107
108 #ifdef SUPPORT_BIT_TYPES
109 void add_bits(void)
110 {
111   bit1 = bit0;
112
113   bit0 = 1;
114
115   if(bit1 != 0)
116     failures++;
117
118   bit1 = bit1+bit0;
119   if(bit1 != 1)
120     failures++;
121
122 #ifdef SUPPORT_BIT_ARITHMETIC
123   bit2 = bit1+bit3;
124   if(!bit2)
125     failures++;
126
127   bit3 = bit4+bit5+bit6+bit7+bit0;
128   if(!bit3)
129     failures++;
130 #endif
131 }
132
133 /* add_bit2uchar(void) - assumes bit0 = 1, achar0 = 7  */
134
135 void add_bit2uchar(void)
136 {
137   achar0 += bit0;
138
139   if(achar0 != 8)
140     failures++;
141
142   if(achar0 == bit0)
143     failures++;
144 }
145
146 void add_bit2uint(void)
147 {
148   if(aint0 != bit11)
149     failures++;
150
151   aint0 += bit0;
152   if(aint0!=1)
153     failures++;
154 }
155 #endif
156
157 int main(void)
158 {
159   add_lit2uchar();
160
161   achar0=16;
162   achar1=0;
163   add_uchar2uchar();
164
165   achar0 = 0;
166   achar1 = 32;
167   add_uchar2uchar2();
168
169 #ifdef SUPPORT_BIT_TYPES
170   add_bits();
171
172   add_bit2uchar();
173   add_bit2uint();
174 #endif
175
176   success = failures;
177   done();
178   printf("failures: %d\n",failures);
179
180   return failures;
181 }