]> git.sur5r.net Git - cc65/blob - test/val/sub2.c
All regression-tests subdirectories are cleaned before the first test starts, so...
[cc65] / test / val / sub2.c
1 /*
2   !!DESCRIPTION!! Substraction Test
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 #if 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 int int0 = 0;
32 int int1 = 0;
33
34 signed char char0 = 0;
35 signed char char1 = 0;
36 signed char char2 = 0;
37
38 void done()
39 {
40   dummy++;
41 }
42
43 void sub_int1(void)
44 {
45   if(int0 != 5)
46     failures++;
47
48   if(int1 != 4)
49     failures++;
50
51   int0 = int0 - int1;
52
53   if(int0 != 1)
54     failures++;
55
56   int0 = 4 - int0;
57   if(int0 != 3)
58     failures++;
59
60   int0 = int0 - int1;
61
62   if(int0 != -1)
63     failures++;
64
65   int0 = int0 - 0xff;
66
67   if(int0 != -0x100)
68     failures++;
69
70   int0 = 0xff - int0;
71
72   if(int0 != 0x1ff)
73     failures++;
74 }
75
76 void sub_char_int(void)
77 {
78   int0 = int0 - char0;
79
80   if(int0 != 3)
81     failures++;
82
83   if(int0 < char0)
84     failures++;
85
86   int0 = int0 - char0;
87
88   if(int0 != 1)
89     failures++;
90
91   if(int0 > char0)
92     failures++;
93
94   int0 = int0 - char0;
95   if(int0 != -1)
96     failures++;
97
98   if(int0>0)
99     failures++;
100 }
101
102 void assign_char2int(void)
103 {
104   int0 = char0;
105   if(int0 != 0x7f)
106     failures++;
107
108  /* printf("%2x %2x %2x %d\n",0x7f,int0,char0,failures); */
109
110   int1 = char1;
111   if(int1 != -5)
112     failures++;
113
114  /* printf("%2x,%d %2x,%d %2x,%d %d\n",-5,-5,(int)int1,(int)int1,(int)char1,(int)char1,failures); */
115 }
116
117 void sub_compound_char(void)
118 {
119   char0 = char1 - 5;
120   if(char0 != 4)
121     failures++;
122
123   if((char1 - char0 - 5) != 0)
124     failures++;
125 }
126
127 void sub_compound_int(void)
128 {
129   int0 = int1 - 5;
130   if(int0 != 4)
131     failures++;
132
133   if((int1 - int0 - 5) != 0)
134     failures++;
135 }
136
137 int main(void)
138 {
139   int0 = 5;
140   int1 = 4;
141
142   sub_int1();
143   printf("failures: %d\n",failures);
144
145   int0 = 5;
146   int1 = 4;
147   char0 = 2;
148
149   sub_char_int();
150   printf("failures: %d\n",failures);
151
152   char0 = 0x7f;
153   char1 = -5;
154   assign_char2int();
155   printf("failures: %d\n",failures);
156
157   char1 = 9;
158   sub_compound_char();
159   printf("failures: %d\n",failures);
160
161   int1 = 9;
162   sub_compound_int();
163
164   success = failures;
165   done();
166   printf("failures: %d\n",failures);
167
168   return failures;
169 }