]> git.gag.com Git - fw/sdcc/blob - support/regression/tests/constantRange.c
* as/hc08/lkaomf51.c (OutputName),
[fw/sdcc] / support / regression / tests / constantRange.c
1 /** constant range tests.
2
3 */
4
5 #include <testfwk.h>
6 #include <stdbool.h>
7 #ifdef __sun__
8 #include <inttypes.h>
9 #else
10 #include <stdint.h>
11 #endif
12
13  int8_t s8;
14 uint8_t u8;
15
16  int16_t s16;
17 uint16_t u16;
18
19  int32_t s32;
20 uint32_t u32;
21
22 void
23 testConstantRange (void)
24 {
25   ASSERT (! (INT8_MIN - 1 == s8));
26   ASSERT (! (INT8_MAX + 1 == s8));
27   ASSERT (  (INT8_MIN - 1 != s8));
28   ASSERT (  (INT8_MAX + 1 != s8));
29   ASSERT (  (INT8_MIN - 1 <  s8));
30   ASSERT (! (INT8_MAX     <  s8));
31   ASSERT (  (INT8_MIN     <= s8));
32   ASSERT (! (INT8_MAX     <= s8));
33   ASSERT (! (INT8_MIN     >  s8));
34   ASSERT (  (INT8_MAX + 1 >  s8));
35   ASSERT (! (INT8_MIN - 1 >= s8));
36   ASSERT (  (INT8_MAX     >= s8));
37
38   ASSERT (! (        0 - 1 == u8));
39   ASSERT (! (UINT8_MAX + 1 == u8));
40   ASSERT (  (        0 - 1 != u8));
41   ASSERT (  (UINT8_MAX + 1 != u8));
42   ASSERT (  (        0 - 1 <  u8));
43   ASSERT (! (UINT8_MAX     <  u8));
44   ASSERT (  (        0     <= u8));
45   ASSERT (! (UINT8_MAX + 1 <= u8));
46   ASSERT (! (        0     >  u8));
47   ASSERT (  (UINT8_MAX + 1 >  u8));
48   ASSERT (! (        0 - 1 >= u8));
49   ASSERT (  (UINT8_MAX     >= u8));
50
51   /* force extension to long to avoid int (16 bit) overflow */
52   ASSERT (! (INT16_MIN - 1L == s16));
53   ASSERT (! (INT16_MAX + 1L == s16));
54   ASSERT (  (INT16_MIN - 1L != s16));
55   ASSERT (  (INT16_MAX + 1L != s16));
56   ASSERT (  (INT16_MIN - 1L <  s16));
57   ASSERT (! (INT16_MAX      <  s16));
58   ASSERT (  (INT16_MIN      <= s16));
59   ASSERT (! (INT16_MAX      <= s16));
60   ASSERT (! (INT16_MIN      >  s16));
61   ASSERT (  (INT16_MAX + 1L >  s16));
62   ASSERT (! (INT16_MIN - 1L >= s16));
63   ASSERT (  (INT16_MAX      >= s16));
64
65   ASSERT (! (         0 - 1  == u16));
66   ASSERT (! (UINT16_MAX + 1L == u16));
67   ASSERT (  (         0 - 1  != u16));
68   ASSERT (  (UINT16_MAX + 1L != u16));
69   ASSERT (  (         0 - 1  <  u16));
70   ASSERT (! (UINT16_MAX      <  u16));
71   ASSERT (  (         0      <= u16));
72   ASSERT (! (UINT16_MAX + 1L <= u16));
73   ASSERT (! (         0      >  u16));
74   ASSERT (  (UINT16_MAX + 1L >  u16));
75   ASSERT (! (         0 - 1  >= u16));
76   ASSERT (  (UINT16_MAX      >= u16));
77
78    /* sdcc can't hold a number (INT32_MIN - 1) or (INT32_MAX + 1),
79       there's no 'double' or 'long long' */
80 /* ASSERT (! (INT32_MIN - 1 == s32)); */
81 /* ASSERT (! (INT32_MAX + 1 == s32)); */
82 /* ASSERT (  (INT32_MIN - 1 != s32)); */
83 /* ASSERT (  (INT32_MAX + 1 != s32)); */
84 /* ASSERT (  (INT32_MIN - 1 <  s32)); */
85    ASSERT (! (INT32_MAX     <  s32));
86    ASSERT (  (INT32_MIN     <= s32));
87    ASSERT (! (INT32_MAX     <= s32));
88    ASSERT (! (INT32_MIN     >  s32));
89 /* ASSERT (  (INT32_MAX + 1 >  s32)); */
90 /* ASSERT (! (INT32_MIN - 1 >= s32)); */
91    ASSERT (  (INT32_MAX     >= s32));
92
93    ASSERT (! (         0 - 1 == u32));
94 /* ASSERT (! (UINT32_MAX + 1 == u32)); */
95    ASSERT (  (         0 - 1 != u32));
96 /* ASSERT (  (UINT32_MAX + 1 != u32)); */
97    ASSERT (  (         0 - 1 <  u32));
98    ASSERT (! (UINT32_MAX     <  u32));
99    ASSERT (  (         0     <= u32));
100 /* ASSERT (! (UINT32_MAX + 1 <= u32)); */
101    ASSERT (! (         0     >  u32));
102 /* ASSERT (  (UINT32_MAX + 1 >  u32)); */
103    ASSERT (! (         0 - 1 >= u32));
104    ASSERT (  (UINT32_MAX     >= u32));
105 }
106
107 void
108 testFoo1(void)
109 {
110 #if defined(PORT_HOST)
111    volatile bool sb, ub;
112 #else
113    volatile   signed bool sb;
114    volatile unsigned bool ub;
115 #endif
116
117   sb = 0;
118   ub = 0;
119
120   ASSERT (! (-1 == sb));
121   ASSERT (  ( 0 == sb));
122   ASSERT (! ( 1 == sb));
123
124   ASSERT (  (-1 != sb));
125   ASSERT (! ( 0 != sb));
126   ASSERT (  ( 1 != sb));
127
128   ASSERT (  (-1 <  sb));
129   ASSERT (! ( 0 <  sb));
130
131   ASSERT (  ( 0 <= sb));
132   ASSERT (! ( 1 <= sb));
133
134   ASSERT (! ( 0 >  sb));
135   ASSERT (  ( 1 >  sb));
136
137   ASSERT (! (-1 >= sb));
138   ASSERT (  ( 0 >= sb));
139
140
141   ASSERT (! (-1 == ub));
142   ASSERT (  ( 0 == ub));
143   ASSERT (! ( 1 == ub));
144
145   ASSERT (  (-1 != ub));
146   ASSERT (! ( 0 != ub));
147   ASSERT (  ( 1 != ub));
148
149   ASSERT (  (-1 <  ub));
150   ASSERT (! ( 0 <  ub));
151
152   ASSERT (  ( 0 <= ub));
153   ASSERT (! ( 1 <= ub));
154
155   ASSERT (! ( 0 >  ub));
156   ASSERT (  ( 1 >  ub));
157
158   ASSERT (! (-1 >= ub));
159   ASSERT (  ( 0 >= ub));
160 }
161
162 void
163 testFoo2(void)
164 {
165   volatile struct {
166       signed sb1:1;
167       signed sb3:3;
168     unsigned ub1:1;
169     unsigned ub3:3;
170   } str;
171
172   str.sb1 = 0;
173   str.ub1 = 0;
174   str.sb3 = 0;
175   str.ub3 = 0;
176
177   ASSERT (! (-2 == str.sb1));
178   ASSERT (! (-1 == str.sb1));
179   ASSERT (  ( 0 == str.sb1));
180   ASSERT (! ( 1 == str.sb1));
181
182   ASSERT (! (-1 == str.ub1));
183   ASSERT (  ( 0 == str.ub1));
184   ASSERT (! ( 1 == str.ub1));
185   ASSERT (! ( 2 == str.ub1));
186
187   ASSERT (! (-5 == str.sb3));
188   ASSERT (! (-4 == str.sb3));
189   ASSERT (  ( 0 == str.sb3));
190   ASSERT (! ( 3 == str.sb3));
191   ASSERT (! ( 4 == str.sb3));
192
193   ASSERT (! (-1 == str.ub3));
194   ASSERT (  ( 0 == str.ub3));
195   ASSERT (! ( 7 == str.ub3));
196   ASSERT (! ( 8 == str.ub3));
197 }