cc65/test/val/ppshift.c

121 lines
1.9 KiB
C

/*
Test of bitwise-shift in preprocessor expressions.
Note: Keep in mind that integer constants are always 32-bit in PP for cc65.
*/
/* Signed lhs */
#if 1 << 16 != 0x00010000
#error 1 << 16 != 0x00010000
#endif
#if 0x00010000 << -16 != 1
#error 0x00010000 << -16 != 1
#endif
#if 0x10000 >> 16 != 1
#error 0x10000 >> 16 != 1
#endif
#if 1 >> -16 != 0x10000
#error 1 >> -16 != 0x10000
#endif
#if 1 << 32 != 0
#error 1 << 32 != 0
#endif
#if 1 << -32 != 0
#error 1 << -32 != 0
#endif
#if 1 >> 32 != 0
#error 1 >> 32 != 0
#endif
#if 1 >> -32 != 0
#error 1 >> -32 != 0
#endif
#if -1 << 32 != 0
#error -1 << 32 != 0
#endif
#if -1 << -32 != -1
#error -1 << -32 != -1
#endif
#if -1 >> 32 != -1
#error -1 >> 32 != -1
#endif
#if -1 >> -32 != 0
#error -1 >> -32 != 0
#endif
/* NOTE: 2147483648 is an UNSIGNED integer! */
#if -1 << 2147483648 != 0
#error -1 << 2147483648 != 0
#endif
/* NOTE: -2147483648 is also an UNSIGNED integer! */
#if -1 << -2147483648 != 0
#error -1 << -2147483648 != 0
#endif
#if -1 << (-2147483647 - 1) != -1
#error -1 << (-2147483647 - 1) != -1
#endif
/* NOTE: 2147483648 is an UNSIGNED integer! */
#if -1 >> 2147483648 != -1
#error -1 >> 2147483648 != -1
#endif
/* NOTE: -2147483648 is also an UNSIGNED integer! */
#if -1 >> -2147483648 != -1
#error -1 >> -2147483648 != 0
#endif
#if -1 >> (-2147483647 - 1) != 0
#error -1 >> (-2147483647 - 1) != 0
#endif
/* Unsigned lhs */
#if 1U << 16 != 0x00010000
#error 1U << 16 != 0x00010000
#endif
#if 0x80000000U << -16 != 0x8000
#error 0x80000000U << -16 != 0x8000
#endif
#if 0x80000000U >> 16 != 0x8000
#error 0x80000000U >> 16 != 0x8000
#endif
#if 1U >> -16 != 0x10000
#error 1U >> -16 != 0x10000
#endif
#if -1U << 32 != 0
#error -1U << 32 != 0
#endif
#if -1U << -32 != 0
#error -1U << -32 != 0
#endif
#if -1U >> 32 != 0
#error -1U >> 32 != 0
#endif
#if -1U >> -32 != 0
#error -1U >> -32 != 0
#endif
int main(void)
{
return 0;
}