test/test-automation/testplatform/testplatform.c
author Andreas Schiffler
Sun, 17 Jul 2011 20:59:34 -0700
changeset 5766 8cc2ae74cd83
parent 5763 7e74c43ecda2
child 5774 4f9f82aa1a33
permissions -rw-r--r--
Fixed SDL_SetError() by making NULL fmt a no-op, update test automation
markus@5702
     1
/**
markus@5702
     2
 * Original code: automated SDL platform test written by Edgar Simo "bobbens"
aschiffler@5763
     3
 * Extended and updated by aschiffler at ferzkopp dot net
markus@5702
     4
 */
markus@5702
     5
markus@5702
     6
#include <stdio.h>
markus@5702
     7
markus@5702
     8
#include <SDL/SDL.h>
markus@5702
     9
markus@5702
    10
#include "../SDL_test.h"
markus@5702
    11
markus@5702
    12
/* Test cases */
markus@5702
    13
static const TestCaseReference test1 =
aschiffler@5763
    14
		(TestCaseReference){ "platform_testTypes", "Tests predefined types", TEST_ENABLED, 0, 0 };
markus@5702
    15
markus@5702
    16
static const TestCaseReference test2 =
aschiffler@5763
    17
		(TestCaseReference){ "platform_testEndianessAndSwap", "Tests endianess and swap functions", TEST_ENABLED, 0, 0 };
markus@5702
    18
markus@5702
    19
static const TestCaseReference test3 =
aschiffler@5763
    20
		(TestCaseReference){ "platform_testGetFunctions", "Tests various SDL_GetXYZ functions", TEST_ENABLED, 0, 0 };
markus@5702
    21
markus@5702
    22
static const TestCaseReference test4 =
aschiffler@5763
    23
		(TestCaseReference){ "platform_testHasFunctions", "Tests various SDL_HasXYZ functions", TEST_ENABLED, 0, 0 };
aschiffler@5763
    24
aschiffler@5763
    25
static const TestCaseReference test5 =
aschiffler@5763
    26
		(TestCaseReference){ "platform_testGetVersion", "Tests SDL_GetVersion function", TEST_ENABLED, 0, 0 };
aschiffler@5763
    27
aschiffler@5763
    28
static const TestCaseReference test6 =
aschiffler@5763
    29
		(TestCaseReference){ "platform_testSDLVersion", "Tests SDL_VERSION macro", TEST_ENABLED, 0, 0 };
aschiffler@5763
    30
aschiffler@5763
    31
static const TestCaseReference test7 =
aschiffler@5763
    32
		(TestCaseReference){ "platform_testDefaultInit", "Tests default SDL_Init", TEST_ENABLED, 0, 0 };
aschiffler@5763
    33
aschiffler@5763
    34
static const TestCaseReference test8 =
aschiffler@5763
    35
		(TestCaseReference){ "platform_testGetSetClearError", "Tests SDL_Get/Set/ClearError", TEST_ENABLED, 0, 0 };
aschiffler@5763
    36
aschiffler@5763
    37
static const TestCaseReference test9 =
aschiffler@5763
    38
		(TestCaseReference){ "platform_testSetErrorEmptyInput", "Tests SDL_SetError with empty input", TEST_ENABLED, 0, 0 };
aschiffler@5763
    39
aschiffler@5763
    40
static const TestCaseReference test10 =
aschiffler@5763
    41
		(TestCaseReference){ "platform_testSetErrorInvalidInput", "Tests SDL_SetError with invalid input", TEST_ENABLED, 0, 0 };
markus@5702
    42
markus@5702
    43
/* Test suite */
markus@5702
    44
extern const TestCaseReference *testSuite[] =  {
aschiffler@5763
    45
	&test1, &test2, &test3, &test4, &test5, &test6, &test7, &test8, &test9, &test10, NULL
markus@5702
    46
};
markus@5702
    47
markus@5702
    48
TestCaseReference **QueryTestSuite() {
markus@5702
    49
	return (TestCaseReference **)testSuite;
markus@5702
    50
}
markus@5702
    51
markus@5702
    52
/**
markus@5702
    53
 * @brief Compare sizes of types.
markus@5702
    54
 *
markus@5702
    55
 * @note Watcom C flags these as Warning 201: "Unreachable code" if you just
markus@5702
    56
 *  compare them directly, so we push it through a function to keep the
markus@5702
    57
 *  compiler quiet.  --ryan.
markus@5702
    58
 */
markus@5702
    59
static int _compareSizeOfType( size_t sizeoftype, size_t hardcodetype )
markus@5702
    60
{
markus@5702
    61
    return sizeoftype != hardcodetype;
markus@5702
    62
}
markus@5702
    63
markus@5702
    64
/**
markus@5702
    65
 * @brief Tests type sizes.
markus@5702
    66
 */
markus@5702
    67
int platform_testTypes(void *arg)
markus@5702
    68
{
markus@5702
    69
   int ret;
markus@5702
    70
markus@5702
    71
   ret = _compareSizeOfType( sizeof(Uint8), 1 );
aschiffler@5763
    72
   AssertTrue( ret == 0, "sizeof(Uint8) = %lu, expected  1", sizeof(Uint8) );
markus@5702
    73
markus@5702
    74
   ret = _compareSizeOfType( sizeof(Uint16), 2 );
aschiffler@5763
    75
   AssertTrue( ret == 0, "sizeof(Uint16) = %lu, expected 2", sizeof(Uint16) );
markus@5702
    76
markus@5702
    77
   ret = _compareSizeOfType( sizeof(Uint32), 4 );
aschiffler@5763
    78
   AssertTrue( ret == 0, "sizeof(Uint32) = %lu, expected 4", sizeof(Uint32) );
markus@5702
    79
markus@5702
    80
   ret = _compareSizeOfType( sizeof(Uint64), 8 );
aschiffler@5763
    81
   AssertTrue( ret == 0, "sizeof(Uint64) = %lu, expected 8", sizeof(Uint64) );
markus@5702
    82
}
markus@5702
    83
markus@5702
    84
/**
markus@5702
    85
 * @brief Tests platform endianness and SDL_SwapXY functions.
markus@5702
    86
 */
markus@5702
    87
int platform_testEndianessAndSwap(void *arg)
markus@5702
    88
{
markus@5702
    89
    int real_byteorder;
markus@5702
    90
    Uint16 value = 0x1234;
markus@5702
    91
    Uint16 value16 = 0xCDAB;
markus@5702
    92
    Uint16 swapped16 = 0xABCD;
markus@5702
    93
    Uint32 value32 = 0xEFBEADDE;
markus@5702
    94
    Uint32 swapped32 = 0xDEADBEEF;
markus@5702
    95
markus@5702
    96
    Uint64 value64, swapped64;
markus@5702
    97
    value64 = 0xEFBEADDE;
markus@5702
    98
    value64 <<= 32;
markus@5702
    99
    value64 |= 0xCDAB3412;
markus@5702
   100
    swapped64 = 0x1234ABCD;
markus@5702
   101
    swapped64 <<= 32;
markus@5702
   102
    swapped64 |= 0xDEADBEEF;
markus@5702
   103
    
markus@5702
   104
    if ((*((char *) &value) >> 4) == 0x1) {
markus@5702
   105
        real_byteorder = SDL_BIG_ENDIAN;
markus@5702
   106
    } else {
markus@5702
   107
        real_byteorder = SDL_LIL_ENDIAN;
markus@5702
   108
    }
markus@5702
   109
markus@5702
   110
    /* Test endianness. */    
markus@5702
   111
    AssertTrue( real_byteorder == SDL_BYTEORDER,
aschiffler@5763
   112
             "Machine detected as %s endian, appears to be %s endian.",
markus@5702
   113
             (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big",
markus@5702
   114
             (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" );
markus@5702
   115
markus@5702
   116
    /* Test 16 swap. */
markus@5702
   117
    AssertTrue( SDL_Swap16(value16) == swapped16,
aschiffler@5763
   118
             "SDL_Swap16(): 16 bit swapped: 0x%X => 0x%X",
markus@5702
   119
             value16, SDL_Swap16(value16) );
markus@5702
   120
markus@5702
   121
    /* Test 32 swap. */
markus@5702
   122
    AssertTrue( SDL_Swap32(value32) == swapped32,
aschiffler@5763
   123
             "SDL_Swap32(): 32 bit swapped: 0x%X => 0x%X",
markus@5702
   124
             value32, SDL_Swap32(value32) );
markus@5702
   125
markus@5702
   126
    /* Test 64 swap. */
markus@5702
   127
    AssertTrue( SDL_Swap64(value64) == swapped64,
markus@5702
   128
#ifdef _MSC_VER
aschiffler@5763
   129
             "SDL_Swap64(): 64 bit swapped: 0x%I64X => 0x%I64X",
markus@5702
   130
#else
aschiffler@5763
   131
             "SDL_Swap64(): 64 bit swapped: 0x%llX => 0x%llX",
markus@5702
   132
#endif
markus@5702
   133
             value64, SDL_Swap64(value64) );
markus@5702
   134
}
markus@5702
   135
markus@5702
   136
/*!
markus@5702
   137
 * \brief Tests SDL_GetXYZ() functions
aschiffler@5763
   138
 * \sa
aschiffler@5763
   139
 * http://wiki.libsdl.org/moin.cgi/SDL_GetPlatform
markus@5702
   140
 */
markus@5702
   141
int platform_testGetFunctions (void *arg)
markus@5702
   142
{
aschiffler@5763
   143
   char *platform;
aschiffler@5763
   144
   char *revision;
markus@5702
   145
   int ret;
aschiffler@5763
   146
   int len;
markus@5702
   147
 
aschiffler@5763
   148
   platform = (char *)SDL_GetPlatform();
markus@5702
   149
   AssertPass("SDL_GetPlatform()");
aschiffler@5763
   150
   AssertTrue(platform != NULL, "SDL_GetPlatform() != NULL");
aschiffler@5763
   151
   if (platform != NULL) {
aschiffler@5763
   152
     len = strlen(platform);
aschiffler@5763
   153
     AssertTrue(len > 0, 
aschiffler@5763
   154
             "SDL_GetPlatform(): expected non-empty platform, was platform: '%s', len: %i", 
aschiffler@5763
   155
             platform, 
aschiffler@5763
   156
             len);
aschiffler@5763
   157
   }
aschiffler@5763
   158
    
markus@5702
   159
   ret = SDL_GetCPUCount();
markus@5702
   160
   AssertPass("SDL_GetCPUCount()");
aschiffler@5763
   161
aschiffler@5763
   162
   revision = (char *)SDL_GetRevision();
aschiffler@5763
   163
   AssertPass("SDL_GetRevision()");
aschiffler@5763
   164
   AssertTrue(revision != NULL, "SDL_GetRevision() != NULL");
aschiffler@5763
   165
aschiffler@5763
   166
   ret = SDL_GetRevisionNumber();
aschiffler@5763
   167
   AssertPass("SDL_GetRevisionNumber()");
markus@5702
   168
}
markus@5702
   169
markus@5702
   170
/*!
markus@5702
   171
 * \brief Tests SDL_HasXYZ() functions
markus@5702
   172
 */
markus@5702
   173
int platform_testHasFunctions (void *arg)
markus@5702
   174
{
markus@5702
   175
   int ret;
markus@5702
   176
   
markus@5702
   177
   // TODO: independently determine and compare values as well
markus@5702
   178
   
markus@5702
   179
   ret = SDL_HasRDTSC();
markus@5702
   180
   AssertPass("SDL_HasRDTSC()");
markus@5702
   181
   
markus@5702
   182
   ret = SDL_HasAltiVec();
markus@5702
   183
   AssertPass("SDL_HasAltiVec()");
markus@5702
   184
markus@5702
   185
   ret = SDL_HasMMX();
markus@5702
   186
   AssertPass("SDL_HasMMX()");
markus@5702
   187
markus@5702
   188
   ret = SDL_Has3DNow();
markus@5702
   189
   AssertPass("SDL_Has3DNow()");
markus@5702
   190
markus@5702
   191
   ret = SDL_HasSSE();
markus@5702
   192
   AssertPass("SDL_HasSSE()");
markus@5702
   193
markus@5702
   194
   ret = SDL_HasSSE2();
markus@5702
   195
   AssertPass("SDL_HasSSE2()");
markus@5702
   196
markus@5702
   197
   ret = SDL_HasSSE3();
markus@5702
   198
   AssertPass("SDL_HasSSE3()");
markus@5702
   199
markus@5702
   200
   ret = SDL_HasSSE41();
markus@5702
   201
   AssertPass("SDL_HasSSE41()");
markus@5702
   202
markus@5702
   203
   ret = SDL_HasSSE42();
markus@5702
   204
   AssertPass("SDL_HasSSE42()");
markus@5702
   205
}
aschiffler@5763
   206
aschiffler@5763
   207
/*!
aschiffler@5763
   208
 * \brief Tests SDL_GetVersion
aschiffler@5763
   209
 */
aschiffler@5763
   210
int platform_testGetVersion(void *arg)
aschiffler@5763
   211
{
aschiffler@5763
   212
   SDL_version linked;
aschiffler@5763
   213
   
aschiffler@5763
   214
   SDL_GetVersion(&linked);
aschiffler@5763
   215
   AssertTrue( linked.major >= SDL_MAJOR_VERSION,
aschiffler@5763
   216
             "SDL_GetVersion(): returned major %i (>= %i)",
aschiffler@5763
   217
             linked.major,
aschiffler@5763
   218
             SDL_MAJOR_VERSION);   
aschiffler@5763
   219
   AssertTrue( linked.minor >= SDL_MINOR_VERSION,
aschiffler@5763
   220
             "SDL_GetVersion(): returned minor %i (>= %i)",
aschiffler@5763
   221
             linked.minor,
aschiffler@5763
   222
             SDL_MINOR_VERSION);   
aschiffler@5763
   223
}
aschiffler@5763
   224
aschiffler@5763
   225
/*!
aschiffler@5763
   226
 * \brief Tests SDL_VERSION macro
aschiffler@5763
   227
 */
aschiffler@5763
   228
int platform_testSDLVersion(void *arg)
aschiffler@5763
   229
{
aschiffler@5763
   230
   SDL_version compiled;
aschiffler@5763
   231
   
aschiffler@5763
   232
   SDL_VERSION(&compiled);
aschiffler@5763
   233
   AssertTrue( compiled.major >= SDL_MAJOR_VERSION,
aschiffler@5763
   234
             "SDL_VERSION() returned major %i (>= %i)",
aschiffler@5763
   235
             compiled.major,
aschiffler@5763
   236
             SDL_MAJOR_VERSION);   
aschiffler@5763
   237
   AssertTrue( compiled.minor >= SDL_MINOR_VERSION,
aschiffler@5763
   238
             "SDL_VERSION() returned minor %i (>= %i)",
aschiffler@5763
   239
             compiled.minor,
aschiffler@5763
   240
             SDL_MINOR_VERSION);   
aschiffler@5763
   241
}
aschiffler@5763
   242
aschiffler@5763
   243
/*!
aschiffler@5763
   244
 * \brief Tests default SDL_Init
aschiffler@5763
   245
 */
aschiffler@5763
   246
int platform_testDefaultInit(void *arg)
aschiffler@5763
   247
{
aschiffler@5763
   248
   int ret;
aschiffler@5763
   249
   int subsystem;
aschiffler@5763
   250
   
aschiffler@5763
   251
   ret = SDL_Init(0);   
aschiffler@5763
   252
   AssertTrue( ret == 0, 
aschiffler@5763
   253
             "SDL_Init(0): returned %i, expected 0, error: %s",
aschiffler@5763
   254
             ret,
aschiffler@5763
   255
             SDL_GetError());
aschiffler@5763
   256
             
aschiffler@5763
   257
   subsystem = SDL_WasInit(0);
aschiffler@5763
   258
   AssertTrue( subsystem == 0, 
aschiffler@5763
   259
             "SDL_WasInit(0): returned %i, expected 0",
aschiffler@5763
   260
             ret);   
aschiffler@5763
   261
             
aschiffler@5763
   262
   SDL_Quit();
aschiffler@5763
   263
}
aschiffler@5763
   264
aschiffler@5763
   265
/*!
aschiffler@5763
   266
 * \brief Tests SDL_Get/Set/ClearError
aschiffler@5763
   267
 * \sa 
aschiffler@5763
   268
 * http://wiki.libsdl.org/moin.cgi/SDL_GetError
aschiffler@5763
   269
 * http://wiki.libsdl.org/moin.cgi/SDL_SetError
aschiffler@5763
   270
 * http://wiki.libsdl.org/moin.cgi/SDL_ClearError
aschiffler@5763
   271
 */
aschiffler@5763
   272
int platform_testGetSetClearError(void *arg)
aschiffler@5763
   273
{
aschiffler@5763
   274
   const char *testError = "Testing";
aschiffler@5763
   275
   char *lastError;
aschiffler@5763
   276
   int len;
aschiffler@5763
   277
   
aschiffler@5763
   278
   SDL_ClearError();
aschiffler@5763
   279
   AssertPass("SDL_ClearError()");
aschiffler@5763
   280
   
aschiffler@5763
   281
   lastError = (char *)SDL_GetError();   
aschiffler@5763
   282
   AssertPass("SDL_GetError()");
aschiffler@5763
   283
   AssertTrue(lastError != NULL, 
aschiffler@5763
   284
             "SDL_GetError() != NULL");
aschiffler@5763
   285
   if (lastError != NULL)
aschiffler@5763
   286
   {
aschiffler@5763
   287
     len = strlen(lastError);
aschiffler@5763
   288
     AssertTrue(len == 0, 
aschiffler@5763
   289
             "SDL_GetError(): no message expected, len: %i", len);
aschiffler@5763
   290
   }
aschiffler@5763
   291
   
aschiffler@5763
   292
   SDL_SetError("%s", testError);
aschiffler@5763
   293
   AssertPass("SDL_SetError()");
aschiffler@5763
   294
   lastError = (char *)SDL_GetError();   
aschiffler@5763
   295
   AssertTrue(lastError != NULL, 
aschiffler@5763
   296
             "SDL_GetError() != NULL");
aschiffler@5763
   297
   if (lastError != NULL)
aschiffler@5763
   298
   {
aschiffler@5763
   299
     len = strlen(lastError);
aschiffler@5763
   300
     AssertTrue(len == strlen(testError), 
aschiffler@5763
   301
             "SDL_GetError(): expected message len %i, was len: %i", 
aschiffler@5763
   302
             strlen(testError), 
aschiffler@5763
   303
             len);
aschiffler@5763
   304
     AssertTrue(strcmp(lastError, testError) == 0, 
aschiffler@5763
   305
             "SDL_GetError(): expected message %s, was message: %s", 
aschiffler@5763
   306
             testError, 
aschiffler@5763
   307
             lastError);
aschiffler@5763
   308
   }
aschiffler@5763
   309
aschiffler@5763
   310
   // Clean up                
aschiffler@5763
   311
   SDL_ClearError();
aschiffler@5763
   312
}
aschiffler@5763
   313
aschiffler@5763
   314
/*!
aschiffler@5763
   315
 * \brief Tests SDL_SetError with empty input
aschiffler@5763
   316
 * \sa
aschiffler@5763
   317
 * http://wiki.libsdl.org/moin.cgi/SDL_SetError
aschiffler@5763
   318
 */
aschiffler@5763
   319
int platform_testSetErrorEmptyInput(void *arg)
aschiffler@5763
   320
{
aschiffler@5763
   321
   const char *testError = "";
aschiffler@5763
   322
   char *lastError;
aschiffler@5763
   323
   int len;
aschiffler@5763
   324
   
aschiffler@5763
   325
   SDL_SetError("%s", testError);
aschiffler@5763
   326
   AssertPass("SDL_SetError()");
aschiffler@5763
   327
   lastError = (char *)SDL_GetError();   
aschiffler@5763
   328
   AssertTrue(lastError != NULL, 
aschiffler@5763
   329
             "SDL_GetError() != NULL");
aschiffler@5763
   330
   if (lastError != NULL)
aschiffler@5763
   331
   {
aschiffler@5763
   332
     len = strlen(lastError);
aschiffler@5763
   333
     AssertTrue(len == strlen(testError), 
aschiffler@5763
   334
             "SDL_GetError(): expected message len %i, was len: %i", 
aschiffler@5763
   335
             strlen(testError), 
aschiffler@5763
   336
             len);
aschiffler@5763
   337
     AssertTrue(strcmp(lastError, testError) == 0, 
aschiffler@5763
   338
             "SDL_GetError(): expected message '%s', was message: '%s'", 
aschiffler@5763
   339
             testError, 
aschiffler@5763
   340
             lastError);
aschiffler@5763
   341
   }
aschiffler@5763
   342
aschiffler@5763
   343
   // Clean up                
aschiffler@5763
   344
   SDL_ClearError();
aschiffler@5763
   345
}
aschiffler@5763
   346
aschiffler@5763
   347
/*!
aschiffler@5763
   348
 * \brief Tests SDL_SetError with invalid input
aschiffler@5763
   349
 * \sa 
aschiffler@5763
   350
 * http://wiki.libsdl.org/moin.cgi/SDL_SetError
aschiffler@5763
   351
 */
aschiffler@5763
   352
int platform_testSetErrorInvalidInput(void *arg)
aschiffler@5763
   353
{
aschiffler@5763
   354
   const char *testError = NULL;
aschiffler@5766
   355
   const char *probeError = "Testing";
aschiffler@5763
   356
   char *lastError;
aschiffler@5766
   357
   int len;
aschiffler@5766
   358
aschiffler@5766
   359
   // Reset
aschiffler@5766
   360
   SDL_ClearError();
aschiffler@5763
   361
   
aschiffler@5766
   362
   // Check for no-op
aschiffler@5763
   363
   SDL_SetError(testError);
aschiffler@5763
   364
   AssertPass("SDL_SetError()");
aschiffler@5763
   365
   lastError = (char *)SDL_GetError();   
aschiffler@5766
   366
   AssertTrue(lastError != NULL, 
aschiffler@5766
   367
             "SDL_GetError() != NULL");
aschiffler@5766
   368
   if (lastError != NULL)
aschiffler@5766
   369
   {
aschiffler@5766
   370
     len = strlen(lastError);
aschiffler@5766
   371
     AssertTrue(len == 0, 
aschiffler@5766
   372
             "SDL_GetError(): expected message len 0, was len: %i", 
aschiffler@5766
   373
             0, 
aschiffler@5766
   374
             len);
aschiffler@5766
   375
     AssertTrue(strcmp(lastError, "") == 0, 
aschiffler@5766
   376
             "SDL_GetError(): expected message '', was message: '%s'",           
aschiffler@5766
   377
             lastError);
aschiffler@5766
   378
   }
aschiffler@5766
   379
   
aschiffler@5766
   380
   // Set
aschiffler@5766
   381
   SDL_SetError(probeError);
aschiffler@5766
   382
   
aschiffler@5766
   383
   // Check for no-op
aschiffler@5766
   384
   SDL_SetError(testError);
aschiffler@5766
   385
   AssertPass("SDL_SetError()");
aschiffler@5766
   386
   lastError = (char *)SDL_GetError();   
aschiffler@5766
   387
   AssertTrue(lastError != NULL, 
aschiffler@5766
   388
             "SDL_GetError() != NULL");
aschiffler@5766
   389
   if (lastError != NULL)
aschiffler@5766
   390
   {
aschiffler@5766
   391
     len = strlen(lastError);
aschiffler@5766
   392
     AssertTrue(len == strlen(probeError), 
aschiffler@5766
   393
             "SDL_GetError(): expected message len %i, was len: %i", 
aschiffler@5766
   394
             strlen(probeError), 
aschiffler@5766
   395
             len);
aschiffler@5766
   396
     AssertTrue(strcmp(lastError, probeError) == 0, 
aschiffler@5766
   397
             "SDL_GetError(): expected message '%s', was message: '%s'",
aschiffler@5766
   398
             probeError,
aschiffler@5766
   399
             lastError);
aschiffler@5766
   400
   }
aschiffler@5763
   401
aschiffler@5763
   402
   // Clean up                
aschiffler@5763
   403
   SDL_ClearError();
aschiffler@5763
   404
}