- And'ing with a constant works (again).
[fw/sdcc] / src / regression / sub2.c
1 //#include "p16c84.h"
2 // Addition tests
3
4 /* bit types are not ANSI - so provide a way of disabling bit types
5  * if this file is used to test other compilers besides SDCC */
6 #define SUPPORT_BIT_TYPES 1
7
8 /* Some compilers that support bit types do not support bit arithmetic 
9  * (like bitx = bity + bitz;) */
10 #define SUPPORT_BIT_ARITHMETIC 1
11
12 unsigned char success=0;
13 unsigned char failures=0;
14 unsigned char dummy=0;
15
16 #if SUPPORT_BIT_TYPES
17
18 bit bit0 = 0;
19 bit bit1 = 0;
20 bit bit2 = 0;
21 bit bit3 = 0;
22 bit bit4 = 0;
23 bit bit5 = 0;
24 bit bit6 = 0;
25 bit bit7 = 0;
26 bit bit8 = 0;
27 bit bit9 = 0;
28 bit bit10 = 0;
29 bit bit11 = 0;
30
31 #endif
32
33 int int0 = 0;
34 int int1 = 0;
35 char char0 = 0;
36 char char1 = 0;
37 char char2 = 0;
38
39
40 void done()
41 {
42
43   dummy++;
44
45 }
46
47 void sub_int1(void)
48 {
49   if(int0 != 5)
50     failures++;
51
52   if(int1 != 4)
53     failures++;
54
55   int0 = int0 - int1;
56
57   if(int0 != 1)
58     failures++;
59
60   int0 = 4 - int0;
61   if(int0 != 3)
62     failures++;
63
64   int0 = int0 - int1;
65
66   if(int0 != -1)
67     failures++;
68
69   int0 = int0 - 0xff;
70
71   if(int0 != -0x100)
72     failures++;
73
74   int0 = 0xff - int0;
75
76   if(int0 != 0x1ff)
77     failures++;
78
79
80 }
81
82 void sub_char_int(void)
83 {
84
85   int0 = int0 - char0;
86
87   if(int0 != 3)
88     failures++;
89
90   if(int0 < char0)
91     failures++;
92
93   int0 = int0 - char0;
94
95   if(int0 != 1)
96     failures++;
97
98   if(int0 > char0)
99     failures++;
100
101
102   int0 = int0 - char0;
103   if(int0 != -1)
104     failures++;
105
106   if(int0>0)
107     failures++;
108
109 }
110
111 void assign_char2int(void)
112 {
113
114   int0 = char0;
115   if(int0 != 0x7f)
116     failures++;
117
118   int1 = char1;
119   if(int1 != -5)
120     failures++;
121
122 }
123
124 void main(void)
125 {
126
127   int0 = 5;
128   int1 = 4;
129
130   sub_int1();
131
132   int0 = 5;
133   int1 = 4;
134   char0 = 2;
135
136   sub_char_int();
137
138   char0 = 0x7f;
139   char1 = -5;
140   assign_char2int();
141
142   success = failures;
143   done();
144 }