#include <inttypes.h>
#else
#include <stdint.h>
+#endif
+
+#if defined (__GNUC__) && defined (__alpha__) && (__GNUC__ < 3)
+/* bool should be casted to int in order to pass the test. Is this a gcc bug? */
+#define INT_CAST (int)
+#else
+#define INT_CAST
#endif
int8_t s8;
ASSERT (! (UINT16_MAX + 1L == u16));
ASSERT ( ( 0 - 1 != u16));
ASSERT ( (UINT16_MAX + 1L != u16));
- ASSERT ( ( 0 - 1 < u16));
ASSERT (! (UINT16_MAX < u16));
ASSERT ( ( 0 <= u16));
ASSERT (! (UINT16_MAX + 1L <= u16));
ASSERT (! ( 0 > u16));
ASSERT ( (UINT16_MAX + 1L > u16));
- ASSERT (! ( 0 - 1 >= u16));
ASSERT ( (UINT16_MAX >= u16));
+#if defined(PORT_HOST)
+/* on 32bit host: -1 is presented as 32 bit int, 16 bit unsigned short is promoted to 32 bit int */
+ ASSERT ( ( 0 - 1 < u16)); /* -1 > 0 */
+ ASSERT (! ( 0 - 1 >= u16)); /* !(-1 <= 0) */
+#else
+/* on 16bit sdcc: int (-1) is promoted to unsigned int (0xffff) */
+ ASSERT ( ( 0 - 1 > u16)); /* 0xffff > 0 */
+ ASSERT (! ( 0 - 1 <= u16)); /* !(0xffff <= 0) */
+#endif
+
/* sdcc can't hold a number (INT32_MIN - 1) or (INT32_MAX + 1),
there's no 'double' or 'long long' */
/* ASSERT (! (INT32_MIN - 1 == s32)); */
/* ASSERT (! (UINT32_MAX + 1 == u32)); */
ASSERT ( ( 0 - 1 != u32));
/* ASSERT ( (UINT32_MAX + 1 != u32)); */
- ASSERT ( ( 0 - 1 < u32));
+ ASSERT ( ( 0 - 1 > u32)); /* 0xffffffff > 0 */
ASSERT (! (UINT32_MAX < u32));
ASSERT ( ( 0 <= u32));
/* ASSERT (! (UINT32_MAX + 1 <= u32)); */
ASSERT (! ( 0 > u32));
/* ASSERT ( (UINT32_MAX + 1 > u32)); */
- ASSERT (! ( 0 - 1 >= u32));
+ ASSERT (! ( 0 - 1 <= u32)); /* !(0xffffffff <= 0) */
ASSERT ( (UINT32_MAX >= u32));
}
void
testFoo1(void)
{
+#ifdef __bool_true_false_are_defined
+
#if defined(PORT_HOST)
volatile bool sb, ub;
#else
ASSERT (! ( 0 != sb));
ASSERT ( ( 1 != sb));
- ASSERT ( (-1 < sb));
+ ASSERT ( (-1 < INT_CAST sb));
ASSERT (! ( 0 < sb));
ASSERT ( ( 0 <= sb));
ASSERT (! ( 0 > sb));
ASSERT ( ( 1 > sb));
- ASSERT (! (-1 >= sb));
+ ASSERT (! (-1 >= INT_CAST sb));
ASSERT ( ( 0 >= sb));
ASSERT (! ( 0 != ub));
ASSERT ( ( 1 != ub));
- ASSERT ( (-1 < ub));
+ ASSERT ( (-1 < INT_CAST ub));
ASSERT (! ( 0 < ub));
ASSERT ( ( 0 <= ub));
ASSERT (! ( 0 > ub));
ASSERT ( ( 1 > ub));
- ASSERT (! (-1 >= ub));
+ ASSERT (! (-1 >= INT_CAST ub));
ASSERT ( ( 0 >= ub));
+#endif //__bool_true_false_are_defined
}
void