Mercurial > sdl-ios-xcode
diff test/automated/platform/platform.c @ 3259:22ac66da0765
Merged Edgar's code changes from Google Summer of Code 2009
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 07 Sep 2009 05:06:34 +0000 |
parents | |
children | 245a7d79577c |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/automated/platform/platform.c Mon Sep 07 05:06:34 2009 +0000 @@ -0,0 +1,231 @@ +/** + * Automated SDL platform test. + * + * Based off of testplatform.c. + * + * Written by Edgar Simo "bobbens" + * + * Released under Public Domain. + */ + + + + +#include "SDL.h" +#include "SDL_at.h" +#include "SDL_endian.h" +#include "SDL_cpuinfo.h" + + +/* + * Prototypes. + */ +static int plat_testSize( size_t sizeoftype, size_t hardcodetype ); +static void plat_testTypes (void); + + +/** + * @brief Test size. + * + * @note 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 plat_testSize( size_t sizeoftype, size_t hardcodetype ) +{ + return sizeoftype != hardcodetype; +} + + +/** + * @brief Tests type size. + */ +static void plat_testTypes (void) +{ + int ret; + + SDL_ATbegin( "Type size" ); + + ret = plat_testSize( sizeof(Uint8), 1 ); + if (SDL_ATvassert( ret == 0, "sizeof(Uint8) = %ul instead of 1", sizeof(Uint8) )) + return; + + ret = plat_testSize( sizeof(Uint16), 2 ); + if (SDL_ATvassert( ret == 0, "sizeof(Uint16) = %ul instead of 2", sizeof(Uint16) )) + return; + + ret = plat_testSize( sizeof(Uint32), 4 ); + if (SDL_ATvassert( ret == 0, "sizeof(Uint32) = %ul instead of 4", sizeof(Uint32) )) + return; + +#ifdef SDL_HAS_64BIT_TYPE + ret = plat_testSize( sizeof(Uint64), 8 ); + if (SDL_ATvassert( ret == 0, "sizeof(Uint64) = %ul instead of 8", sizeof(Uint64) )) + return; +#endif /* SDL_HAS_64BIT_TYPE */ + + SDL_ATend(); +} + + +/** + * @brief Tests platform endianness. + */ +static void plat_testEndian (void) +{ + 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 + + SDL_ATbegin( "Endianness" ); + + /* Test endianness. */ + if ((*((char *) &value) >> 4) == 0x1) { + real_byteorder = SDL_BIG_ENDIAN; + } else { + real_byteorder = SDL_LIL_ENDIAN; + } + if (SDL_ATvassert( real_byteorder == SDL_BYTEORDER, + "Machine detected as %s endian but appears to be %s endian.", + (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big", + (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" )) + return; + + /* Test 16 swap. */ + if (SDL_ATvassert( SDL_Swap16(value16) == swapped16, + "16 bit swapped incorrectly: 0x%X => 0x%X", + value16, SDL_Swap16(value16) )) + return; + + /* Test 32 swap. */ + if (SDL_ATvassert( SDL_Swap32(value32) == swapped32, + "32 bit swapped incorrectly: 0x%X => 0x%X", + value32, SDL_Swap32(value32) )) + return; + +#ifdef SDL_HAS_64BIT_TYPE + /* Test 64 swap. */ + if (SDL_ATvassert( SDL_Swap64(value64) == swapped64, +#ifdef _MSC_VER + "64 bit swapped incorrectly: 0x%I64X => 0x%I64X", +#else + "64 bit swapped incorrectly: 0x%llX => 0x%llX", +#endif + value64, SDL_Swap64(value64) )) + return; +#endif + + SDL_ATend(); +} + + +/** + * @brief Gets the name of the platform. + */ +const char *platform_getPlatform (void) +{ + return +#if __AIX__ + "AIX" +#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 +#elif __IPHONEOS__ + "iPhone OS" +#else + "an unknown operating system! (see SDL_platform.h)" +#endif + ; +} + + +/** + * @brief Platform test entrypoint. + */ +#ifdef TEST_STANDALONE +int main( int argc, const char *argv[] ) +{ + (void) argc; + (void) argv; +#else /* TEST_STANDALONE */ +int test_platform (void) +{ +#endif /* TEST_STANDALONE */ + + SDL_ATinit( "Platform" ); + + /* Debug information. */ + SDL_ATprintVerbose( 1, "%s System detected\n", platform_getPlatform() ); + SDL_ATprintVerbose( 1, "System is %s endian\n", +#ifdef SDL_LIL_ENDIAN + "little" +#else + "big" +#endif + ); + SDL_ATprintVerbose( 1, "Available extensions:\n" ); + SDL_ATprintVerbose( 1, " RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " MMX %s\n", SDL_HasMMX()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " MMX Ext %s\n", SDL_HasMMXExt()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " 3DNow %s\n", SDL_Has3DNow()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " 3DNow Ext %s\n", + SDL_Has3DNowExt()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " SSE %s\n", SDL_HasSSE()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected" ); + SDL_ATprintVerbose( 1, " AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected" ); + + plat_testTypes(); + plat_testEndian(); + + return SDL_ATfinish(); +}