test/testautomation_pixels.c
author David Ludwig <dludwig@pobox.com>
Wed, 25 Dec 2013 21:39:48 -0500
changeset 8563 c0e68f3b6bbb
parent 7879 cee8a400dc51
child 9046 c3ec7c3e6c24
permissions -rw-r--r--
WinRT: compiled the d3d11 renderer's shaders into SDL itself

Previously, the shaders would get compiled separately, the output of which would need to be packaged into the app. This change should make SDL's dll be the only binary needed to include SDL in a WinRT app.
aschiffler@7134
     1
/**
aschiffler@7134
     2
 * Pixels test suite
aschiffler@7134
     3
 */
aschiffler@7134
     4
aschiffler@7134
     5
#include <stdio.h>
aschiffler@7134
     6
aschiffler@7134
     7
#include "SDL.h"
aschiffler@7134
     8
#include "SDL_test.h"
aschiffler@7134
     9
aschiffler@7134
    10
/* Test case functions */
aschiffler@7134
    11
aschiffler@7134
    12
/* Definition of all RGB formats used to test pixel conversions */
aschiffler@7134
    13
const int _numRGBPixelFormats = 30;
slouken@7191
    14
Uint32 _RGBPixelFormats[] =
aschiffler@7134
    15
  {
aschiffler@7134
    16
    SDL_PIXELFORMAT_INDEX1LSB,
aschiffler@7134
    17
    SDL_PIXELFORMAT_INDEX1MSB,
aschiffler@7134
    18
    SDL_PIXELFORMAT_INDEX4LSB,
aschiffler@7134
    19
    SDL_PIXELFORMAT_INDEX4MSB,
aschiffler@7134
    20
    SDL_PIXELFORMAT_INDEX8,
aschiffler@7134
    21
    SDL_PIXELFORMAT_RGB332,
aschiffler@7134
    22
    SDL_PIXELFORMAT_RGB444,
aschiffler@7134
    23
    SDL_PIXELFORMAT_RGB555,
aschiffler@7134
    24
    SDL_PIXELFORMAT_BGR555,
aschiffler@7134
    25
    SDL_PIXELFORMAT_ARGB4444,
aschiffler@7134
    26
    SDL_PIXELFORMAT_RGBA4444,
aschiffler@7134
    27
    SDL_PIXELFORMAT_ABGR4444,
aschiffler@7134
    28
    SDL_PIXELFORMAT_BGRA4444,
aschiffler@7134
    29
    SDL_PIXELFORMAT_ARGB1555,
aschiffler@7134
    30
    SDL_PIXELFORMAT_RGBA5551,
aschiffler@7134
    31
    SDL_PIXELFORMAT_ABGR1555,
aschiffler@7134
    32
    SDL_PIXELFORMAT_BGRA5551,
aschiffler@7134
    33
    SDL_PIXELFORMAT_RGB565,
aschiffler@7134
    34
    SDL_PIXELFORMAT_BGR565,
aschiffler@7134
    35
    SDL_PIXELFORMAT_RGB24,
aschiffler@7134
    36
    SDL_PIXELFORMAT_BGR24,
aschiffler@7134
    37
    SDL_PIXELFORMAT_RGB888,
aschiffler@7134
    38
    SDL_PIXELFORMAT_RGBX8888,
aschiffler@7134
    39
    SDL_PIXELFORMAT_BGR888,
aschiffler@7134
    40
    SDL_PIXELFORMAT_BGRX8888,
aschiffler@7134
    41
    SDL_PIXELFORMAT_ARGB8888,
aschiffler@7134
    42
    SDL_PIXELFORMAT_RGBA8888,
aschiffler@7134
    43
    SDL_PIXELFORMAT_ABGR8888,
aschiffler@7134
    44
    SDL_PIXELFORMAT_BGRA8888,
aschiffler@7134
    45
    SDL_PIXELFORMAT_ARGB2101010
aschiffler@7134
    46
  };
slouken@7191
    47
char* _RGBPixelFormatsVerbose[] =
aschiffler@7134
    48
  {
aschiffler@7134
    49
    "SDL_PIXELFORMAT_INDEX1LSB",
aschiffler@7134
    50
    "SDL_PIXELFORMAT_INDEX1MSB",
aschiffler@7134
    51
    "SDL_PIXELFORMAT_INDEX4LSB",
aschiffler@7134
    52
    "SDL_PIXELFORMAT_INDEX4MSB",
aschiffler@7134
    53
    "SDL_PIXELFORMAT_INDEX8",
aschiffler@7134
    54
    "SDL_PIXELFORMAT_RGB332",
aschiffler@7134
    55
    "SDL_PIXELFORMAT_RGB444",
aschiffler@7134
    56
    "SDL_PIXELFORMAT_RGB555",
aschiffler@7134
    57
    "SDL_PIXELFORMAT_BGR555",
aschiffler@7134
    58
    "SDL_PIXELFORMAT_ARGB4444",
aschiffler@7134
    59
    "SDL_PIXELFORMAT_RGBA4444",
aschiffler@7134
    60
    "SDL_PIXELFORMAT_ABGR4444",
aschiffler@7134
    61
    "SDL_PIXELFORMAT_BGRA4444",
aschiffler@7134
    62
    "SDL_PIXELFORMAT_ARGB1555",
aschiffler@7134
    63
    "SDL_PIXELFORMAT_RGBA5551",
aschiffler@7134
    64
    "SDL_PIXELFORMAT_ABGR1555",
aschiffler@7134
    65
    "SDL_PIXELFORMAT_BGRA5551",
aschiffler@7134
    66
    "SDL_PIXELFORMAT_RGB565",
aschiffler@7134
    67
    "SDL_PIXELFORMAT_BGR565",
aschiffler@7134
    68
    "SDL_PIXELFORMAT_RGB24",
aschiffler@7134
    69
    "SDL_PIXELFORMAT_BGR24",
aschiffler@7134
    70
    "SDL_PIXELFORMAT_RGB888",
aschiffler@7134
    71
    "SDL_PIXELFORMAT_RGBX8888",
aschiffler@7134
    72
    "SDL_PIXELFORMAT_BGR888",
aschiffler@7134
    73
    "SDL_PIXELFORMAT_BGRX8888",
aschiffler@7134
    74
    "SDL_PIXELFORMAT_ARGB8888",
aschiffler@7134
    75
    "SDL_PIXELFORMAT_RGBA8888",
aschiffler@7134
    76
    "SDL_PIXELFORMAT_ABGR8888",
aschiffler@7134
    77
    "SDL_PIXELFORMAT_BGRA8888",
aschiffler@7134
    78
    "SDL_PIXELFORMAT_ARGB2101010"
aschiffler@7134
    79
  };
aschiffler@7134
    80
aschiffler@7134
    81
/* Definition of all Non-RGB formats used to test pixel conversions */
aschiffler@7134
    82
const int _numNonRGBPixelFormats = 5;
slouken@7191
    83
Uint32 _nonRGBPixelFormats[] =
aschiffler@7134
    84
  {
aschiffler@7134
    85
    SDL_PIXELFORMAT_YV12,
aschiffler@7134
    86
    SDL_PIXELFORMAT_IYUV,
aschiffler@7134
    87
    SDL_PIXELFORMAT_YUY2,
aschiffler@7134
    88
    SDL_PIXELFORMAT_UYVY,
slouken@7191
    89
    SDL_PIXELFORMAT_YVYU
aschiffler@7134
    90
  };
slouken@7191
    91
char* _nonRGBPixelFormatsVerbose[] =
aschiffler@7134
    92
  {
aschiffler@7134
    93
    "SDL_PIXELFORMAT_YV12",
aschiffler@7134
    94
    "SDL_PIXELFORMAT_IYUV",
aschiffler@7134
    95
    "SDL_PIXELFORMAT_YUY2",
aschiffler@7134
    96
    "SDL_PIXELFORMAT_UYVY",
slouken@7191
    97
    "SDL_PIXELFORMAT_YVYU"
aschiffler@7134
    98
  };
aschiffler@7134
    99
aschiffler@7153
   100
/* Definition of some invalid formats for negative tests */
aschiffler@7153
   101
const int _numInvalidPixelFormats = 2;
slouken@7191
   102
Uint32 _invalidPixelFormats[] =
aschiffler@7153
   103
  {
aschiffler@7153
   104
    0xfffffffe,
aschiffler@7153
   105
    0xffffffff
aschiffler@7153
   106
  };
slouken@7191
   107
char* _invalidPixelFormatsVerbose[] =
aschiffler@7153
   108
  {
aschiffler@7153
   109
    "SDL_PIXELFORMAT_UNKNOWN",
aschiffler@7153
   110
    "SDL_PIXELFORMAT_UNKNOWN"
aschiffler@7153
   111
  };
aschiffler@7153
   112
aschiffler@7134
   113
/* Test case functions */
aschiffler@7134
   114
aschiffler@7134
   115
/**
aschiffler@7134
   116
 * @brief Call to SDL_AllocFormat and SDL_FreeFormat
aschiffler@7142
   117
 *
aschiffler@7142
   118
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocFormat
slouken@7191
   119
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreeFormat
aschiffler@7134
   120
 */
aschiffler@7134
   121
int
aschiffler@7134
   122
pixels_allocFreeFormat(void *arg)
aschiffler@7134
   123
{
aschiffler@7153
   124
  const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN";
aschiffler@7151
   125
  const char *expectedError = "Parameter 'format' is invalid";
slouken@7191
   126
  const char *error;
aschiffler@7134
   127
  int i;
aschiffler@7134
   128
  Uint32 format;
aschiffler@7134
   129
  Uint32 masks;
aschiffler@7134
   130
  SDL_PixelFormat* result;
aschiffler@7134
   131
aschiffler@7153
   132
  /* Blank/unknown format */
aschiffler@7153
   133
  format = 0;
aschiffler@7153
   134
  SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format);
slouken@7191
   135
aschiffler@7153
   136
  /* Allocate format */
aschiffler@7153
   137
  result = SDL_AllocFormat(format);
aschiffler@7153
   138
  SDLTest_AssertPass("Call to SDL_AllocFormat()");
slouken@7191
   139
  SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   140
  if (result != NULL) {
slouken@7191
   141
    SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format);
slouken@7191
   142
    SDLTest_AssertCheck(result->BitsPerPixel == 0, "Verify value of result.BitsPerPixel; expected: 0, got %u", result->BitsPerPixel);
slouken@7191
   143
    SDLTest_AssertCheck(result->BytesPerPixel == 0, "Verify value of result.BytesPerPixel; expected: 0, got %u", result->BytesPerPixel);
aschiffler@7153
   144
    masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
aschiffler@7153
   145
    SDLTest_AssertCheck(masks == 0, "Verify value of result.[RGBA]mask combined; expected: 0, got %u", masks);
slouken@7191
   146
aschiffler@7153
   147
    /* Deallocate again */
aschiffler@7153
   148
    SDL_FreeFormat(result);
slouken@7191
   149
    SDLTest_AssertPass("Call to SDL_FreeFormat()");
aschiffler@7153
   150
  }
aschiffler@7153
   151
aschiffler@7134
   152
  /* RGB formats */
aschiffler@7134
   153
  for (i = 0; i < _numRGBPixelFormats; i++) {
aschiffler@7134
   154
    format = _RGBPixelFormats[i];
aschiffler@7134
   155
    SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format);
slouken@7191
   156
aschiffler@7134
   157
    /* Allocate format */
aschiffler@7134
   158
    result = SDL_AllocFormat(format);
aschiffler@7134
   159
    SDLTest_AssertPass("Call to SDL_AllocFormat()");
slouken@7191
   160
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7134
   161
    if (result != NULL) {
slouken@7191
   162
      SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format);
slouken@7191
   163
      SDLTest_AssertCheck(result->BitsPerPixel > 0, "Verify value of result.BitsPerPixel; expected: >0, got %u", result->BitsPerPixel);
slouken@7191
   164
      SDLTest_AssertCheck(result->BytesPerPixel > 0, "Verify value of result.BytesPerPixel; expected: >0, got %u", result->BytesPerPixel);
slouken@7191
   165
      if (result->palette != NULL) {
aschiffler@7134
   166
         masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
aschiffler@7134
   167
         SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %u", masks);
aschiffler@7134
   168
      }
slouken@7191
   169
aschiffler@7134
   170
      /* Deallocate again */
aschiffler@7134
   171
      SDL_FreeFormat(result);
slouken@7191
   172
      SDLTest_AssertPass("Call to SDL_FreeFormat()");
aschiffler@7134
   173
    }
aschiffler@7134
   174
  }
aschiffler@7134
   175
aschiffler@7134
   176
  /* Non-RGB formats */
aschiffler@7134
   177
  for (i = 0; i < _numNonRGBPixelFormats; i++) {
aschiffler@7134
   178
    format = _nonRGBPixelFormats[i];
aschiffler@7134
   179
    SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format);
slouken@7191
   180
aschiffler@7134
   181
    /* Try to allocate format */
aschiffler@7134
   182
    result = SDL_AllocFormat(format);
aschiffler@7134
   183
    SDLTest_AssertPass("Call to SDL_AllocFormat()");
slouken@7191
   184
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7134
   185
  }
slouken@7191
   186
aschiffler@7142
   187
  /* Negative cases */
slouken@7191
   188
slouken@7191
   189
  /* Invalid Formats */
aschiffler@7153
   190
  for (i = 0; i < _numInvalidPixelFormats; i++) {
aschiffler@7153
   191
    SDL_ClearError();
aschiffler@7153
   192
    SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7153
   193
    format = _invalidPixelFormats[i];
aschiffler@7153
   194
    result = SDL_AllocFormat(format);
aschiffler@7153
   195
    SDLTest_AssertPass("Call to SDL_AllocFormat(%u)", format);
slouken@7191
   196
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7153
   197
    error = SDL_GetError();
aschiffler@7153
   198
    SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7153
   199
    SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7153
   200
    if (error != NULL) {
slouken@7191
   201
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0,
aschiffler@7151
   202
          "Validate error message, expected: '%s', got: '%s'", expectedError, error);
aschiffler@7153
   203
    }
aschiffler@7151
   204
  }
aschiffler@7142
   205
aschiffler@7151
   206
  /* Invalid free pointer */
aschiffler@7151
   207
  SDL_ClearError();
aschiffler@7151
   208
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7142
   209
  SDL_FreeFormat(NULL);
aschiffler@7142
   210
  SDLTest_AssertPass("Call to SDL_FreeFormat(NULL)");
aschiffler@7151
   211
  error = SDL_GetError();
aschiffler@7151
   212
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   213
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   214
  if (error != NULL) {
slouken@7191
   215
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0,
aschiffler@7151
   216
          "Validate error message, expected: '%s', got: '%s'", expectedError, error);
aschiffler@7151
   217
  }
slouken@7191
   218
aschiffler@7142
   219
  return TEST_COMPLETED;
aschiffler@7142
   220
}
aschiffler@7142
   221
aschiffler@7142
   222
/**
aschiffler@7153
   223
 * @brief Call to SDL_GetPixelFormatName
aschiffler@7153
   224
 *
aschiffler@7153
   225
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetPixelFormatName
aschiffler@7153
   226
 */
aschiffler@7153
   227
int
aschiffler@7153
   228
pixels_getPixelFormatName(void *arg)
aschiffler@7153
   229
{
aschiffler@7153
   230
  const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN";
slouken@7191
   231
  const char *error;
aschiffler@7153
   232
  int i;
aschiffler@7153
   233
  Uint32 format;
aschiffler@7153
   234
  char* result;
aschiffler@7153
   235
aschiffler@7153
   236
  /* Blank/undefined format */
aschiffler@7153
   237
  format = 0;
aschiffler@7153
   238
  SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format);
slouken@7191
   239
aschiffler@7153
   240
  /* Get name of format */
aschiffler@7153
   241
  result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   242
  SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
slouken@7191
   243
  SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   244
  if (result != NULL) {
slouken@7721
   245
      SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
slouken@7191
   246
      SDLTest_AssertCheck(SDL_strcmp(result, unknownFormat) == 0,
aschiffler@7153
   247
        "Verify result text; expected: %s, got %s", unknownFormat, result);
aschiffler@7153
   248
  }
aschiffler@7153
   249
aschiffler@7153
   250
  /* RGB formats */
aschiffler@7153
   251
  for (i = 0; i < _numRGBPixelFormats; i++) {
aschiffler@7153
   252
    format = _RGBPixelFormats[i];
aschiffler@7153
   253
    SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format);
slouken@7191
   254
aschiffler@7153
   255
    /* Get name of format */
aschiffler@7153
   256
    result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   257
    SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
slouken@7191
   258
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   259
    if (result != NULL) {
slouken@7721
   260
      SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
slouken@7191
   261
      SDLTest_AssertCheck(SDL_strcmp(result, _RGBPixelFormatsVerbose[i]) == 0,
aschiffler@7153
   262
        "Verify result text; expected: %s, got %s", _RGBPixelFormatsVerbose[i], result);
aschiffler@7153
   263
    }
aschiffler@7153
   264
  }
aschiffler@7153
   265
aschiffler@7153
   266
  /* Non-RGB formats */
aschiffler@7153
   267
  for (i = 0; i < _numNonRGBPixelFormats; i++) {
aschiffler@7153
   268
    format = _nonRGBPixelFormats[i];
aschiffler@7153
   269
    SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format);
slouken@7191
   270
aschiffler@7153
   271
    /* Get name of format */
aschiffler@7153
   272
    result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   273
    SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
slouken@7191
   274
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   275
    if (result != NULL) {
slouken@7721
   276
      SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
slouken@7191
   277
      SDLTest_AssertCheck(SDL_strcmp(result, _nonRGBPixelFormatsVerbose[i]) == 0,
aschiffler@7153
   278
        "Verify result text; expected: %s, got %s", _nonRGBPixelFormatsVerbose[i], result);
aschiffler@7153
   279
    }
aschiffler@7153
   280
  }
slouken@7191
   281
aschiffler@7153
   282
  /* Negative cases */
slouken@7191
   283
slouken@7191
   284
  /* Invalid Formats */
aschiffler@7153
   285
  SDL_ClearError();
aschiffler@7153
   286
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7153
   287
  for (i = 0; i < _numInvalidPixelFormats; i++) {
aschiffler@7153
   288
    format = _invalidPixelFormats[i];
aschiffler@7153
   289
    result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   290
    SDLTest_AssertPass("Call to SDL_GetPixelFormatName(%u)", format);
slouken@7191
   291
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   292
    if (result != NULL) {
slouken@7721
   293
      SDLTest_AssertCheck(result[0] != '\0',
aschiffler@7153
   294
        "Verify result is non-empty; got: %s", result);
aschiffler@7153
   295
      SDLTest_AssertCheck(SDL_strcmp(result, _invalidPixelFormatsVerbose[i]) == 0,
aschiffler@7153
   296
        "Validate name is UNKNOWN, expected: '%s', got: '%s'", _invalidPixelFormatsVerbose[i], result);
aschiffler@7153
   297
    }
aschiffler@7153
   298
    error = SDL_GetError();
aschiffler@7153
   299
    SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7879
   300
    SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty");
aschiffler@7153
   301
  }
aschiffler@7153
   302
aschiffler@7153
   303
  return TEST_COMPLETED;
aschiffler@7153
   304
}
aschiffler@7153
   305
aschiffler@7153
   306
/**
aschiffler@7142
   307
 * @brief Call to SDL_AllocPalette and SDL_FreePalette
aschiffler@7142
   308
 *
aschiffler@7142
   309
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocPalette
aschiffler@7142
   310
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreePalette
aschiffler@7142
   311
 */
aschiffler@7142
   312
int
aschiffler@7142
   313
pixels_allocFreePalette(void *arg)
aschiffler@7142
   314
{
aschiffler@7151
   315
  const char *expectedError1 = "Parameter 'ncolors' is invalid";
aschiffler@7151
   316
  const char *expectedError2 = "Parameter 'palette' is invalid";
slouken@7191
   317
  const char *error;
aschiffler@7142
   318
  int variation;
aschiffler@7142
   319
  int i;
aschiffler@7142
   320
  int ncolors;
aschiffler@7142
   321
  SDL_Palette* result;
aschiffler@7142
   322
aschiffler@7142
   323
  /* Allocate palette */
slouken@7191
   324
  for (variation = 1; variation <= 3; variation++) {
aschiffler@7142
   325
    switch (variation) {
aschiffler@7142
   326
      /* Just one color */
aschiffler@7142
   327
      case 1:
aschiffler@7142
   328
        ncolors = 1;
aschiffler@7142
   329
        break;
aschiffler@7142
   330
      /* Two colors */
aschiffler@7142
   331
      case 2:
aschiffler@7142
   332
        ncolors = 2;
aschiffler@7142
   333
        break;
aschiffler@7142
   334
      /* More than two colors */
aschiffler@7142
   335
      case 3:
aschiffler@7142
   336
        ncolors = SDLTest_RandomIntegerInRange(8, 16);
aschiffler@7142
   337
        break;
aschiffler@7142
   338
    }
aschiffler@7142
   339
aschiffler@7142
   340
    result = SDL_AllocPalette(ncolors);
aschiffler@7142
   341
    SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
slouken@7191
   342
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7142
   343
    if (result != NULL) {
slouken@7191
   344
      SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors);
aschiffler@7142
   345
      if (result->ncolors > 0) {
aschiffler@7142
   346
        SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL");
aschiffler@7142
   347
        if (result->colors != NULL) {
aschiffler@7142
   348
          for(i = 0; i < result->ncolors; i++) {
slouken@7191
   349
            SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r);
slouken@7191
   350
            SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g);
slouken@7191
   351
            SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b);
aschiffler@7142
   352
           }
slouken@7191
   353
         }
aschiffler@7142
   354
      }
slouken@7191
   355
aschiffler@7142
   356
      /* Deallocate again */
aschiffler@7142
   357
      SDL_FreePalette(result);
slouken@7191
   358
      SDLTest_AssertPass("Call to SDL_FreePalette()");
aschiffler@7142
   359
    }
aschiffler@7142
   360
  }
aschiffler@7142
   361
aschiffler@7142
   362
  /* Negative cases */
slouken@7191
   363
aschiffler@7151
   364
  /* Invalid number of colors */
aschiffler@7142
   365
  for (ncolors = 0; ncolors > -3; ncolors--) {
aschiffler@7151
   366
    SDL_ClearError();
aschiffler@7151
   367
    SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7142
   368
    result = SDL_AllocPalette(ncolors);
aschiffler@7142
   369
    SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
aschiffler@7142
   370
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7151
   371
    error = SDL_GetError();
aschiffler@7151
   372
    SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   373
    SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   374
    if (error != NULL) {
slouken@7191
   375
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0,
aschiffler@7151
   376
          "Validate error message, expected: '%s', got: '%s'", expectedError1, error);
aschiffler@7151
   377
    }
aschiffler@7142
   378
  }
aschiffler@7142
   379
aschiffler@7151
   380
  /* Invalid free pointer */
aschiffler@7151
   381
  SDL_ClearError();
aschiffler@7151
   382
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7142
   383
  SDL_FreePalette(NULL);
aschiffler@7142
   384
  SDLTest_AssertPass("Call to SDL_FreePalette(NULL)");
aschiffler@7151
   385
  error = SDL_GetError();
aschiffler@7151
   386
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   387
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   388
  if (error != NULL) {
slouken@7191
   389
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0,
aschiffler@7151
   390
          "Validate error message, expected: '%s', got: '%s'", expectedError2, error);
aschiffler@7151
   391
  }
slouken@7191
   392
aschiffler@7151
   393
  return TEST_COMPLETED;
aschiffler@7151
   394
}
aschiffler@7151
   395
aschiffler@7151
   396
/**
aschiffler@7151
   397
 * @brief Call to SDL_CalculateGammaRamp
aschiffler@7151
   398
 *
aschiffler@7151
   399
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_CalculateGammaRamp
aschiffler@7151
   400
 */
aschiffler@7151
   401
int
aschiffler@7151
   402
pixels_calcGammaRamp(void *arg)
aschiffler@7151
   403
{
aschiffler@7151
   404
  const char *expectedError1 = "Parameter 'gamma' is invalid";
aschiffler@7151
   405
  const char *expectedError2 = "Parameter 'ramp' is invalid";
slouken@7191
   406
  const char *error;
aschiffler@7151
   407
  float gamma;
aschiffler@7151
   408
  Uint16 *ramp;
aschiffler@7151
   409
  int variation;
aschiffler@7151
   410
  int i;
aschiffler@7151
   411
  int changed;
aschiffler@7151
   412
  Uint16 magic = 0xbeef;
aschiffler@7151
   413
gabomdq@7677
   414
  /* Allocate temp ramp array and fill with some value */
aschiffler@7151
   415
  ramp = (Uint16 *)SDL_malloc(256 * sizeof(Uint16));
aschiffler@7151
   416
  SDLTest_AssertCheck(ramp != NULL, "Validate temp ramp array could be allocated");
aschiffler@7151
   417
  if (ramp == NULL) return TEST_ABORTED;
slouken@7191
   418
aschiffler@7151
   419
  /* Make call with different gamma values */
aschiffler@7151
   420
  for (variation = 0; variation < 4; variation++) {
aschiffler@7151
   421
    switch (variation) {
aschiffler@7151
   422
      /* gamma = 0 all black */
slouken@7191
   423
      case 0:
aschiffler@7151
   424
        gamma = 0.0f;
aschiffler@7151
   425
        break;
aschiffler@7151
   426
      /* gamma = 1 identity */
aschiffler@7151
   427
      case 1:
aschiffler@7151
   428
        gamma = 1.0f;
aschiffler@7151
   429
        break;
slouken@7191
   430
      /* gamma = [0.2,0.8] normal range */
aschiffler@7151
   431
      case 2:
aschiffler@7153
   432
        gamma = 0.2f + 0.8f * SDLTest_RandomUnitFloat();
aschiffler@7151
   433
        break;
slouken@7191
   434
      /* gamma = >1.1 non-standard range */
aschiffler@7151
   435
      case 3:
aschiffler@7153
   436
        gamma = 1.1f + SDLTest_RandomUnitFloat();
aschiffler@7151
   437
        break;
aschiffler@7151
   438
    }
aschiffler@7151
   439
slouken@7191
   440
    /* Make call and check that values were updated */
aschiffler@7151
   441
    for (i = 0; i < 256; i++) ramp[i] = magic;
aschiffler@7151
   442
    SDL_CalculateGammaRamp(gamma, ramp);
aschiffler@7151
   443
    SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma);
aschiffler@7151
   444
    changed = 0;
aschiffler@7151
   445
    for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++;
aschiffler@7151
   446
    SDLTest_AssertCheck(changed > 250, "Validate that ramp was calculated; expected: >250 values changed, got: %d values changed", changed);
aschiffler@7151
   447
aschiffler@7151
   448
    /* Additional value checks for some cases */
aschiffler@7151
   449
    i = SDLTest_RandomIntegerInRange(64,192);
aschiffler@7151
   450
    switch (variation) {
aschiffler@7151
   451
      case 0:
aschiffler@7151
   452
        SDLTest_AssertCheck(ramp[i] == 0, "Validate value at position %d; expected: 0, got: %d", i, ramp[i]);
aschiffler@7151
   453
        break;
aschiffler@7151
   454
      case 1:
philipp@7162
   455
        SDLTest_AssertCheck(ramp[i] == ((i << 8) | i), "Validate value at position %d; expected: %d, got: %d", i, (i << 8) | i, ramp[i]);
aschiffler@7151
   456
        break;
aschiffler@7151
   457
      case 2:
aschiffler@7151
   458
      case 3:
aschiffler@7151
   459
        SDLTest_AssertCheck(ramp[i] > 0, "Validate value at position %d; expected: >0, got: %d", i, ramp[i]);
aschiffler@7151
   460
        break;
aschiffler@7151
   461
    }
aschiffler@7151
   462
  }
slouken@7191
   463
aschiffler@7151
   464
  /* Negative cases */
aschiffler@7151
   465
  SDL_ClearError();
aschiffler@7151
   466
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7151
   467
  gamma = -1;
aschiffler@7151
   468
  for (i=0; i<256; i++) ramp[i] = magic;
aschiffler@7151
   469
  SDL_CalculateGammaRamp(gamma, ramp);
aschiffler@7151
   470
  SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma);
aschiffler@7151
   471
  error = SDL_GetError();
aschiffler@7151
   472
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   473
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   474
  if (error != NULL) {
slouken@7191
   475
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0,
aschiffler@7151
   476
          "Validate error message, expected: '%s', got: '%s'", expectedError1, error);
aschiffler@7151
   477
  }
aschiffler@7151
   478
  changed = 0;
aschiffler@7151
   479
  for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++;
aschiffler@7151
   480
  SDLTest_AssertCheck(changed ==0, "Validate that ramp unchanged; expected: 0 values changed got: %d values changed", changed);
aschiffler@7151
   481
aschiffler@7151
   482
  SDL_CalculateGammaRamp(0.5f, NULL);
aschiffler@7151
   483
  SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(0.5,NULL)");
aschiffler@7151
   484
  error = SDL_GetError();
aschiffler@7151
   485
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   486
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   487
  if (error != NULL) {
slouken@7191
   488
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0,
aschiffler@7151
   489
          "Validate error message, expected: '%s', got: '%s'", expectedError2, error);
aschiffler@7151
   490
  }
slouken@7191
   491
aschiffler@7151
   492
  /* Cleanup */
aschiffler@7151
   493
  SDL_free(ramp);
slouken@7191
   494
slouken@7191
   495
aschiffler@7134
   496
  return TEST_COMPLETED;
aschiffler@7134
   497
}
aschiffler@7134
   498
aschiffler@7134
   499
/* ================= Test References ================== */
aschiffler@7134
   500
aschiffler@7142
   501
/* Pixels test cases */
aschiffler@7134
   502
static const SDLTest_TestCaseReference pixelsTest1 =
slouken@7191
   503
        { (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED };
aschiffler@7134
   504
aschiffler@7142
   505
static const SDLTest_TestCaseReference pixelsTest2 =
slouken@7191
   506
        { (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_AllocPalette and SDL_FreePalette", TEST_ENABLED };
aschiffler@7142
   507
aschiffler@7151
   508
static const SDLTest_TestCaseReference pixelsTest3 =
slouken@7191
   509
        { (SDLTest_TestCaseFp)pixels_calcGammaRamp, "pixels_calcGammaRamp", "Call to SDL_CalculateGammaRamp", TEST_ENABLED };
aschiffler@7151
   510
aschiffler@7153
   511
static const SDLTest_TestCaseReference pixelsTest4 =
slouken@7191
   512
        { (SDLTest_TestCaseFp)pixels_getPixelFormatName, "pixels_getPixelFormatName", "Call to SDL_GetPixelFormatName", TEST_ENABLED };
aschiffler@7153
   513
aschiffler@7134
   514
/* Sequence of Pixels test cases */
aschiffler@7134
   515
static const SDLTest_TestCaseReference *pixelsTests[] =  {
slouken@7191
   516
    &pixelsTest1, &pixelsTest2, &pixelsTest3, &pixelsTest4, NULL
aschiffler@7134
   517
};
aschiffler@7134
   518
aschiffler@7134
   519
/* Pixels test suite (global) */
aschiffler@7134
   520
SDLTest_TestSuiteReference pixelsTestSuite = {
slouken@7191
   521
    "Pixels",
slouken@7191
   522
    NULL,
slouken@7191
   523
    pixelsTests,
slouken@7191
   524
    NULL
aschiffler@7134
   525
};