test/testautomation_platform.c
author Sam Lantinga <slouken@libsdl.org>
Sun, 02 Feb 2014 00:33:31 -0800
changeset 8148 56ba41ac64fe
parent 7678 286c42d7c5ed
child 8605 57faccca4fab
permissions -rw-r--r--
Fixed bug 2376 - no SDL_HasAVX

Haneef Mubarak

AVX is the successor to SSE* and is fairly widely available. As such, it really ought to be detectable.

This functionality ought to be trivial to implement, and not having it means being forced to write an ugly workaround to check for AVX (so that normal SSE can be used if AVX is not available).

Here is an example on detecting AVX from SO (it actually shows ways to cehck for all of teh fancy instructions):

http://stackoverflow.com/questions/6121792/how-to-check-if-a-cpu-supports-the-sse3-instruction-set
aschiffler@6756
     1
/**
aschiffler@6756
     2
 * Original code: automated SDL platform test written by Edgar Simo "bobbens"
aschiffler@6756
     3
 * Extended and updated by aschiffler at ferzkopp dot net
aschiffler@6756
     4
 */
aschiffler@6756
     5
aschiffler@6756
     6
#include <stdio.h>
aschiffler@6756
     7
aschiffler@6756
     8
#include "SDL.h"
aschiffler@6756
     9
#include "SDL_test.h"
aschiffler@6756
    10
aschiffler@6756
    11
/* ================= Test Case Implementation ================== */
aschiffler@6756
    12
aschiffler@6756
    13
/* Helper functions */
aschiffler@6756
    14
aschiffler@6756
    15
/**
aschiffler@6756
    16
 * @brief Compare sizes of types.
aschiffler@6756
    17
 *
aschiffler@6756
    18
 * @note Watcom C flags these as Warning 201: "Unreachable code" if you just
aschiffler@6756
    19
 *  compare them directly, so we push it through a function to keep the
aschiffler@6756
    20
 *  compiler quiet.  --ryan.
aschiffler@6756
    21
 */
aschiffler@6756
    22
static int _compareSizeOfType( size_t sizeoftype, size_t hardcodetype )
aschiffler@6756
    23
{
aschiffler@6756
    24
    return sizeoftype != hardcodetype;
aschiffler@6756
    25
}
aschiffler@6756
    26
aschiffler@6756
    27
/* Test case functions */
aschiffler@6756
    28
aschiffler@6756
    29
/**
aschiffler@6756
    30
 * @brief Tests type sizes.
aschiffler@6756
    31
 */
aschiffler@6756
    32
int platform_testTypes(void *arg)
aschiffler@6756
    33
{
aschiffler@6756
    34
   int ret;
aschiffler@6756
    35
aschiffler@6756
    36
   ret = _compareSizeOfType( sizeof(Uint8), 1 );
aschiffler@6756
    37
   SDLTest_AssertCheck( ret == 0, "sizeof(Uint8) = %lu, expected  1", sizeof(Uint8) );
aschiffler@6756
    38
aschiffler@6756
    39
   ret = _compareSizeOfType( sizeof(Uint16), 2 );
aschiffler@6756
    40
   SDLTest_AssertCheck( ret == 0, "sizeof(Uint16) = %lu, expected 2", sizeof(Uint16) );
aschiffler@6756
    41
aschiffler@6756
    42
   ret = _compareSizeOfType( sizeof(Uint32), 4 );
aschiffler@6756
    43
   SDLTest_AssertCheck( ret == 0, "sizeof(Uint32) = %lu, expected 4", sizeof(Uint32) );
aschiffler@6756
    44
aschiffler@6756
    45
   ret = _compareSizeOfType( sizeof(Uint64), 8 );
aschiffler@6756
    46
   SDLTest_AssertCheck( ret == 0, "sizeof(Uint64) = %lu, expected 8", sizeof(Uint64) );
aschiffler@6756
    47
aschiffler@6756
    48
   return TEST_COMPLETED;
aschiffler@6756
    49
}
aschiffler@6756
    50
aschiffler@6756
    51
/**
aschiffler@6756
    52
 * @brief Tests platform endianness and SDL_SwapXY functions.
aschiffler@6756
    53
 */
aschiffler@6756
    54
int platform_testEndianessAndSwap(void *arg)
aschiffler@6756
    55
{
aschiffler@6756
    56
    int real_byteorder;
aschiffler@6756
    57
    Uint16 value = 0x1234;
aschiffler@6756
    58
    Uint16 value16 = 0xCDAB;
aschiffler@6756
    59
    Uint16 swapped16 = 0xABCD;
aschiffler@6756
    60
    Uint32 value32 = 0xEFBEADDE;
aschiffler@6756
    61
    Uint32 swapped32 = 0xDEADBEEF;
aschiffler@6756
    62
aschiffler@6756
    63
    Uint64 value64, swapped64;
aschiffler@6756
    64
    value64 = 0xEFBEADDE;
aschiffler@6756
    65
    value64 <<= 32;
aschiffler@6756
    66
    value64 |= 0xCDAB3412;
aschiffler@6756
    67
    swapped64 = 0x1234ABCD;
aschiffler@6756
    68
    swapped64 <<= 32;
aschiffler@6756
    69
    swapped64 |= 0xDEADBEEF;
aschiffler@6756
    70
aschiffler@6756
    71
    if ((*((char *) &value) >> 4) == 0x1) {
aschiffler@6756
    72
        real_byteorder = SDL_BIG_ENDIAN;
aschiffler@6756
    73
    } else {
aschiffler@6756
    74
        real_byteorder = SDL_LIL_ENDIAN;
aschiffler@6756
    75
    }
aschiffler@6756
    76
aschiffler@6756
    77
    /* Test endianness. */
aschiffler@6756
    78
    SDLTest_AssertCheck( real_byteorder == SDL_BYTEORDER,
aschiffler@6756
    79
             "Machine detected as %s endian, appears to be %s endian.",
aschiffler@6756
    80
             (SDL_BYTEORDER == SDL_LIL_ENDIAN) ? "little" : "big",
aschiffler@6756
    81
             (real_byteorder == SDL_LIL_ENDIAN) ? "little" : "big" );
aschiffler@6756
    82
aschiffler@6756
    83
    /* Test 16 swap. */
aschiffler@6756
    84
    SDLTest_AssertCheck( SDL_Swap16(value16) == swapped16,
aschiffler@6756
    85
             "SDL_Swap16(): 16 bit swapped: 0x%X => 0x%X",
aschiffler@6756
    86
             value16, SDL_Swap16(value16) );
aschiffler@6756
    87
aschiffler@6756
    88
    /* Test 32 swap. */
aschiffler@6756
    89
    SDLTest_AssertCheck( SDL_Swap32(value32) == swapped32,
aschiffler@6756
    90
             "SDL_Swap32(): 32 bit swapped: 0x%X => 0x%X",
aschiffler@6756
    91
             value32, SDL_Swap32(value32) );
aschiffler@6756
    92
aschiffler@6756
    93
    /* Test 64 swap. */
aschiffler@6756
    94
    SDLTest_AssertCheck( SDL_Swap64(value64) == swapped64,
aschiffler@6756
    95
#ifdef _MSC_VER
aschiffler@6756
    96
             "SDL_Swap64(): 64 bit swapped: 0x%I64X => 0x%I64X",
aschiffler@6756
    97
#else
aschiffler@6756
    98
             "SDL_Swap64(): 64 bit swapped: 0x%llX => 0x%llX",
aschiffler@6756
    99
#endif
aschiffler@6756
   100
             value64, SDL_Swap64(value64) );
aschiffler@6756
   101
aschiffler@6756
   102
   return TEST_COMPLETED;
aschiffler@6756
   103
}
aschiffler@6756
   104
gabomdq@7678
   105
/* !
aschiffler@6756
   106
 * \brief Tests SDL_GetXYZ() functions
aschiffler@6756
   107
 * \sa
aschiffler@6756
   108
 * http://wiki.libsdl.org/moin.cgi/SDL_GetPlatform
aschiffler@6756
   109
 * http://wiki.libsdl.org/moin.cgi/SDL_GetCPUCount
aschiffler@6756
   110
 * http://wiki.libsdl.org/moin.cgi/SDL_GetCPUCacheLineSize
aschiffler@6756
   111
 * http://wiki.libsdl.org/moin.cgi/SDL_GetRevision
aschiffler@6756
   112
 * http://wiki.libsdl.org/moin.cgi/SDL_GetRevisionNumber
aschiffler@6756
   113
 */
aschiffler@6756
   114
int platform_testGetFunctions (void *arg)
aschiffler@6756
   115
{
aschiffler@6756
   116
   char *platform;
aschiffler@6756
   117
   char *revision;
aschiffler@6756
   118
   int ret;
aschiffler@6756
   119
   int len;
aschiffler@6756
   120
aschiffler@6756
   121
   platform = (char *)SDL_GetPlatform();
aschiffler@6756
   122
   SDLTest_AssertPass("SDL_GetPlatform()");
aschiffler@6756
   123
   SDLTest_AssertCheck(platform != NULL, "SDL_GetPlatform() != NULL");
aschiffler@6756
   124
   if (platform != NULL) {
aschiffler@6778
   125
     len = SDL_strlen(platform);
aschiffler@6756
   126
     SDLTest_AssertCheck(len > 0,
aschiffler@6756
   127
             "SDL_GetPlatform(): expected non-empty platform, was platform: '%s', len: %i",
aschiffler@6756
   128
             platform,
aschiffler@6756
   129
             len);
aschiffler@6756
   130
   }
aschiffler@6756
   131
aschiffler@6756
   132
   ret = SDL_GetCPUCount();
aschiffler@6756
   133
   SDLTest_AssertPass("SDL_GetCPUCount()");
aschiffler@6756
   134
   SDLTest_AssertCheck(ret > 0,
aschiffler@6756
   135
             "SDL_GetCPUCount(): expected count > 0, was: %i",
aschiffler@6756
   136
             ret);
aschiffler@6756
   137
aschiffler@6756
   138
   ret = SDL_GetCPUCacheLineSize();
aschiffler@6756
   139
   SDLTest_AssertPass("SDL_GetCPUCacheLineSize()");
aschiffler@6756
   140
   SDLTest_AssertCheck(ret >= 0,
aschiffler@6756
   141
             "SDL_GetCPUCacheLineSize(): expected size >= 0, was: %i",
aschiffler@6756
   142
             ret);
aschiffler@6756
   143
aschiffler@6756
   144
   revision = (char *)SDL_GetRevision();
aschiffler@6756
   145
   SDLTest_AssertPass("SDL_GetRevision()");
aschiffler@6756
   146
   SDLTest_AssertCheck(revision != NULL, "SDL_GetRevision() != NULL");
aschiffler@6756
   147
aschiffler@6756
   148
   ret = SDL_GetRevisionNumber();
aschiffler@6756
   149
   SDLTest_AssertPass("SDL_GetRevisionNumber()");
aschiffler@6756
   150
aschiffler@6756
   151
   return TEST_COMPLETED;
aschiffler@6756
   152
}
aschiffler@6756
   153
gabomdq@7678
   154
/* !
aschiffler@6756
   155
 * \brief Tests SDL_HasXYZ() functions
aschiffler@6756
   156
 * \sa
aschiffler@6756
   157
 * http://wiki.libsdl.org/moin.cgi/SDL_Has3DNow
aschiffler@6756
   158
 * http://wiki.libsdl.org/moin.cgi/SDL_HasAltiVec
aschiffler@6756
   159
 * http://wiki.libsdl.org/moin.cgi/SDL_HasMMX
aschiffler@6756
   160
 * http://wiki.libsdl.org/moin.cgi/SDL_HasRDTSC
aschiffler@6756
   161
 * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE
aschiffler@6756
   162
 * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE2
aschiffler@6756
   163
 * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE3
aschiffler@6756
   164
 * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE41
aschiffler@6756
   165
 * http://wiki.libsdl.org/moin.cgi/SDL_HasSSE42
slouken@8148
   166
 * http://wiki.libsdl.org/moin.cgi/SDL_HasAVX
aschiffler@6756
   167
 */
aschiffler@6756
   168
int platform_testHasFunctions (void *arg)
aschiffler@6756
   169
{
aschiffler@6756
   170
   int ret;
aschiffler@6756
   171
gabomdq@7663
   172
   /* TODO: independently determine and compare values as well */
aschiffler@6756
   173
aschiffler@6756
   174
   ret = SDL_HasRDTSC();
aschiffler@6756
   175
   SDLTest_AssertPass("SDL_HasRDTSC()");
aschiffler@6756
   176
aschiffler@6756
   177
   ret = SDL_HasAltiVec();
aschiffler@6756
   178
   SDLTest_AssertPass("SDL_HasAltiVec()");
aschiffler@6756
   179
aschiffler@6756
   180
   ret = SDL_HasMMX();
aschiffler@6756
   181
   SDLTest_AssertPass("SDL_HasMMX()");
aschiffler@6756
   182
aschiffler@6756
   183
   ret = SDL_Has3DNow();
aschiffler@6756
   184
   SDLTest_AssertPass("SDL_Has3DNow()");
aschiffler@6756
   185
aschiffler@6756
   186
   ret = SDL_HasSSE();
aschiffler@6756
   187
   SDLTest_AssertPass("SDL_HasSSE()");
aschiffler@6756
   188
aschiffler@6756
   189
   ret = SDL_HasSSE2();
aschiffler@6756
   190
   SDLTest_AssertPass("SDL_HasSSE2()");
aschiffler@6756
   191
aschiffler@6756
   192
   ret = SDL_HasSSE3();
aschiffler@6756
   193
   SDLTest_AssertPass("SDL_HasSSE3()");
aschiffler@6756
   194
aschiffler@6756
   195
   ret = SDL_HasSSE41();
aschiffler@6756
   196
   SDLTest_AssertPass("SDL_HasSSE41()");
aschiffler@6756
   197
aschiffler@6756
   198
   ret = SDL_HasSSE42();
aschiffler@6756
   199
   SDLTest_AssertPass("SDL_HasSSE42()");
aschiffler@6756
   200
slouken@8148
   201
   ret = SDL_HasAVX();
slouken@8148
   202
   SDLTest_AssertPass("SDL_HasAVX()");
slouken@8148
   203
aschiffler@6756
   204
   return TEST_COMPLETED;
aschiffler@6756
   205
}
aschiffler@6756
   206
gabomdq@7678
   207
/* !
aschiffler@6756
   208
 * \brief Tests SDL_GetVersion
aschiffler@6756
   209
 * \sa
aschiffler@6756
   210
 * http://wiki.libsdl.org/moin.cgi/SDL_GetVersion
aschiffler@6756
   211
 */
aschiffler@6756
   212
int platform_testGetVersion(void *arg)
aschiffler@6756
   213
{
aschiffler@6756
   214
   SDL_version linked;
aschiffler@6756
   215
   int major = SDL_MAJOR_VERSION;
aschiffler@6756
   216
   int minor = SDL_MINOR_VERSION;
aschiffler@6756
   217
aschiffler@6756
   218
   SDL_GetVersion(&linked);
aschiffler@6756
   219
   SDLTest_AssertCheck( linked.major >= major,
aschiffler@6756
   220
             "SDL_GetVersion(): returned major %i (>= %i)",
aschiffler@6756
   221
             linked.major,
aschiffler@6756
   222
             major);
aschiffler@6756
   223
   SDLTest_AssertCheck( linked.minor >= minor,
aschiffler@6756
   224
             "SDL_GetVersion(): returned minor %i (>= %i)",
aschiffler@6756
   225
             linked.minor,
aschiffler@6756
   226
             minor);
aschiffler@6756
   227
aschiffler@6756
   228
   return TEST_COMPLETED;
aschiffler@6756
   229
}
aschiffler@6756
   230
aschiffler@6756
   231
gabomdq@7678
   232
/* !
aschiffler@6756
   233
 * \brief Tests SDL_VERSION macro
aschiffler@6756
   234
 */
aschiffler@6756
   235
int platform_testSDLVersion(void *arg)
aschiffler@6756
   236
{
aschiffler@6756
   237
   SDL_version compiled;
aschiffler@6756
   238
   int major = SDL_MAJOR_VERSION;
aschiffler@6756
   239
   int minor = SDL_MINOR_VERSION;
aschiffler@6756
   240
aschiffler@6756
   241
   SDL_VERSION(&compiled);
aschiffler@6756
   242
   SDLTest_AssertCheck( compiled.major >= major,
aschiffler@6756
   243
             "SDL_VERSION() returned major %i (>= %i)",
aschiffler@6756
   244
             compiled.major,
aschiffler@6756
   245
             major);
aschiffler@6756
   246
   SDLTest_AssertCheck( compiled.minor >= minor,
aschiffler@6756
   247
             "SDL_VERSION() returned minor %i (>= %i)",
aschiffler@6756
   248
             compiled.minor,
aschiffler@6756
   249
             minor);
aschiffler@6756
   250
aschiffler@6756
   251
   return TEST_COMPLETED;
aschiffler@6756
   252
}
aschiffler@6756
   253
aschiffler@6756
   254
gabomdq@7678
   255
/* !
aschiffler@6756
   256
 * \brief Tests default SDL_Init
aschiffler@6756
   257
 */
aschiffler@6756
   258
int platform_testDefaultInit(void *arg)
aschiffler@6756
   259
{
aschiffler@6756
   260
   int ret;
aschiffler@6756
   261
   int subsystem;
aschiffler@6756
   262
aschiffler@6756
   263
   subsystem = SDL_WasInit(SDL_INIT_EVERYTHING);
aschiffler@6756
   264
   SDLTest_AssertCheck( subsystem != 0,
aschiffler@6756
   265
             "SDL_WasInit(0): returned %i, expected != 0",
aschiffler@6756
   266
             subsystem);
aschiffler@6756
   267
aschiffler@6756
   268
   ret = SDL_Init(SDL_WasInit(SDL_INIT_EVERYTHING));
aschiffler@6756
   269
   SDLTest_AssertCheck( ret == 0,
aschiffler@6756
   270
             "SDL_Init(0): returned %i, expected 0, error: %s",
aschiffler@6756
   271
             ret,
aschiffler@6756
   272
             SDL_GetError());
aschiffler@6756
   273
aschiffler@6756
   274
   return TEST_COMPLETED;
aschiffler@6756
   275
}
aschiffler@6756
   276
gabomdq@7678
   277
/* !
aschiffler@6756
   278
 * \brief Tests SDL_Get/Set/ClearError
aschiffler@6756
   279
 * \sa
aschiffler@6756
   280
 * http://wiki.libsdl.org/moin.cgi/SDL_GetError
aschiffler@6756
   281
 * http://wiki.libsdl.org/moin.cgi/SDL_SetError
aschiffler@6756
   282
 * http://wiki.libsdl.org/moin.cgi/SDL_ClearError
aschiffler@6756
   283
 */
aschiffler@6756
   284
int platform_testGetSetClearError(void *arg)
aschiffler@6756
   285
{
aschiffler@6756
   286
   const char *testError = "Testing";
aschiffler@6756
   287
   char *lastError;
aschiffler@6756
   288
   int len;
aschiffler@6756
   289
aschiffler@6756
   290
   SDL_ClearError();
aschiffler@6756
   291
   SDLTest_AssertPass("SDL_ClearError()");
aschiffler@6756
   292
aschiffler@6756
   293
   lastError = (char *)SDL_GetError();
aschiffler@6756
   294
   SDLTest_AssertPass("SDL_GetError()");
aschiffler@6756
   295
   SDLTest_AssertCheck(lastError != NULL,
aschiffler@6756
   296
             "SDL_GetError() != NULL");
aschiffler@6756
   297
   if (lastError != NULL)
aschiffler@6756
   298
   {
aschiffler@6778
   299
     len = SDL_strlen(lastError);
aschiffler@6756
   300
     SDLTest_AssertCheck(len == 0,
aschiffler@6756
   301
             "SDL_GetError(): no message expected, len: %i", len);
aschiffler@6756
   302
   }
aschiffler@6756
   303
aschiffler@6756
   304
   SDL_SetError("%s", testError);
aschiffler@6756
   305
   SDLTest_AssertPass("SDL_SetError()");
aschiffler@6756
   306
   lastError = (char *)SDL_GetError();
aschiffler@6756
   307
   SDLTest_AssertCheck(lastError != NULL,
aschiffler@6756
   308
             "SDL_GetError() != NULL");
aschiffler@6756
   309
   if (lastError != NULL)
aschiffler@6756
   310
   {
aschiffler@6778
   311
     len = SDL_strlen(lastError);
aschiffler@6778
   312
     SDLTest_AssertCheck(len == SDL_strlen(testError),
aschiffler@6756
   313
             "SDL_GetError(): expected message len %i, was len: %i",
aschiffler@6778
   314
             SDL_strlen(testError),
aschiffler@6756
   315
             len);
aschiffler@6778
   316
     SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0,
aschiffler@6756
   317
             "SDL_GetError(): expected message %s, was message: %s",
aschiffler@6756
   318
             testError,
aschiffler@6756
   319
             lastError);
aschiffler@6756
   320
   }
aschiffler@6756
   321
gabomdq@7663
   322
   /* Clean up */
aschiffler@6756
   323
   SDL_ClearError();
aschiffler@6756
   324
   SDLTest_AssertPass("SDL_ClearError()");
aschiffler@6756
   325
aschiffler@6756
   326
   return TEST_COMPLETED;
aschiffler@6756
   327
}
aschiffler@6756
   328
gabomdq@7678
   329
/* !
aschiffler@6756
   330
 * \brief Tests SDL_SetError with empty input
aschiffler@6756
   331
 * \sa
aschiffler@6756
   332
 * http://wiki.libsdl.org/moin.cgi/SDL_SetError
aschiffler@6756
   333
 */
aschiffler@6756
   334
int platform_testSetErrorEmptyInput(void *arg)
aschiffler@6756
   335
{
aschiffler@6756
   336
   const char *testError = "";
aschiffler@6756
   337
   char *lastError;
aschiffler@6756
   338
   int len;
aschiffler@6756
   339
aschiffler@6756
   340
   SDL_SetError("%s", testError);
aschiffler@6756
   341
   SDLTest_AssertPass("SDL_SetError()");
aschiffler@6756
   342
   lastError = (char *)SDL_GetError();
aschiffler@6756
   343
   SDLTest_AssertCheck(lastError != NULL,
aschiffler@6756
   344
             "SDL_GetError() != NULL");
aschiffler@6756
   345
   if (lastError != NULL)
aschiffler@6756
   346
   {
aschiffler@6778
   347
     len = SDL_strlen(lastError);
aschiffler@6778
   348
     SDLTest_AssertCheck(len == SDL_strlen(testError),
aschiffler@6756
   349
             "SDL_GetError(): expected message len %i, was len: %i",
aschiffler@6778
   350
             SDL_strlen(testError),
aschiffler@6756
   351
             len);
aschiffler@6778
   352
     SDLTest_AssertCheck(SDL_strcmp(lastError, testError) == 0,
aschiffler@6756
   353
             "SDL_GetError(): expected message '%s', was message: '%s'",
aschiffler@6756
   354
             testError,
aschiffler@6756
   355
             lastError);
aschiffler@6756
   356
   }
aschiffler@6756
   357
gabomdq@7663
   358
   /* Clean up */
aschiffler@6756
   359
   SDL_ClearError();
aschiffler@6756
   360
   SDLTest_AssertPass("SDL_ClearError()");
aschiffler@6756
   361
aschiffler@6756
   362
   return TEST_COMPLETED;
aschiffler@6756
   363
}
aschiffler@6756
   364
gabomdq@7678
   365
/* !
aschiffler@6756
   366
 * \brief Tests SDL_SetError with invalid input
aschiffler@6756
   367
 * \sa
aschiffler@6756
   368
 * http://wiki.libsdl.org/moin.cgi/SDL_SetError
aschiffler@6756
   369
 */
aschiffler@6756
   370
int platform_testSetErrorInvalidInput(void *arg)
aschiffler@6756
   371
{
aschiffler@6756
   372
   const char *testError = NULL;
aschiffler@6756
   373
   const char *probeError = "Testing";
aschiffler@6756
   374
   char *lastError;
aschiffler@6756
   375
   int len;
aschiffler@6756
   376
gabomdq@7663
   377
   /* Reset */
aschiffler@6756
   378
   SDL_ClearError();
aschiffler@6756
   379
   SDLTest_AssertPass("SDL_ClearError()");
aschiffler@6756
   380
gabomdq@7663
   381
   /* Check for no-op */
aschiffler@6756
   382
   SDL_SetError(testError);
aschiffler@6756
   383
   SDLTest_AssertPass("SDL_SetError()");
aschiffler@6756
   384
   lastError = (char *)SDL_GetError();
aschiffler@6756
   385
   SDLTest_AssertCheck(lastError != NULL,
aschiffler@6756
   386
             "SDL_GetError() != NULL");
aschiffler@6756
   387
   if (lastError != NULL)
aschiffler@6756
   388
   {
aschiffler@6778
   389
     len = SDL_strlen(lastError);
aschiffler@6756
   390
     SDLTest_AssertCheck(len == 0,
aschiffler@6756
   391
             "SDL_GetError(): expected message len 0, was len: %i",
aschiffler@6756
   392
             0,
aschiffler@6756
   393
             len);
aschiffler@6778
   394
     SDLTest_AssertCheck(SDL_strcmp(lastError, "") == 0,
aschiffler@6756
   395
             "SDL_GetError(): expected message '', was message: '%s'",
aschiffler@6756
   396
             lastError);
aschiffler@6756
   397
   }
aschiffler@6756
   398
gabomdq@7663
   399
   /* Set */
aschiffler@6756
   400
   SDL_SetError(probeError);
aschiffler@6756
   401
   SDLTest_AssertPass("SDL_SetError()");
aschiffler@6756
   402
gabomdq@7663
   403
   /* Check for no-op */
aschiffler@6756
   404
   SDL_SetError(testError);
aschiffler@6756
   405
   SDLTest_AssertPass("SDL_SetError()");
aschiffler@6756
   406
   lastError = (char *)SDL_GetError();
aschiffler@6756
   407
   SDLTest_AssertCheck(lastError != NULL,
aschiffler@6756
   408
             "SDL_GetError() != NULL");
aschiffler@6756
   409
   if (lastError != NULL)
aschiffler@6756
   410
   {
aschiffler@6778
   411
     len = SDL_strlen(lastError);
aschiffler@6778
   412
     SDLTest_AssertCheck(len == SDL_strlen(probeError),
aschiffler@6756
   413
             "SDL_GetError(): expected message len %i, was len: %i",
aschiffler@6778
   414
             SDL_strlen(probeError),
aschiffler@6756
   415
             len);
aschiffler@6778
   416
     SDLTest_AssertCheck(SDL_strcmp(lastError, probeError) == 0,
aschiffler@6756
   417
             "SDL_GetError(): expected message '%s', was message: '%s'",
aschiffler@6756
   418
             probeError,
aschiffler@6756
   419
             lastError);
aschiffler@6756
   420
   }
aschiffler@6756
   421
gabomdq@7663
   422
   /* Clean up */
aschiffler@6756
   423
   SDL_ClearError();
aschiffler@6756
   424
   SDLTest_AssertPass("SDL_ClearError()");
aschiffler@6756
   425
aschiffler@6756
   426
   return TEST_COMPLETED;
aschiffler@6756
   427
}
aschiffler@6756
   428
gabomdq@7678
   429
/* !
aschiffler@6756
   430
 * \brief Tests SDL_GetPowerInfo
aschiffler@6756
   431
 * \sa
aschiffler@6756
   432
 * http://wiki.libsdl.org/moin.cgi/SDL_GetPowerInfo
aschiffler@6756
   433
 */
aschiffler@6756
   434
int platform_testGetPowerInfo(void *arg)
aschiffler@6756
   435
{
aschiffler@6756
   436
   SDL_PowerState state;
aschiffler@6756
   437
   SDL_PowerState stateAgain;
aschiffler@6756
   438
   int secs;
aschiffler@6756
   439
   int secsAgain;
aschiffler@6756
   440
   int pct;
aschiffler@6756
   441
   int pctAgain;
aschiffler@6756
   442
aschiffler@6756
   443
   state = SDL_GetPowerInfo(&secs, &pct);
aschiffler@6756
   444
   SDLTest_AssertPass("SDL_GetPowerInfo()");
aschiffler@6756
   445
   SDLTest_AssertCheck(
aschiffler@6756
   446
       state==SDL_POWERSTATE_UNKNOWN ||
aschiffler@6756
   447
       state==SDL_POWERSTATE_ON_BATTERY ||
aschiffler@6756
   448
       state==SDL_POWERSTATE_NO_BATTERY ||
aschiffler@6756
   449
       state==SDL_POWERSTATE_CHARGING ||
aschiffler@6756
   450
       state==SDL_POWERSTATE_CHARGED,
aschiffler@6756
   451
       "SDL_GetPowerInfo(): state %i is one of the expected values",
aschiffler@6756
   452
       (int)state);
aschiffler@6756
   453
aschiffler@6756
   454
   if (state==SDL_POWERSTATE_ON_BATTERY)
aschiffler@6756
   455
   {
aschiffler@6756
   456
      SDLTest_AssertCheck(
aschiffler@6756
   457
         secs >= 0,
aschiffler@6756
   458
         "SDL_GetPowerInfo(): on battery, secs >= 0, was: %i",
aschiffler@6756
   459
         secs);
aschiffler@6756
   460
      SDLTest_AssertCheck(
aschiffler@6756
   461
         (pct >= 0) && (pct <= 100),
aschiffler@6756
   462
         "SDL_GetPowerInfo(): on battery, pct=[0,100], was: %i",
aschiffler@6756
   463
         pct);
aschiffler@6756
   464
   }
aschiffler@6756
   465
aschiffler@6756
   466
   if (state==SDL_POWERSTATE_UNKNOWN ||
aschiffler@6756
   467
       state==SDL_POWERSTATE_NO_BATTERY)
aschiffler@6756
   468
   {
aschiffler@6756
   469
      SDLTest_AssertCheck(
aschiffler@6756
   470
         secs == -1,
aschiffler@6756
   471
         "SDL_GetPowerInfo(): no battery, secs == -1, was: %i",
aschiffler@6756
   472
         secs);
aschiffler@6756
   473
      SDLTest_AssertCheck(
aschiffler@6756
   474
         pct == -1,
aschiffler@6756
   475
         "SDL_GetPowerInfo(): no battery, pct == -1, was: %i",
aschiffler@6756
   476
         pct);
aschiffler@6756
   477
   }
aschiffler@6756
   478
gabomdq@7663
   479
   /* Partial return value variations */
aschiffler@6756
   480
   stateAgain = SDL_GetPowerInfo(&secsAgain, NULL);
aschiffler@6756
   481
   SDLTest_AssertCheck(
aschiffler@6756
   482
        state==stateAgain,
aschiffler@6756
   483
        "State %i returned when only 'secs' requested",
aschiffler@6756
   484
        stateAgain);
aschiffler@6756
   485
   SDLTest_AssertCheck(
aschiffler@6756
   486
        secs==secsAgain,
aschiffler@6756
   487
        "Value %i matches when only 'secs' requested",
aschiffler@6756
   488
        secsAgain);
aschiffler@6756
   489
   stateAgain = SDL_GetPowerInfo(NULL, &pctAgain);
aschiffler@6756
   490
   SDLTest_AssertCheck(
aschiffler@6756
   491
        state==stateAgain,
aschiffler@6756
   492
        "State %i returned when only 'pct' requested",
aschiffler@6756
   493
        stateAgain);
aschiffler@6756
   494
   SDLTest_AssertCheck(
aschiffler@6756
   495
        pct==pctAgain,
aschiffler@6756
   496
        "Value %i matches when only 'pct' requested",
aschiffler@6756
   497
        pctAgain);
aschiffler@6756
   498
   stateAgain = SDL_GetPowerInfo(NULL, NULL);
aschiffler@6756
   499
   SDLTest_AssertCheck(
aschiffler@6756
   500
        state==stateAgain,
aschiffler@6756
   501
        "State %i returned when no value requested",
aschiffler@6756
   502
        stateAgain);
aschiffler@6756
   503
aschiffler@6756
   504
   return TEST_COMPLETED;
aschiffler@6756
   505
}
aschiffler@6756
   506
aschiffler@6756
   507
/* ================= Test References ================== */
aschiffler@6756
   508
aschiffler@6756
   509
/* Platform test cases */
aschiffler@6756
   510
static const SDLTest_TestCaseReference platformTest1 =
slouken@7191
   511
        { (SDLTest_TestCaseFp)platform_testTypes, "platform_testTypes", "Tests predefined types", TEST_ENABLED};
aschiffler@6756
   512
aschiffler@6756
   513
static const SDLTest_TestCaseReference platformTest2 =
slouken@7191
   514
        { (SDLTest_TestCaseFp)platform_testEndianessAndSwap, "platform_testEndianessAndSwap", "Tests endianess and swap functions", TEST_ENABLED};
aschiffler@6756
   515
aschiffler@6756
   516
static const SDLTest_TestCaseReference platformTest3 =
slouken@7191
   517
        { (SDLTest_TestCaseFp)platform_testGetFunctions, "platform_testGetFunctions", "Tests various SDL_GetXYZ functions", TEST_ENABLED};
aschiffler@6756
   518
aschiffler@6756
   519
static const SDLTest_TestCaseReference platformTest4 =
slouken@7191
   520
        { (SDLTest_TestCaseFp)platform_testHasFunctions, "platform_testHasFunctions", "Tests various SDL_HasXYZ functions", TEST_ENABLED};
aschiffler@6756
   521
aschiffler@6756
   522
static const SDLTest_TestCaseReference platformTest5 =
slouken@7191
   523
        { (SDLTest_TestCaseFp)platform_testGetVersion, "platform_testGetVersion", "Tests SDL_GetVersion function", TEST_ENABLED};
aschiffler@6756
   524
aschiffler@6756
   525
static const SDLTest_TestCaseReference platformTest6 =
slouken@7191
   526
        { (SDLTest_TestCaseFp)platform_testSDLVersion, "platform_testSDLVersion", "Tests SDL_VERSION macro", TEST_ENABLED};
aschiffler@6756
   527
aschiffler@6756
   528
static const SDLTest_TestCaseReference platformTest7 =
slouken@7191
   529
        { (SDLTest_TestCaseFp)platform_testDefaultInit, "platform_testDefaultInit", "Tests default SDL_Init", TEST_ENABLED};
aschiffler@6756
   530
aschiffler@6756
   531
static const SDLTest_TestCaseReference platformTest8 =
slouken@7191
   532
        { (SDLTest_TestCaseFp)platform_testGetSetClearError, "platform_testGetSetClearError", "Tests SDL_Get/Set/ClearError", TEST_ENABLED};
aschiffler@6756
   533
aschiffler@6756
   534
static const SDLTest_TestCaseReference platformTest9 =
slouken@7191
   535
        { (SDLTest_TestCaseFp)platform_testSetErrorEmptyInput, "platform_testSetErrorEmptyInput", "Tests SDL_SetError with empty input", TEST_ENABLED};
aschiffler@6756
   536
aschiffler@6756
   537
static const SDLTest_TestCaseReference platformTest10 =
slouken@7191
   538
        { (SDLTest_TestCaseFp)platform_testSetErrorInvalidInput, "platform_testSetErrorInvalidInput", "Tests SDL_SetError with invalid input", TEST_ENABLED};
aschiffler@6756
   539
aschiffler@6756
   540
static const SDLTest_TestCaseReference platformTest11 =
slouken@7191
   541
        { (SDLTest_TestCaseFp)platform_testGetPowerInfo, "platform_testGetPowerInfo", "Tests SDL_GetPowerInfo function", TEST_ENABLED };
aschiffler@6756
   542
aschiffler@6756
   543
/* Sequence of Platform test cases */
aschiffler@6756
   544
static const SDLTest_TestCaseReference *platformTests[] =  {
slouken@7191
   545
    &platformTest1,
slouken@7191
   546
    &platformTest2,
slouken@7191
   547
    &platformTest3,
slouken@7191
   548
    &platformTest4,
slouken@7191
   549
    &platformTest5,
slouken@7191
   550
    &platformTest6,
slouken@7191
   551
    &platformTest7,
slouken@7191
   552
    &platformTest8,
slouken@7191
   553
    &platformTest9,
slouken@7191
   554
    &platformTest10,
slouken@7191
   555
    &platformTest11,
slouken@7191
   556
    NULL
aschiffler@6756
   557
};
aschiffler@6756
   558
aschiffler@6756
   559
/* Platform test suite (global) */
aschiffler@6756
   560
SDLTest_TestSuiteReference platformTestSuite = {
slouken@7191
   561
    "Platform",
slouken@7191
   562
    NULL,
slouken@7191
   563
    platformTests,
slouken@7191
   564
    NULL
aschiffler@6756
   565
};