test/testautomation_pixels.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Dec 2017 16:08:09 -0800
changeset 11730 ac6c607e065c
parent 9046 c3ec7c3e6c24
child 13249 0d2519c40e47
permissions -rw-r--r--
Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs
Also generate iOS versions of the Metal shaders
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 */
slouken@9046
    82
const int _numNonRGBPixelFormats = 7;
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@9046
    89
    SDL_PIXELFORMAT_YVYU,
slouken@9046
    90
    SDL_PIXELFORMAT_NV12,
slouken@9046
    91
    SDL_PIXELFORMAT_NV21
aschiffler@7134
    92
  };
slouken@7191
    93
char* _nonRGBPixelFormatsVerbose[] =
aschiffler@7134
    94
  {
aschiffler@7134
    95
    "SDL_PIXELFORMAT_YV12",
aschiffler@7134
    96
    "SDL_PIXELFORMAT_IYUV",
aschiffler@7134
    97
    "SDL_PIXELFORMAT_YUY2",
aschiffler@7134
    98
    "SDL_PIXELFORMAT_UYVY",
slouken@9046
    99
    "SDL_PIXELFORMAT_YVYU",
slouken@9046
   100
    "SDL_PIXELFORMAT_NV12",
slouken@9046
   101
    "SDL_PIXELFORMAT_NV21"
aschiffler@7134
   102
  };
aschiffler@7134
   103
aschiffler@7153
   104
/* Definition of some invalid formats for negative tests */
aschiffler@7153
   105
const int _numInvalidPixelFormats = 2;
slouken@7191
   106
Uint32 _invalidPixelFormats[] =
aschiffler@7153
   107
  {
aschiffler@7153
   108
    0xfffffffe,
aschiffler@7153
   109
    0xffffffff
aschiffler@7153
   110
  };
slouken@7191
   111
char* _invalidPixelFormatsVerbose[] =
aschiffler@7153
   112
  {
aschiffler@7153
   113
    "SDL_PIXELFORMAT_UNKNOWN",
aschiffler@7153
   114
    "SDL_PIXELFORMAT_UNKNOWN"
aschiffler@7153
   115
  };
aschiffler@7153
   116
aschiffler@7134
   117
/* Test case functions */
aschiffler@7134
   118
aschiffler@7134
   119
/**
aschiffler@7134
   120
 * @brief Call to SDL_AllocFormat and SDL_FreeFormat
aschiffler@7142
   121
 *
aschiffler@7142
   122
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocFormat
slouken@7191
   123
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreeFormat
aschiffler@7134
   124
 */
aschiffler@7134
   125
int
aschiffler@7134
   126
pixels_allocFreeFormat(void *arg)
aschiffler@7134
   127
{
aschiffler@7153
   128
  const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN";
aschiffler@7151
   129
  const char *expectedError = "Parameter 'format' is invalid";
slouken@7191
   130
  const char *error;
aschiffler@7134
   131
  int i;
aschiffler@7134
   132
  Uint32 format;
aschiffler@7134
   133
  Uint32 masks;
aschiffler@7134
   134
  SDL_PixelFormat* result;
aschiffler@7134
   135
aschiffler@7153
   136
  /* Blank/unknown format */
aschiffler@7153
   137
  format = 0;
aschiffler@7153
   138
  SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format);
slouken@7191
   139
aschiffler@7153
   140
  /* Allocate format */
aschiffler@7153
   141
  result = SDL_AllocFormat(format);
aschiffler@7153
   142
  SDLTest_AssertPass("Call to SDL_AllocFormat()");
slouken@7191
   143
  SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   144
  if (result != NULL) {
slouken@7191
   145
    SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format);
slouken@7191
   146
    SDLTest_AssertCheck(result->BitsPerPixel == 0, "Verify value of result.BitsPerPixel; expected: 0, got %u", result->BitsPerPixel);
slouken@7191
   147
    SDLTest_AssertCheck(result->BytesPerPixel == 0, "Verify value of result.BytesPerPixel; expected: 0, got %u", result->BytesPerPixel);
aschiffler@7153
   148
    masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
aschiffler@7153
   149
    SDLTest_AssertCheck(masks == 0, "Verify value of result.[RGBA]mask combined; expected: 0, got %u", masks);
slouken@7191
   150
aschiffler@7153
   151
    /* Deallocate again */
aschiffler@7153
   152
    SDL_FreeFormat(result);
slouken@7191
   153
    SDLTest_AssertPass("Call to SDL_FreeFormat()");
aschiffler@7153
   154
  }
aschiffler@7153
   155
aschiffler@7134
   156
  /* RGB formats */
aschiffler@7134
   157
  for (i = 0; i < _numRGBPixelFormats; i++) {
aschiffler@7134
   158
    format = _RGBPixelFormats[i];
aschiffler@7134
   159
    SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format);
slouken@7191
   160
aschiffler@7134
   161
    /* Allocate format */
aschiffler@7134
   162
    result = SDL_AllocFormat(format);
aschiffler@7134
   163
    SDLTest_AssertPass("Call to SDL_AllocFormat()");
slouken@7191
   164
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7134
   165
    if (result != NULL) {
slouken@7191
   166
      SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format);
slouken@7191
   167
      SDLTest_AssertCheck(result->BitsPerPixel > 0, "Verify value of result.BitsPerPixel; expected: >0, got %u", result->BitsPerPixel);
slouken@7191
   168
      SDLTest_AssertCheck(result->BytesPerPixel > 0, "Verify value of result.BytesPerPixel; expected: >0, got %u", result->BytesPerPixel);
slouken@7191
   169
      if (result->palette != NULL) {
aschiffler@7134
   170
         masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
aschiffler@7134
   171
         SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %u", masks);
aschiffler@7134
   172
      }
slouken@7191
   173
aschiffler@7134
   174
      /* Deallocate again */
aschiffler@7134
   175
      SDL_FreeFormat(result);
slouken@7191
   176
      SDLTest_AssertPass("Call to SDL_FreeFormat()");
aschiffler@7134
   177
    }
aschiffler@7134
   178
  }
aschiffler@7134
   179
aschiffler@7134
   180
  /* Non-RGB formats */
aschiffler@7134
   181
  for (i = 0; i < _numNonRGBPixelFormats; i++) {
aschiffler@7134
   182
    format = _nonRGBPixelFormats[i];
aschiffler@7134
   183
    SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format);
slouken@7191
   184
aschiffler@7134
   185
    /* Try to allocate format */
aschiffler@7134
   186
    result = SDL_AllocFormat(format);
aschiffler@7134
   187
    SDLTest_AssertPass("Call to SDL_AllocFormat()");
slouken@7191
   188
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7134
   189
  }
slouken@7191
   190
aschiffler@7142
   191
  /* Negative cases */
slouken@7191
   192
slouken@7191
   193
  /* Invalid Formats */
aschiffler@7153
   194
  for (i = 0; i < _numInvalidPixelFormats; i++) {
aschiffler@7153
   195
    SDL_ClearError();
aschiffler@7153
   196
    SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7153
   197
    format = _invalidPixelFormats[i];
aschiffler@7153
   198
    result = SDL_AllocFormat(format);
aschiffler@7153
   199
    SDLTest_AssertPass("Call to SDL_AllocFormat(%u)", format);
slouken@7191
   200
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7153
   201
    error = SDL_GetError();
aschiffler@7153
   202
    SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7153
   203
    SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7153
   204
    if (error != NULL) {
slouken@7191
   205
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0,
aschiffler@7151
   206
          "Validate error message, expected: '%s', got: '%s'", expectedError, error);
aschiffler@7153
   207
    }
aschiffler@7151
   208
  }
aschiffler@7142
   209
aschiffler@7151
   210
  /* Invalid free pointer */
aschiffler@7151
   211
  SDL_ClearError();
aschiffler@7151
   212
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7142
   213
  SDL_FreeFormat(NULL);
aschiffler@7142
   214
  SDLTest_AssertPass("Call to SDL_FreeFormat(NULL)");
aschiffler@7151
   215
  error = SDL_GetError();
aschiffler@7151
   216
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   217
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   218
  if (error != NULL) {
slouken@7191
   219
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError) == 0,
aschiffler@7151
   220
          "Validate error message, expected: '%s', got: '%s'", expectedError, error);
aschiffler@7151
   221
  }
slouken@7191
   222
aschiffler@7142
   223
  return TEST_COMPLETED;
aschiffler@7142
   224
}
aschiffler@7142
   225
aschiffler@7142
   226
/**
aschiffler@7153
   227
 * @brief Call to SDL_GetPixelFormatName
aschiffler@7153
   228
 *
aschiffler@7153
   229
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_GetPixelFormatName
aschiffler@7153
   230
 */
aschiffler@7153
   231
int
aschiffler@7153
   232
pixels_getPixelFormatName(void *arg)
aschiffler@7153
   233
{
aschiffler@7153
   234
  const char *unknownFormat = "SDL_PIXELFORMAT_UNKNOWN";
slouken@7191
   235
  const char *error;
aschiffler@7153
   236
  int i;
aschiffler@7153
   237
  Uint32 format;
aschiffler@7153
   238
  char* result;
aschiffler@7153
   239
aschiffler@7153
   240
  /* Blank/undefined format */
aschiffler@7153
   241
  format = 0;
aschiffler@7153
   242
  SDLTest_Log("RGB Format: %s (%u)", unknownFormat, format);
slouken@7191
   243
aschiffler@7153
   244
  /* Get name of format */
aschiffler@7153
   245
  result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   246
  SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
slouken@7191
   247
  SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   248
  if (result != NULL) {
slouken@7721
   249
      SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
slouken@7191
   250
      SDLTest_AssertCheck(SDL_strcmp(result, unknownFormat) == 0,
aschiffler@7153
   251
        "Verify result text; expected: %s, got %s", unknownFormat, result);
aschiffler@7153
   252
  }
aschiffler@7153
   253
aschiffler@7153
   254
  /* RGB formats */
aschiffler@7153
   255
  for (i = 0; i < _numRGBPixelFormats; i++) {
aschiffler@7153
   256
    format = _RGBPixelFormats[i];
aschiffler@7153
   257
    SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format);
slouken@7191
   258
aschiffler@7153
   259
    /* Get name of format */
aschiffler@7153
   260
    result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   261
    SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
slouken@7191
   262
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   263
    if (result != NULL) {
slouken@7721
   264
      SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
slouken@7191
   265
      SDLTest_AssertCheck(SDL_strcmp(result, _RGBPixelFormatsVerbose[i]) == 0,
aschiffler@7153
   266
        "Verify result text; expected: %s, got %s", _RGBPixelFormatsVerbose[i], result);
aschiffler@7153
   267
    }
aschiffler@7153
   268
  }
aschiffler@7153
   269
aschiffler@7153
   270
  /* Non-RGB formats */
aschiffler@7153
   271
  for (i = 0; i < _numNonRGBPixelFormats; i++) {
aschiffler@7153
   272
    format = _nonRGBPixelFormats[i];
aschiffler@7153
   273
    SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format);
slouken@7191
   274
aschiffler@7153
   275
    /* Get name of format */
aschiffler@7153
   276
    result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   277
    SDLTest_AssertPass("Call to SDL_GetPixelFormatName()");
slouken@7191
   278
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   279
    if (result != NULL) {
slouken@7721
   280
      SDLTest_AssertCheck(result[0] != '\0', "Verify result is non-empty");
slouken@7191
   281
      SDLTest_AssertCheck(SDL_strcmp(result, _nonRGBPixelFormatsVerbose[i]) == 0,
aschiffler@7153
   282
        "Verify result text; expected: %s, got %s", _nonRGBPixelFormatsVerbose[i], result);
aschiffler@7153
   283
    }
aschiffler@7153
   284
  }
slouken@7191
   285
aschiffler@7153
   286
  /* Negative cases */
slouken@7191
   287
slouken@7191
   288
  /* Invalid Formats */
aschiffler@7153
   289
  SDL_ClearError();
aschiffler@7153
   290
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7153
   291
  for (i = 0; i < _numInvalidPixelFormats; i++) {
aschiffler@7153
   292
    format = _invalidPixelFormats[i];
aschiffler@7153
   293
    result = (char *)SDL_GetPixelFormatName(format);
aschiffler@7153
   294
    SDLTest_AssertPass("Call to SDL_GetPixelFormatName(%u)", format);
slouken@7191
   295
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7153
   296
    if (result != NULL) {
slouken@7721
   297
      SDLTest_AssertCheck(result[0] != '\0',
aschiffler@7153
   298
        "Verify result is non-empty; got: %s", result);
aschiffler@7153
   299
      SDLTest_AssertCheck(SDL_strcmp(result, _invalidPixelFormatsVerbose[i]) == 0,
aschiffler@7153
   300
        "Validate name is UNKNOWN, expected: '%s', got: '%s'", _invalidPixelFormatsVerbose[i], result);
aschiffler@7153
   301
    }
aschiffler@7153
   302
    error = SDL_GetError();
aschiffler@7153
   303
    SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7879
   304
    SDLTest_AssertCheck(error == NULL || error[0] == '\0', "Validate that error message is empty");
aschiffler@7153
   305
  }
aschiffler@7153
   306
aschiffler@7153
   307
  return TEST_COMPLETED;
aschiffler@7153
   308
}
aschiffler@7153
   309
aschiffler@7153
   310
/**
aschiffler@7142
   311
 * @brief Call to SDL_AllocPalette and SDL_FreePalette
aschiffler@7142
   312
 *
aschiffler@7142
   313
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocPalette
aschiffler@7142
   314
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreePalette
aschiffler@7142
   315
 */
aschiffler@7142
   316
int
aschiffler@7142
   317
pixels_allocFreePalette(void *arg)
aschiffler@7142
   318
{
aschiffler@7151
   319
  const char *expectedError1 = "Parameter 'ncolors' is invalid";
aschiffler@7151
   320
  const char *expectedError2 = "Parameter 'palette' is invalid";
slouken@7191
   321
  const char *error;
aschiffler@7142
   322
  int variation;
aschiffler@7142
   323
  int i;
aschiffler@7142
   324
  int ncolors;
aschiffler@7142
   325
  SDL_Palette* result;
aschiffler@7142
   326
aschiffler@7142
   327
  /* Allocate palette */
slouken@7191
   328
  for (variation = 1; variation <= 3; variation++) {
aschiffler@7142
   329
    switch (variation) {
aschiffler@7142
   330
      /* Just one color */
aschiffler@7142
   331
      case 1:
aschiffler@7142
   332
        ncolors = 1;
aschiffler@7142
   333
        break;
aschiffler@7142
   334
      /* Two colors */
aschiffler@7142
   335
      case 2:
aschiffler@7142
   336
        ncolors = 2;
aschiffler@7142
   337
        break;
aschiffler@7142
   338
      /* More than two colors */
aschiffler@7142
   339
      case 3:
aschiffler@7142
   340
        ncolors = SDLTest_RandomIntegerInRange(8, 16);
aschiffler@7142
   341
        break;
aschiffler@7142
   342
    }
aschiffler@7142
   343
aschiffler@7142
   344
    result = SDL_AllocPalette(ncolors);
aschiffler@7142
   345
    SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
slouken@7191
   346
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");
aschiffler@7142
   347
    if (result != NULL) {
slouken@7191
   348
      SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors);
aschiffler@7142
   349
      if (result->ncolors > 0) {
aschiffler@7142
   350
        SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL");
aschiffler@7142
   351
        if (result->colors != NULL) {
aschiffler@7142
   352
          for(i = 0; i < result->ncolors; i++) {
slouken@7191
   353
            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
   354
            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
   355
            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
   356
           }
slouken@7191
   357
         }
aschiffler@7142
   358
      }
slouken@7191
   359
aschiffler@7142
   360
      /* Deallocate again */
aschiffler@7142
   361
      SDL_FreePalette(result);
slouken@7191
   362
      SDLTest_AssertPass("Call to SDL_FreePalette()");
aschiffler@7142
   363
    }
aschiffler@7142
   364
  }
aschiffler@7142
   365
aschiffler@7142
   366
  /* Negative cases */
slouken@7191
   367
aschiffler@7151
   368
  /* Invalid number of colors */
aschiffler@7142
   369
  for (ncolors = 0; ncolors > -3; ncolors--) {
aschiffler@7151
   370
    SDL_ClearError();
aschiffler@7151
   371
    SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7142
   372
    result = SDL_AllocPalette(ncolors);
aschiffler@7142
   373
    SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
aschiffler@7142
   374
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7151
   375
    error = SDL_GetError();
aschiffler@7151
   376
    SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   377
    SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   378
    if (error != NULL) {
slouken@7191
   379
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0,
aschiffler@7151
   380
          "Validate error message, expected: '%s', got: '%s'", expectedError1, error);
aschiffler@7151
   381
    }
aschiffler@7142
   382
  }
aschiffler@7142
   383
aschiffler@7151
   384
  /* Invalid free pointer */
aschiffler@7151
   385
  SDL_ClearError();
aschiffler@7151
   386
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7142
   387
  SDL_FreePalette(NULL);
aschiffler@7142
   388
  SDLTest_AssertPass("Call to SDL_FreePalette(NULL)");
aschiffler@7151
   389
  error = SDL_GetError();
aschiffler@7151
   390
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   391
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   392
  if (error != NULL) {
slouken@7191
   393
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0,
aschiffler@7151
   394
          "Validate error message, expected: '%s', got: '%s'", expectedError2, error);
aschiffler@7151
   395
  }
slouken@7191
   396
aschiffler@7151
   397
  return TEST_COMPLETED;
aschiffler@7151
   398
}
aschiffler@7151
   399
aschiffler@7151
   400
/**
aschiffler@7151
   401
 * @brief Call to SDL_CalculateGammaRamp
aschiffler@7151
   402
 *
aschiffler@7151
   403
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_CalculateGammaRamp
aschiffler@7151
   404
 */
aschiffler@7151
   405
int
aschiffler@7151
   406
pixels_calcGammaRamp(void *arg)
aschiffler@7151
   407
{
aschiffler@7151
   408
  const char *expectedError1 = "Parameter 'gamma' is invalid";
aschiffler@7151
   409
  const char *expectedError2 = "Parameter 'ramp' is invalid";
slouken@7191
   410
  const char *error;
aschiffler@7151
   411
  float gamma;
aschiffler@7151
   412
  Uint16 *ramp;
aschiffler@7151
   413
  int variation;
aschiffler@7151
   414
  int i;
aschiffler@7151
   415
  int changed;
aschiffler@7151
   416
  Uint16 magic = 0xbeef;
aschiffler@7151
   417
gabomdq@7677
   418
  /* Allocate temp ramp array and fill with some value */
aschiffler@7151
   419
  ramp = (Uint16 *)SDL_malloc(256 * sizeof(Uint16));
aschiffler@7151
   420
  SDLTest_AssertCheck(ramp != NULL, "Validate temp ramp array could be allocated");
aschiffler@7151
   421
  if (ramp == NULL) return TEST_ABORTED;
slouken@7191
   422
aschiffler@7151
   423
  /* Make call with different gamma values */
aschiffler@7151
   424
  for (variation = 0; variation < 4; variation++) {
aschiffler@7151
   425
    switch (variation) {
aschiffler@7151
   426
      /* gamma = 0 all black */
slouken@7191
   427
      case 0:
aschiffler@7151
   428
        gamma = 0.0f;
aschiffler@7151
   429
        break;
aschiffler@7151
   430
      /* gamma = 1 identity */
aschiffler@7151
   431
      case 1:
aschiffler@7151
   432
        gamma = 1.0f;
aschiffler@7151
   433
        break;
slouken@7191
   434
      /* gamma = [0.2,0.8] normal range */
aschiffler@7151
   435
      case 2:
aschiffler@7153
   436
        gamma = 0.2f + 0.8f * SDLTest_RandomUnitFloat();
aschiffler@7151
   437
        break;
slouken@7191
   438
      /* gamma = >1.1 non-standard range */
aschiffler@7151
   439
      case 3:
aschiffler@7153
   440
        gamma = 1.1f + SDLTest_RandomUnitFloat();
aschiffler@7151
   441
        break;
aschiffler@7151
   442
    }
aschiffler@7151
   443
slouken@7191
   444
    /* Make call and check that values were updated */
aschiffler@7151
   445
    for (i = 0; i < 256; i++) ramp[i] = magic;
aschiffler@7151
   446
    SDL_CalculateGammaRamp(gamma, ramp);
aschiffler@7151
   447
    SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma);
aschiffler@7151
   448
    changed = 0;
aschiffler@7151
   449
    for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++;
aschiffler@7151
   450
    SDLTest_AssertCheck(changed > 250, "Validate that ramp was calculated; expected: >250 values changed, got: %d values changed", changed);
aschiffler@7151
   451
aschiffler@7151
   452
    /* Additional value checks for some cases */
aschiffler@7151
   453
    i = SDLTest_RandomIntegerInRange(64,192);
aschiffler@7151
   454
    switch (variation) {
aschiffler@7151
   455
      case 0:
aschiffler@7151
   456
        SDLTest_AssertCheck(ramp[i] == 0, "Validate value at position %d; expected: 0, got: %d", i, ramp[i]);
aschiffler@7151
   457
        break;
aschiffler@7151
   458
      case 1:
philipp@7162
   459
        SDLTest_AssertCheck(ramp[i] == ((i << 8) | i), "Validate value at position %d; expected: %d, got: %d", i, (i << 8) | i, ramp[i]);
aschiffler@7151
   460
        break;
aschiffler@7151
   461
      case 2:
aschiffler@7151
   462
      case 3:
aschiffler@7151
   463
        SDLTest_AssertCheck(ramp[i] > 0, "Validate value at position %d; expected: >0, got: %d", i, ramp[i]);
aschiffler@7151
   464
        break;
aschiffler@7151
   465
    }
aschiffler@7151
   466
  }
slouken@7191
   467
aschiffler@7151
   468
  /* Negative cases */
aschiffler@7151
   469
  SDL_ClearError();
aschiffler@7151
   470
  SDLTest_AssertPass("Call to SDL_ClearError()");
aschiffler@7151
   471
  gamma = -1;
aschiffler@7151
   472
  for (i=0; i<256; i++) ramp[i] = magic;
aschiffler@7151
   473
  SDL_CalculateGammaRamp(gamma, ramp);
aschiffler@7151
   474
  SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(%f)", gamma);
aschiffler@7151
   475
  error = SDL_GetError();
aschiffler@7151
   476
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   477
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   478
  if (error != NULL) {
slouken@7191
   479
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError1) == 0,
aschiffler@7151
   480
          "Validate error message, expected: '%s', got: '%s'", expectedError1, error);
aschiffler@7151
   481
  }
aschiffler@7151
   482
  changed = 0;
aschiffler@7151
   483
  for (i = 0; i < 256; i++) if (ramp[i] != magic) changed++;
aschiffler@7151
   484
  SDLTest_AssertCheck(changed ==0, "Validate that ramp unchanged; expected: 0 values changed got: %d values changed", changed);
aschiffler@7151
   485
aschiffler@7151
   486
  SDL_CalculateGammaRamp(0.5f, NULL);
aschiffler@7151
   487
  SDLTest_AssertPass("Call to SDL_CalculateGammaRamp(0.5,NULL)");
aschiffler@7151
   488
  error = SDL_GetError();
aschiffler@7151
   489
  SDLTest_AssertPass("Call to SDL_GetError()");
aschiffler@7151
   490
  SDLTest_AssertCheck(error != NULL, "Validate that error message was not NULL");
aschiffler@7151
   491
  if (error != NULL) {
slouken@7191
   492
      SDLTest_AssertCheck(SDL_strcmp(error, expectedError2) == 0,
aschiffler@7151
   493
          "Validate error message, expected: '%s', got: '%s'", expectedError2, error);
aschiffler@7151
   494
  }
slouken@7191
   495
aschiffler@7151
   496
  /* Cleanup */
aschiffler@7151
   497
  SDL_free(ramp);
slouken@7191
   498
slouken@7191
   499
aschiffler@7134
   500
  return TEST_COMPLETED;
aschiffler@7134
   501
}
aschiffler@7134
   502
aschiffler@7134
   503
/* ================= Test References ================== */
aschiffler@7134
   504
aschiffler@7142
   505
/* Pixels test cases */
aschiffler@7134
   506
static const SDLTest_TestCaseReference pixelsTest1 =
slouken@7191
   507
        { (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED };
aschiffler@7134
   508
aschiffler@7142
   509
static const SDLTest_TestCaseReference pixelsTest2 =
slouken@7191
   510
        { (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_AllocPalette and SDL_FreePalette", TEST_ENABLED };
aschiffler@7142
   511
aschiffler@7151
   512
static const SDLTest_TestCaseReference pixelsTest3 =
slouken@7191
   513
        { (SDLTest_TestCaseFp)pixels_calcGammaRamp, "pixels_calcGammaRamp", "Call to SDL_CalculateGammaRamp", TEST_ENABLED };
aschiffler@7151
   514
aschiffler@7153
   515
static const SDLTest_TestCaseReference pixelsTest4 =
slouken@7191
   516
        { (SDLTest_TestCaseFp)pixels_getPixelFormatName, "pixels_getPixelFormatName", "Call to SDL_GetPixelFormatName", TEST_ENABLED };
aschiffler@7153
   517
aschiffler@7134
   518
/* Sequence of Pixels test cases */
aschiffler@7134
   519
static const SDLTest_TestCaseReference *pixelsTests[] =  {
slouken@7191
   520
    &pixelsTest1, &pixelsTest2, &pixelsTest3, &pixelsTest4, NULL
aschiffler@7134
   521
};
aschiffler@7134
   522
aschiffler@7134
   523
/* Pixels test suite (global) */
aschiffler@7134
   524
SDLTest_TestSuiteReference pixelsTestSuite = {
slouken@7191
   525
    "Pixels",
slouken@7191
   526
    NULL,
slouken@7191
   527
    pixelsTests,
slouken@7191
   528
    NULL
aschiffler@7134
   529
};