Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Added platform test based ot testplatform.c.
Browse files Browse the repository at this point in the history
  • Loading branch information
bobbens committed Jul 20, 2009
1 parent 3dc09ec commit f9d34c8
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 1 deletion.
6 changes: 5 additions & 1 deletion test/automated/Makefile
Expand Up @@ -10,7 +10,7 @@ LDFLAGS := `sdl-config --libs`
COMMON_SRC := SDL_at.c common/common.c
COMMON_INCLUDE := SDL_at.h

TESTS_ALL := rwops/rwops surface/surface render/render
TESTS_ALL := rwops/rwops platform/platform surface/surface render/render


.PHONY: all clean test
Expand All @@ -20,12 +20,16 @@ all: $(TESTS_ALL)

test: all
@./rwops/rwops
@./platform/platform
@./surface/surface
@./render/render

rwops/rwops: rwops/rwops.c $(COMMON_INCLUDE) $(COMMON_SRC)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ rwops/rwops.c $(COMMON_SRC)

platform/platform: platform/platform.c $(COMMON_INCLUDE) $(COMMON_SRC)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ platform/platform.c $(COMMON_SRC)

surface/surface: surface/surface.c $(COMMON_INCLUDE) $(COMMON_SRC)
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ surface/surface.c $(COMMON_SRC)

Expand Down
145 changes: 145 additions & 0 deletions test/automated/platform/platform.c
@@ -0,0 +1,145 @@
/**
* 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();
}


int main(int argc, char *argv[])
{
(void) argc;
(void) argv;

SDL_ATinit( "Platform" );

plat_testTypes();
plat_testEndian();

return SDL_ATfinish(1);
}

0 comments on commit f9d34c8

Please sign in to comment.