| /* See COPYING.txt for the full license governing this code. */ |
| /** |
| * \file variator_random.c |
| * |
| * Source file for the variator that tests the SUT with random variations to the |
| * input parameters. |
| */ |
| |
| #include <time.h> |
| #include <SDL_test.h> |
| #include "SDL_visualtest_random_variator.h" |
| |
| int |
| SDLVisualTest_InitRandomVariator(SDLVisualTest_RandomVariator* variator, |
| SDLVisualTest_SUTConfig* config, Uint64 seed) |
| { |
| if(!variator) |
| { |
| SDLTest_LogError("variator argument cannot be NULL"); |
| return 0; |
| } |
| if(!config) |
| { |
| SDLTest_LogError("config argument cannot be NULL"); |
| return 0; |
| } |
| |
| if(seed) |
| SDLTest_FuzzerInit(seed); |
| else |
| SDLTest_FuzzerInit(time(NULL)); |
| |
| variator->config = *config; |
| |
| if(!SDLVisualTest_InitVariation(&variator->variation, &variator->config)) |
| { |
| SDLTest_LogError("SDLVisualTest_InitVariation() failed"); |
| return 0; |
| } |
| |
| return 1; |
| } |
| |
| char* |
| SDLVisualTest_GetNextRandomVariation(SDLVisualTest_RandomVariator* variator) |
| { |
| SDLVisualTest_SUTOptionValue* vars; |
| SDLVisualTest_SUTOption* options; |
| int i; |
| if(!variator) |
| { |
| SDLTest_LogError("variator argument cannot be NULL"); |
| return NULL; |
| } |
| |
| /* to save typing */ |
| vars = variator->variation.vars; |
| options = variator->config.options; |
| |
| /* generate a random variation */ |
| for(i = 0; i < variator->variation.num_vars; i++) |
| { |
| switch(options[i].type) |
| { |
| case SDL_SUT_OPTIONTYPE_BOOL: |
| vars[i].bool_value = SDLTest_RandomIntegerInRange(0, 1) ? SDL_FALSE : |
| SDL_TRUE; |
| break; |
| |
| case SDL_SUT_OPTIONTYPE_ENUM: |
| { |
| int emx = 0; |
| while(options[i].data.enum_values[emx]) |
| emx++; |
| vars[i].enumerated.index = SDLTest_RandomIntegerInRange(0, emx - 1); |
| } |
| break; |
| |
| case SDL_SUT_OPTIONTYPE_INT: |
| vars[i].integer.value = SDLTest_RandomIntegerInRange( |
| options[i].data.range.min, |
| options[i].data.range.max); |
| break; |
| |
| case SDL_SUT_OPTIONTYPE_STRING: |
| // String values are left unchanged |
| break; |
| } |
| } |
| |
| /* convert variation to an arguments string */ |
| if(!SDLVisualTest_MakeStrFromVariation(&variator->variation, &variator->config, |
| variator->buffer, MAX_SUT_ARGS_LEN)) |
| { |
| SDLTest_LogError("SDLVisualTest_MakeStrFromVariation() failed"); |
| return NULL; |
| } |
| |
| return variator->buffer; |
| } |
| |
| void SDLVisualTest_FreeRandomVariator(SDLVisualTest_RandomVariator* variator) |
| { |
| if(!variator) |
| { |
| SDLTest_LogError("variator argument cannot be NULL"); |
| return; |
| } |
| SDL_free(variator->variation.vars); |
| variator->variation.vars = NULL; |
| } |