int main () { union bf_or_uint32 bfin; uint32_t out; char cin[] = { 0x83, 0x85, 0x87, 0x89 }; if (sizeof (uint32_t) * __CHAR_BIT__ != 32) return 0; bfin.inval = (struct ok) { 0x83, 0x85, 0x87, 0x89 }; out = partial_read_le32 (bfin); if (out != 0x09070503 && out != 0x88868482 && out != 0x78306141) __builtin_abort (); bfin.inval = (struct ok) { 0x83, 0x85, 0x87, 0x89 }; out = partial_read_be32 (bfin); if (out != 0x03050709 && out != 0x82848688 && out != 0x41613078) __builtin_abort (); out = fake_read_le32 (cin, &cin[2]); if (out != 0x89018583) __builtin_abort (); out = fake_read_be32 (cin, &cin[2]); if (out != 0x83850189) __builtin_abort (); return 0; }
int main () { union bf_or_uint32 bfin; uint32_t out; char cin[] = { 0x83, 0x85, 0x87, 0x89 }; if (sizeof (uint32_t) * __CHAR_BIT__ != 32) return 0; bfin.inval = (struct ok) { 0x83, 0x85, 0x87, 0x89 }; out = partial_read_le32 (bfin); /* Test what bswap would do if its check are not strict enough instead of what is the expected result as there is too many possible results with bitfields. */ if (out == 0x89878583) __builtin_abort (); bfin.inval = (struct ok) { 0x83, 0x85, 0x87, 0x89 }; out = partial_read_be32 (bfin); /* Test what bswap would do if its check are not strict enough instead of what is the expected result as there is too many possible results with bitfields. */ if (out == 0x83858789) __builtin_abort (); out = fake_read_le32 (cin, &cin[2]); if (out != 0x89018583) __builtin_abort (); cin[2] = 0x87; out = fake_read_be32 (cin, &cin[2]); if (out != 0x83850189) __builtin_abort (); cin[2] = 0x87; out = incorrect_read_le32 (cin, &cin[2]); if (out != 0x89878583) __builtin_abort (); cin[2] = 0x87; out = incorrect_read_be32 (cin, &cin[2]); if (out != 0x83858789) __builtin_abort (); return 0; }