diff options
| author | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
|---|---|---|
| committer | Xavier ASUS <xavi92psx@gmail.com> | 2019-10-18 00:31:54 +0200 |
| commit | 268a53de823a6750d6256ee1fb1e7707b4b45740 (patch) | |
| tree | 42c1799a9a82b2f7d9790ee9fe181d72a7274751 /support/regression/tests/compare.c | |
| download | sdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz | |
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'support/regression/tests/compare.c')
| -rw-r--r-- | support/regression/tests/compare.c | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/support/regression/tests/compare.c b/support/regression/tests/compare.c new file mode 100644 index 0000000..1ee8486 --- /dev/null +++ b/support/regression/tests/compare.c @@ -0,0 +1,172 @@ +/** Test the comparison operators. + + type: char, int, long + storage: static, + attr: volatile + */ +#include <testfwk.h> + +static void +testCmpAroundZero(void) +{ + {attr} {storage} signed {type} i; + + i = 5; + + ASSERT(0 < i); + ASSERT(i > 0); + ASSERT(0 <= i); + ASSERT(i >= 0); +#if !defined(__SDCC_pdk14) // Lack of memory + i = -33; + ASSERT(0 > i); + ASSERT(i < 0); + ASSERT(0 >= i); + ASSERT(i <= 0); + + i = 0; + ASSERT(0 == i); + ASSERT(0 <= i); + ASSERT(0 >= i); +#endif +} + +static void +testCompareConstants(void) +{ + {attr} {storage} signed {type} i; + + i = 12; + ASSERT(i < 23); + ASSERT(i > 3); + ASSERT(i > -14); +#if !defined(__SDCC_pdk14) // Lack of memory + ASSERT(i <= 23); + ASSERT(i >= 3); + ASSERT(i >= -14); + ASSERT(i <= 12); + ASSERT(i >= 12); + ASSERT(i == 12); +#endif + + i = -34; + ASSERT(i > -126); + ASSERT(i < -3); +#if !defined(__SDCC_pdk14) // Lack of memory + ASSERT(i < 47); + ASSERT(i >= -126); + ASSERT(i <= -3); + ASSERT(i <= 47); + ASSERT(i <= -34); + ASSERT(i >= -34); + ASSERT(i == -34); +#endif +} + +static void +testCompareVariables(void) +{ + {attr} {storage} signed {type} left, right; + + left = 12; + right = 47; + ASSERT(left < right); + ASSERT(left <= right); + ASSERT(right > left); + ASSERT(right >= left); + + right = -8; + ASSERT(left > right); + ASSERT(left >= right); + ASSERT(right < left); + ASSERT(right <= left); +#if !defined(__SDCC_pdk14) // Lack of memory + right = 0; + ASSERT(left > right); + ASSERT(left >= right); + ASSERT(right < left); + ASSERT(right <= left); + + right = left; + ASSERT(left == right); + ASSERT(left <= right); + ASSERT(left >= right); +#endif +} + +static void +testUnsignedCompare(void) +{ + {attr} {storage} unsigned {type} left, right; + + left = 0; + right = (unsigned {type})-1; + + ASSERT(left < right); + ASSERT(left <= right); + ASSERT(right > left); + ASSERT(right >= left); +} + +void (*fptr)(void); +int *volatile iptr; + +#if !defined(__SDCC_pdk14) // Lack of memory +signed {type} s; +unsigned {type} u; + +void set ({type} v) +{ + s = v; + u = v; +} +#endif + +/* Test optimization for eliminating redundant loads in range tests. s and u should not be volatile. */ +void testRange(void) +{ +#if !defined(__SDCC_pdk14) // Lack of memory + set (17); + + ASSERT (s >= 17 && s <= 20); + ASSERT (u >= 17 && u <= 20); + + set (21); + + ASSERT (!(s >= 17 && s <= 20)); + ASSERT (!(u >= 17 && u <= 20)); + + set (18); + + ASSERT (s > 17 && s < 20); + ASSERT (u > 17 && u < 20); + + set (20); + + ASSERT (!(s > 17 && s < 20)); + ASSERT (!(u > 17 && u < 20)); +#endif +} + +void testPointerCompare(void) +{ + int i; + fptr = &testPointerCompare; + iptr = &i; + ASSERT(iptr == &i); + ASSERT(fptr == &testPointerCompare); +} + + + +/* + Common cases: + Around zero + Constants on either side (reversal) + <= + >= + == + != + < + > +*/ |
