mirror of
https://github.com/byteworksinc/ORCA-C.git
synced 2024-08-26 20:29:02 +00:00
These are currently only run by the new DOIT3 test-running script. Note that these tests are designed to be applicable to most implementations of C95/C99/C11, not just ORCA/C. They do make certain assumptions not guaranteed by the standards (e.g. power of 2 types and some properties of IEEE-like FP), but in general those assumptions should be true for most 'normal' systems.
90 lines
2.2 KiB
C
90 lines
2.2 KiB
C
/*
|
|
* Test <stdint.h> and <inttypes.h> (C99).
|
|
*/
|
|
|
|
#include <inttypes.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
int main(void) {
|
|
// This assumes properties true for ORCA/C
|
|
// and most other typical C implementations.
|
|
|
|
int8_t i8 = 0x12;
|
|
uint_least16_t uil16 = 0x1234;
|
|
uint_fast32_t uif32 = 0x12345678;
|
|
uintmax_t uim = 0x1234567890abcdef;
|
|
uintptr_t uip;
|
|
|
|
void *p = &i8;
|
|
uip = (uintptr_t)p;
|
|
if ((void*)uip != p)
|
|
goto Fail;
|
|
|
|
if (INT32_MAX != 0x7fffffff)
|
|
goto Fail;
|
|
|
|
if (INT_LEAST16_MIN != -32768L)
|
|
goto Fail;
|
|
|
|
if (UINT_FAST64_MAX != 0xffffffffffffffff)
|
|
goto Fail;
|
|
|
|
if (PTRDIFF_MIN > -65535L)
|
|
goto Fail;
|
|
|
|
if (SIZE_MAX < 65535)
|
|
goto Fail;
|
|
|
|
if (INT32_C(0x123) != 0x123)
|
|
goto Fail;
|
|
|
|
if (sizeof(INT32_C(0x123)) != 4)
|
|
goto Fail;
|
|
|
|
if (INT64_C(42) != 42)
|
|
goto Fail;
|
|
|
|
if (sizeof(INT64_C(42)) != 8)
|
|
goto Fail;
|
|
|
|
if (INTMAX_C(0x1234567890abcdef) != 0x1234567890abcdef)
|
|
goto Fail;
|
|
|
|
if (sizeof(INTMAX_C(0x1234567890abcdef)) < 8)
|
|
goto Fail;
|
|
|
|
char s[100];
|
|
sprintf(s, "%" PRId8 " %" PRIuLEAST16 " %#" PRIxFAST32 " %" PRIXMAX,
|
|
i8, uil16, uif32, uim);
|
|
|
|
if (strcmp(s, "18 4660 0x12345678 1234567890ABCDEF") != 0)
|
|
goto Fail;
|
|
|
|
i8 = 0;
|
|
uil16 = 0;
|
|
uif32 = 0;
|
|
uim = 0;
|
|
|
|
sscanf(s, "%" SCNd8 " %" SCNuLEAST16 " %" SCNxFAST32 " %" SCNxMAX,
|
|
&i8, &uil16, &uif32, &uim);
|
|
|
|
if (i8 != 0x12)
|
|
goto Fail;
|
|
|
|
if (uil16 != 0x1234)
|
|
goto Fail;
|
|
|
|
if (uif32 != 0x12345678)
|
|
goto Fail;
|
|
|
|
if (uim != 0x1234567890abcdef)
|
|
goto Fail;
|
|
|
|
printf ("Passed Conformance Test c99stdint\n");
|
|
return 0;
|
|
|
|
Fail:
|
|
printf ("Failed Conformance Test c99stdint\n");
|
|
}
|