testplatform.c
Go to the documentation of this file.
/*
Copyright (C) 1997-2016 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely.
*/
#include <stdio.h>
#include "SDL.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)
SDL_Log("sizeof(Uint8) != 1, instead = %u\n",
(unsigned int)sizeof(Uint8));
++error;
}
if (badsize(sizeof(Uint16), 2)) {
if (verbose)
SDL_Log("sizeof(Uint16) != 2, instead = %u\n",
(unsigned int)sizeof(Uint16));
++error;
}
if (badsize(sizeof(Uint32), 4)) {
if (verbose)
SDL_Log("sizeof(Uint32) != 4, instead = %u\n",
(unsigned int)sizeof(Uint32));
++error;
}
if (badsize(sizeof(Uint64), 8)) {
if (verbose)
SDL_Log("sizeof(Uint64) != 8, instead = %u\n",
(unsigned int)sizeof(Uint64));
++error;
}
if (verbose && !error)
SDL_Log("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;
Uint64 value64, swapped64;
value64 = 0xEFBEADDE;
value64 <<= 32;
value64 |= 0xCDAB3412;
swapped64 = 0x1234ABCD;
swapped64 <<= 32;
swapped64 |= 0xDEADBEEF;
if (verbose) {
SDL_Log("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) {
SDL_Log("Actually a %s endian machine!\n",
(real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big");
}
++error;
}
if (verbose) {
SDL_Log("Value 16 = 0x%X, swapped = 0x%X\n", value16,
SDL_Swap16(value16));
}
if (SDL_Swap16(value16) != swapped16) {
if (verbose) {
SDL_Log("16 bit value swapped incorrectly!\n");
}
++error;
}
if (verbose) {
SDL_Log("Value 32 = 0x%X, swapped = 0x%X\n", value32,
SDL_Swap32(value32));
}
if (SDL_Swap32(value32) != swapped32) {
if (verbose) {
SDL_Log("32 bit value swapped incorrectly!\n");
}
++error;
}
if (verbose) {
SDL_Log("Value 64 = 0x%"SDL_PRIX64", swapped = 0x%"SDL_PRIX64"\n", value64,
SDL_Swap64(value64));
}
if (SDL_Swap64(value64) != swapped64) {
if (verbose) {
SDL_Log("64 bit value swapped incorrectly!\n");
}
++error;
}
return (error ? 1 : 0);
}
int
TestCPUInfo(SDL_bool verbose)
{
if (verbose) {
SDL_Log("CPU count: %d\n", SDL_GetCPUCount());
SDL_Log("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize());
SDL_Log("RDTSC %s\n", SDL_HasRDTSC()? "detected" : "not detected");
SDL_Log("AltiVec %s\n", SDL_HasAltiVec()? "detected" : "not detected");
SDL_Log("MMX %s\n", SDL_HasMMX()? "detected" : "not detected");
SDL_Log("3DNow! %s\n", SDL_Has3DNow()? "detected" : "not detected");
SDL_Log("SSE %s\n", SDL_HasSSE()? "detected" : "not detected");
SDL_Log("SSE2 %s\n", SDL_HasSSE2()? "detected" : "not detected");
SDL_Log("SSE3 %s\n", SDL_HasSSE3()? "detected" : "not detected");
SDL_Log("SSE4.1 %s\n", SDL_HasSSE41()? "detected" : "not detected");
SDL_Log("SSE4.2 %s\n", SDL_HasSSE42()? "detected" : "not detected");
SDL_Log("AVX %s\n", SDL_HasAVX()? "detected" : "not detected");
SDL_Log("System RAM %d MB\n", SDL_GetSystemRAM());
}
return (0);
}
int
TestAssertions(SDL_bool verbose)
{
SDL_assert(1);
SDL_assert_release(1);
SDL_assert_paranoid(1);
SDL_assert(0 || 1);
SDL_assert_release(0 || 1);
SDL_assert_paranoid(0 || 1);
#if 0 /* enable this to test assertion failures. */
SDL_assert_release(1 == 2);
SDL_assert_release(5 < 4);
SDL_assert_release(0 && "This is a test");
#endif
{
const SDL_AssertData *item = SDL_GetAssertionReport();
while (item) {
SDL_Log("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\n",
item->condition, item->function, item->filename,
item->linenum, item->trigger_count,
item->always_ignore ? "yes" : "no");
item = item->next;
}
}
return (0);
}
int
main(int argc, char *argv[])
{
SDL_bool verbose = SDL_TRUE;
int status = 0;
/* Enable standard application logging */
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
if (argv[1] && (SDL_strcmp(argv[1], "-q") == 0)) {
verbose = SDL_FALSE;
}
if (verbose) {
SDL_Log("This system is running %s\n", SDL_GetPlatform());
}
status += TestTypes(verbose);
status += TestEndian(verbose);
status += TestCPUInfo(verbose);
status += TestAssertions(verbose);
return status;
}
SDL_AssertData::next
const struct SDL_AssertData * next
Definition: SDL_assert.h:117
SDL_HasAltiVec
#define SDL_HasAltiVec
Definition: SDL_dynapi_overrides.h:110
SDL_HasAVX
#define SDL_HasAVX
Definition: SDL_dynapi_overrides.h:575
SDL_AssertData::filename
const char * filename
Definition: SDL_assert.h:114
SDL_Has3DNow
#define SDL_Has3DNow
Definition: SDL_dynapi_overrides.h:112
x1
GLuint GLfloat GLfloat GLfloat x1
Definition: SDL_opengl_glext.h:8583
SDL_GetSystemRAM
#define SDL_GetSystemRAM
Definition: SDL_dynapi_overrides.h:118
TestAssertions
int TestAssertions(SDL_bool verbose)
Definition: testplatform.c:154
Uint32
uint32_t Uint32
An unsigned 32-bit integer type.
Definition: SDL_stdinc.h:157
main
int main(int argc, char *argv[])
Definition: testplatform.c:183
SDL_AssertData::function
const char * function
Definition: SDL_assert.h:116
SDL_LIL_ENDIAN
#define SDL_LIL_ENDIAN
Definition: SDL_endian.h:37
SDL_HasSSE3
#define SDL_HasSSE3
Definition: SDL_dynapi_overrides.h:115
TestEndian
int TestEndian(SDL_bool verbose)
Definition: testplatform.c:64
SDL_GetAssertionReport
#define SDL_GetAssertionReport
Definition: SDL_dynapi_overrides.h:67
Uint64
uint64_t Uint64
An unsigned 64-bit integer type.
Definition: SDL_stdinc.h:166
SDL_HasRDTSC
#define SDL_HasRDTSC
Definition: SDL_dynapi_overrides.h:109
SDL_AssertData::trigger_count
unsigned int trigger_count
Definition: SDL_assert.h:112
SDL_Swap32
SDL_FORCE_INLINE Uint32 SDL_Swap32(Uint32 x)
Definition: SDL_endian.h:141
SDL_bool
SDL_bool
Definition: SDL_stdinc.h:126
SDL_AssertData::condition
const char * condition
Definition: SDL_assert.h:113
SDL_assert_paranoid
#define SDL_assert_paranoid(condition)
Definition: SDL_assert.h:169
SDL_Log
#define SDL_Log
Definition: SDL_dynapi_overrides.h:37
value
GLsizei const GLfloat * value
Definition: SDL_opengl_glext.h:698
Uint8
uint8_t Uint8
An unsigned 8-bit integer type.
Definition: SDL_stdinc.h:139
SDL_AssertData::always_ignore
int always_ignore
Definition: SDL_assert.h:111
SDL_AssertData::linenum
int linenum
Definition: SDL_assert.h:115
SDL_Swap16
SDL_FORCE_INLINE Uint16 SDL_Swap16(Uint16 x)
Definition: SDL_endian.h:101
SDL_HasSSE42
#define SDL_HasSSE42
Definition: SDL_dynapi_overrides.h:117
SDL_GetPlatform
#define SDL_GetPlatform
Definition: SDL_dynapi_overrides.h:297
SDL_LOG_PRIORITY_INFO
Definition: SDL_log.h:106
SDL_HasMMX
#define SDL_HasMMX
Definition: SDL_dynapi_overrides.h:111
SDL_TRUE
Definition: SDL_stdinc.h:129
badsize
static int badsize(size_t sizeoftype, size_t hardcodetype)
Definition: testplatform.c:23
SDL_GetCPUCacheLineSize
#define SDL_GetCPUCacheLineSize
Definition: SDL_dynapi_overrides.h:108
SDL_HasSSE41
#define SDL_HasSSE41
Definition: SDL_dynapi_overrides.h:116
SDL_PRIX64
#define SDL_PRIX64
Definition: SDL_stdinc.h:210
SDL_assert
#define SDL_assert(condition)
Definition: SDL_assert.h:167
SDL_LogSetPriority
#define SDL_LogSetPriority
Definition: SDL_dynapi_overrides.h:242
SDL_GetCPUCount
#define SDL_GetCPUCount
Definition: SDL_dynapi_overrides.h:107
SDL_BIG_ENDIAN
#define SDL_BIG_ENDIAN
Definition: SDL_endian.h:38
SDL_HasSSE2
#define SDL_HasSSE2
Definition: SDL_dynapi_overrides.h:114
SDL_Swap64
SDL_FORCE_INLINE Uint64 SDL_Swap64(Uint64 x)
Definition: SDL_endian.h:175
SDL_FALSE
Definition: SDL_stdinc.h:128
Uint16
uint16_t Uint16
An unsigned 16-bit integer type.
Definition: SDL_stdinc.h:147
SDL_strcmp
#define SDL_strcmp
Definition: SDL_dynapi_overrides.h:423
TestCPUInfo
int TestCPUInfo(SDL_bool verbose)
Definition: testplatform.c:133
SDL.h
TestTypes
int TestTypes(SDL_bool verbose)
Definition: testplatform.c:29
SDL_assert_release
#define SDL_assert_release(condition)
Definition: SDL_assert.h:168
SDL_HasSSE
#define SDL_HasSSE
Definition: SDL_dynapi_overrides.h:113
SDL_BYTEORDER
#define SDL_BYTEORDER
Definition: SDL_config_pandora.h:36
SDL_LOG_CATEGORY_APPLICATION
Definition: SDL_log.h:66
SDL_AssertData
Definition: SDL_assert.h:109