test/testplatform.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 13 Apr 2006 13:08:26 +0000
changeset 1621 f12379c41042
parent 1615 d5298e8f22b3
child 1662 782fd950bd46
child 1895 c121d94672cb
child 3888 6d2e1961661a
permissions -rw-r--r--
Fixes bug #195:
The proper name of Apple's operating system is "Mac OS X" not "MacOS X", as can
bee seen in many places, for example http://www.apple.com/macosx/). This
contrasts the naming of the old operating system, which was called "MacOS" and
today is often refered to as "MacOS Classic".

The attached patches fixes the misuse of the name "MacOS X" in both the SDL12
and sdlweb CVS modules.
     1 
     2 #include <stdio.h>
     3 
     4 #include "SDL.h"
     5 #include "SDL_endian.h"
     6 #include "SDL_cpuinfo.h"
     7 
     8 /*
     9  * Watcom C flags these as Warning 201: "Unreachable code" if you just
    10  *  compare them directly, so we push it through a function to keep the
    11  *  compiler quiet.  --ryan.
    12  */
    13 static int badsize(size_t sizeoftype, size_t hardcodetype)
    14 {
    15     return sizeoftype != hardcodetype;
    16 }
    17 
    18 int TestTypes(SDL_bool verbose)
    19 {
    20 	int error = 0;
    21 
    22 	if ( badsize(sizeof(Uint8), 1) ) {
    23 		if ( verbose )
    24 			printf("sizeof(Uint8) != 1, instead = %ul\n",
    25 								sizeof(Uint8));
    26 		++error;
    27 	}
    28 	if ( badsize(sizeof(Uint16), 2) ) {
    29 		if ( verbose )
    30 			printf("sizeof(Uint16) != 2, instead = %ul\n",
    31 								sizeof(Uint16));
    32 		++error;
    33 	}
    34 	if ( badsize(sizeof(Uint32), 4) ) {
    35 		if ( verbose )
    36 			printf("sizeof(Uint32) != 4, instead = %ul\n",
    37 								sizeof(Uint32));
    38 		++error;
    39 	}
    40 #ifdef SDL_HAS_64BIT_TYPE
    41 	if ( badsize(sizeof(Uint64), 8) ) {
    42 		if ( verbose )
    43 			printf("sizeof(Uint64) != 8, instead = %ul\n",
    44 								sizeof(Uint64));
    45 		++error;
    46 	}
    47 #else
    48 	if ( verbose ) {
    49 		printf("WARNING: No 64-bit datatype on this platform\n");
    50 	}
    51 #endif
    52 	if ( verbose && !error )
    53 		printf("All data types are the expected size.\n");
    54 
    55 	return( error ? 1 : 0 );
    56 }
    57 
    58 int TestEndian(SDL_bool verbose)
    59 {
    60 	int error = 0;
    61 	Uint16 value = 0x1234;
    62 	int real_byteorder;
    63 	Uint16 value16 = 0xCDAB;
    64 	Uint16 swapped16 = 0xABCD;
    65 	Uint32 value32 = 0xEFBEADDE;
    66 	Uint32 swapped32 = 0xDEADBEEF;
    67 #ifdef SDL_HAS_64BIT_TYPE
    68 	Uint64 value64, swapped64;
    69 	value64 = 0xEFBEADDE;
    70 	value64 <<= 32;
    71 	value64 |= 0xCDAB3412;
    72 	swapped64 = 0x1234ABCD;
    73 	swapped64 <<= 32;
    74 	swapped64 |= 0xDEADBEEF;
    75 #endif
    76 
    77 	if ( verbose ) {
    78 		printf("Detected a %s endian machine.\n",
    79 			(SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big");
    80 	}
    81 	if ( (*((char *)&value) >> 4) == 0x1 ) {
    82 		real_byteorder = SDL_BIG_ENDIAN;
    83 	} else {
    84 		real_byteorder = SDL_LIL_ENDIAN;
    85 	}
    86 	if ( real_byteorder != SDL_BYTEORDER ) {
    87 		if ( verbose ) {
    88 			printf("Actually a %s endian machine!\n",
    89 				(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big");
    90 		}
    91 		++error;
    92 	}
    93 	if ( verbose ) {
    94 		printf("Value 16 = 0x%X, swapped = 0x%X\n", value16, SDL_Swap16(value16));
    95 	}
    96 	if ( SDL_Swap16(value16) != swapped16 ) {
    97 		if ( verbose ) {
    98 			printf("16 bit value swapped incorrectly!\n");
    99 		}
   100 		++error;
   101 	}
   102 	if ( verbose ) {
   103 		printf("Value 32 = 0x%X, swapped = 0x%X\n", value32, SDL_Swap32(value32));
   104 	}
   105 	if ( SDL_Swap32(value32) != swapped32 ) {
   106 		if ( verbose ) {
   107 			printf("32 bit value swapped incorrectly!\n");
   108 		}
   109 		++error;
   110 	}
   111 #ifdef SDL_HAS_64BIT_TYPE
   112 	if ( verbose ) {
   113 #ifdef _MSC_VER
   114 		printf("Value 64 = 0x%I64X, swapped = 0x%I64X\n", value64, SDL_Swap64(value64));
   115 #else
   116 		printf("Value 64 = 0x%llX, swapped = 0x%llX\n", value64, SDL_Swap64(value64));
   117 #endif
   118 	}
   119 	if ( SDL_Swap64(value64) != swapped64 ) {
   120 		if ( verbose ) {
   121 			printf("64 bit value swapped incorrectly!\n");
   122 		}
   123 		++error;
   124 	}
   125 #endif
   126 	return( error ? 1 : 0 );
   127 }
   128 
   129 
   130 int TestCPUInfo(SDL_bool verbose)
   131 {
   132 	if ( verbose ) {
   133 		printf("RDTSC %s\n", SDL_HasRDTSC() ? "detected" : "not detected");
   134 		printf("MMX %s\n", SDL_HasMMX() ? "detected" : "not detected");
   135 		printf("MMX Ext %s\n", SDL_HasMMXExt() ? "detected" : "not detected");
   136 		printf("3DNow %s\n", SDL_Has3DNow() ? "detected" : "not detected");
   137 		printf("3DNow Ext %s\n", SDL_Has3DNowExt() ? "detected" : "not detected");
   138 		printf("SSE %s\n", SDL_HasSSE() ? "detected" : "not detected");
   139 		printf("SSE2 %s\n", SDL_HasSSE2() ? "detected" : "not detected");
   140 		printf("AltiVec %s\n", SDL_HasAltiVec() ? "detected" : "not detected");
   141 	}
   142 	return(0);
   143 }
   144 
   145 int main(int argc, char *argv[])
   146 {
   147 	SDL_bool verbose = SDL_TRUE;
   148 	int status = 0;
   149 
   150 	if ( argv[1] && (SDL_strcmp(argv[1], "-q") == 0) ) {
   151 		verbose = SDL_FALSE;
   152 	}
   153 	if ( verbose ) {
   154 		printf("This system is running %s\n",
   155 #if __AIX__
   156 			"AIX"
   157 #elif __AMIGA__
   158 			"AmigaOS"
   159 #elif __BEOS__
   160 			"BeOS"
   161 #elif __BSDI__
   162 			"BSDI"
   163 #elif __DREAMCAST__
   164 			"Dreamcast"
   165 #elif __FREEBSD__
   166 			"FreeBSD"
   167 #elif __HPUX__
   168 			"HP-UX"
   169 #elif __IRIX__
   170 			"Irix"
   171 #elif __LINUX__
   172 			"Linux"
   173 #elif __MINT__
   174 			"Atari MiNT"
   175 #elif __MACOS__
   176 			"MacOS Classic"
   177 #elif __MACOSX__
   178 			"Mac OS X"
   179 #elif __NETBSD__
   180 			"NetBSD"
   181 #elif __OPENBSD__
   182 			"OpenBSD"
   183 #elif __OS2__
   184 			"OS/2"
   185 #elif __OSF__
   186 			"OSF/1"
   187 #elif __QNXNTO__
   188 			"QNX Neutrino"
   189 #elif __RISCOS__
   190 			"RISC OS"
   191 #elif __SOLARIS__
   192 			"Solaris"
   193 #elif __WIN32__
   194 #ifdef _WIN32_WCE
   195 			"Windows CE"
   196 #else
   197 			"Windows"
   198 #endif
   199 #else
   200 			"an unknown operating system! (see SDL_platform.h)"
   201 #endif
   202 		);
   203 	}
   204 
   205 	status += TestTypes(verbose);
   206 	status += TestEndian(verbose);
   207 	status += TestCPUInfo(verbose);
   208 	return status;
   209 }