diff options
Diffstat (limited to 'distrib/sdl-1.2.15/test/testplatform.c')
-rw-r--r-- | distrib/sdl-1.2.15/test/testplatform.c | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/distrib/sdl-1.2.15/test/testplatform.c b/distrib/sdl-1.2.15/test/testplatform.c new file mode 100644 index 0000000..328a96f --- /dev/null +++ b/distrib/sdl-1.2.15/test/testplatform.c @@ -0,0 +1,210 @@ + +#include <stdio.h> + +#include "SDL.h" +#include "SDL_endian.h" +#include "SDL_cpuinfo.h" + +/* + * Watcom C flags these as Warning 201: "Unreachable code" if you just + * compare them directly, so we push it through a function to keep the + * compiler quiet. --ryan. + */ +static int badsize(size_t sizeoftype, size_t hardcodetype) +{ + return sizeoftype != hardcodetype; +} + +int TestTypes(SDL_bool verbose) +{ + int error = 0; + + if ( badsize(sizeof(Uint8), 1) ) { + if ( verbose ) + printf("sizeof(Uint8) != 1, instead = %lu\n", + (unsigned long) sizeof(Uint8)); + ++error; + } + if ( badsize(sizeof(Uint16), 2) ) { + if ( verbose ) + printf("sizeof(Uint16) != 2, instead = %lu\n", + (unsigned long) sizeof(Uint16)); + ++error; + } + if ( badsize(sizeof(Uint32), 4) ) { + if ( verbose ) + printf("sizeof(Uint32) != 4, instead = %lu\n", + (unsigned long) sizeof(Uint32)); + ++error; + } +#ifdef SDL_HAS_64BIT_TYPE + if ( badsize(sizeof(Uint64), 8) ) { + if ( verbose ) + printf("sizeof(Uint64) != 8, instead = %lu\n", + (unsigned long) sizeof(Uint64)); + ++error; + } +#else + if ( verbose ) { + printf("WARNING: No 64-bit datatype on this platform\n"); + } +#endif + if ( verbose && !error ) + printf("All data types are the expected size.\n"); + + return( error ? 1 : 0 ); +} + +int TestEndian(SDL_bool verbose) +{ + int error = 0; + Uint16 value = 0x1234; + int real_byteorder; + Uint16 value16 = 0xCDAB; + Uint16 swapped16 = 0xABCD; + Uint32 value32 = 0xEFBEADDE; + Uint32 swapped32 = 0xDEADBEEF; +#ifdef SDL_HAS_64BIT_TYPE + Uint64 value64, swapped64; + value64 = 0xEFBEADDE; + value64 <<= 32; + value64 |= 0xCDAB3412; + swapped64 = 0x1234ABCD; + swapped64 <<= 32; + swapped64 |= 0xDEADBEEF; +#endif + + if ( verbose ) { + printf("Detected a %s endian machine.\n", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big"); + } + if ( (*((char *)&value) >> 4) == 0x1 ) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + if ( real_byteorder != SDL_BYTEORDER ) { + if ( verbose ) { + printf("Actually a %s endian machine!\n", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big"); + } + ++error; + } + if ( verbose ) { + printf("Value 16 = 0x%X, swapped = 0x%X\n", value16, SDL_Swap16(value16)); + } + if ( SDL_Swap16(value16) != swapped16 ) { + if ( verbose ) { + printf("16 bit value swapped incorrectly!\n"); + } + ++error; + } + if ( verbose ) { + printf("Value 32 = 0x%X, swapped = 0x%X\n", value32, SDL_Swap32(value32)); + } + if ( SDL_Swap32(value32) != swapped32 ) { + if ( verbose ) { + printf("32 bit value swapped incorrectly!\n"); + } + ++error; + } +#ifdef SDL_HAS_64BIT_TYPE + if ( verbose ) { +#ifdef _MSC_VER + printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64, SDL_Swap64(value64)); +#else + printf("Value 64 = 0x%llX, swapped = 0x%llX\n", (unsigned long long) value64, (unsigned long long) SDL_Swap64(value64)); +#endif + } + if ( SDL_Swap64(value64) != swapped64 ) { + if ( verbose ) { + printf("64 bit value swapped incorrectly!\n"); + } + ++error; + } +#endif + return( error ? 1 : 0 ); +} + + +int TestCPUInfo(SDL_bool verbose) +{ + if ( verbose ) { + printf("RDTSC %s\n", SDL_HasRDTSC() ? "detected" : "not detected"); + printf("MMX %s\n", SDL_HasMMX() ? "detected" : "not detected"); + printf("MMX Ext %s\n", SDL_HasMMXExt() ? "detected" : "not detected"); + printf("3DNow %s\n", SDL_Has3DNow() ? "detected" : "not detected"); + printf("3DNow Ext %s\n", SDL_Has3DNowExt() ? "detected" : "not detected"); + printf("SSE %s\n", SDL_HasSSE() ? "detected" : "not detected"); + printf("SSE2 %s\n", SDL_HasSSE2() ? "detected" : "not detected"); + printf("AltiVec %s\n", SDL_HasAltiVec() ? "detected" : "not detected"); + } + return(0); +} + +int main(int argc, char *argv[]) +{ + SDL_bool verbose = SDL_TRUE; + int status = 0; + + if ( argv[1] && (SDL_strcmp(argv[1], "-q") == 0) ) { + verbose = SDL_FALSE; + } + if ( verbose ) { + printf("This system is running %s\n", +#if __AIX__ + "AIX" +#elif __HAIKU__ +/* Haiku must appear here before BeOS, since it also defines __BEOS__ */ + "Haiku" +#elif __BEOS__ + "BeOS" +#elif __BSDI__ + "BSDI" +#elif __DREAMCAST__ + "Dreamcast" +#elif __FREEBSD__ + "FreeBSD" +#elif __HPUX__ + "HP-UX" +#elif __IRIX__ + "Irix" +#elif __LINUX__ + "Linux" +#elif __MINT__ + "Atari MiNT" +#elif __MACOS__ + "MacOS Classic" +#elif __MACOSX__ + "Mac OS X" +#elif __NETBSD__ + "NetBSD" +#elif __OPENBSD__ + "OpenBSD" +#elif __OS2__ + "OS/2" +#elif __OSF__ + "OSF/1" +#elif __QNXNTO__ + "QNX Neutrino" +#elif __RISCOS__ + "RISC OS" +#elif __SOLARIS__ + "Solaris" +#elif __WIN32__ +#ifdef _WIN32_WCE + "Windows CE" +#else + "Windows" +#endif +#else + "an unknown operating system! (see SDL_platform.h)" +#endif + ); + } + + status += TestTypes(verbose); + status += TestEndian(verbose); + status += TestCPUInfo(verbose); + return status; +} |