|
|
- /* See COPYING.txt for the full license governing this code. */
- /**
- * \file variator_common.c
- *
- * Source file for some common functionality used by variators.
- */
-
- #include <SDL_test.h>
- #include "SDL_visualtest_variator_common.h"
-
- int
- SDLVisualTest_NextValue(SDLVisualTest_SUTOptionValue* var,
- SDLVisualTest_SUTOption* opt)
- {
- if(!var)
- {
- SDLTest_LogError("var argument cannot be NULL");
- return -1;
- }
- if(!opt)
- {
- SDLTest_LogError("opt argument cannot be NULL");
- return -1;
- }
-
- switch(opt->type)
- {
- case SDL_SUT_OPTIONTYPE_BOOL:
- if(var->bool_value)
- {
- var->bool_value = SDL_FALSE;
- return 1;
- }
- else
- {
- var->bool_value = SDL_TRUE;
- return 0;
- }
- break;
-
- case SDL_SUT_OPTIONTYPE_ENUM:
- var->enumerated.index++;
- if(!opt->data.enum_values[var->enumerated.index])
- {
- var->enumerated.index = 0;
- return 1;
- }
- return 0;
- break;
-
- case SDL_SUT_OPTIONTYPE_INT:
- {
- int increment = (opt->data.range.max - opt->data.range.min) /
- SDL_SUT_INTEGER_OPTION_TEST_STEPS;
- /* prevents infinite loop when rounding */
- if(increment == 0)
- increment = 1;
- var->integer.value += increment;
- if(var->integer.value > opt->data.range.max)
- {
- var->integer.value = opt->data.range.min;
- return 1;
- }
- return 0;
- }
- break;
-
- case SDL_SUT_OPTIONTYPE_STRING:
- return 1;
- break;
- }
- return -1;
- }
-
- int
- SDLVisualTest_MakeStrFromVariation(SDLVisualTest_Variation* variation,
- SDLVisualTest_SUTConfig* config,
- char* buffer, int size)
- {
- int i, index;
- SDLVisualTest_SUTOptionValue* vars;
- SDLVisualTest_SUTOption* options;
- if(!variation)
- {
- SDLTest_LogError("variation argument cannot be NULL");
- return 0;
- }
- if(!config)
- {
- SDLTest_LogError("config argument cannot be NULL");
- return 0;
- }
- if(!buffer)
- {
- SDLTest_LogError("buffer argument cannot be NULL");
- return 0;
- }
- if(size <= 0)
- {
- SDLTest_LogError("size argument should be positive");
- return 0;
- }
-
- index = 0;
- buffer[0] = '\0';
- options = config->options;
- vars = variation->vars;
- for(i = 0; i < variation->num_vars; i++)
- {
- int n, enum_index;
- if(index >= size - 1)
- {
- SDLTest_LogError("String did not fit in buffer size");
- return 0;
- }
- switch(options[i].type)
- {
- case SDL_SUT_OPTIONTYPE_BOOL:
- if(vars[i].bool_value)
- {
- n = SDL_snprintf(buffer + index, size - index, "%s ",
- options[i].name);
- if(n <= 0)
- {
- SDLTest_LogError("SDL_snprintf() failed");
- return 0;
- }
- index += n;
- }
- break;
-
- case SDL_SUT_OPTIONTYPE_ENUM:
- if(vars[i].enumerated.on)
- {
- enum_index = vars[i].enumerated.index;
- n = SDL_snprintf(buffer + index, size - index, "%s %s ",
- options[i].name, options[i].data.enum_values[enum_index]);
- index += n;
- }
- break;
-
- case SDL_SUT_OPTIONTYPE_INT:
- if(vars[i].integer.on)
- {
- n = SDL_snprintf(buffer + index, size - index, "%s %d ",
- options[i].name, vars[i].integer.value);
- index += n;
- }
- break;
-
- case SDL_SUT_OPTIONTYPE_STRING:
- if(vars[i].string.on)
- {
- n = SDL_snprintf(buffer + index, size - index, "%s %s ",
- options[i].name, vars[i].string.value);
- index += n;
- }
- break;
- }
- }
- return 1;
- }
-
- int
- SDLVisualTest_InitVariation(SDLVisualTest_Variation* variation,
- SDLVisualTest_SUTConfig* config)
- {
- int i;
- SDLVisualTest_SUTOptionValue* vars;
- SDLVisualTest_SUTOption* options;
- if(!variation)
- {
- SDLTest_LogError("variation argument cannot be NULL");
- return 0;
- }
- if(!config)
- {
- SDLTest_LogError("config argument cannot be NULL");
- return 0;
- }
-
- /* initialize the first variation */
- if(config->num_options <= 0)
- {
- SDLTest_LogError("config->num_options must be positive");
- return 0;
- }
- variation->vars = (SDLVisualTest_SUTOptionValue*)SDL_malloc(config->num_options *
- sizeof(SDLVisualTest_SUTOptionValue));
- if(!variation->vars)
- {
- SDLTest_LogError("malloc() failed");
- return 0;
- }
- variation->num_vars = config->num_options;
- vars = variation->vars;
- options = config->options;
- for(i = 0; i < variation->num_vars; i++)
- {
- switch(options[i].type)
- {
- case SDL_SUT_OPTIONTYPE_BOOL:
- vars[i].bool_value = SDL_FALSE;
- break;
-
- case SDL_SUT_OPTIONTYPE_ENUM:
- vars[i].enumerated.on = SDL_TRUE;
- vars[i].enumerated.index = 0;
- break;
-
- case SDL_SUT_OPTIONTYPE_INT:
- {
- vars[i].integer.on = SDL_TRUE;
- vars[i].integer.value = options[i].data.range.min;
- }
- break;
-
- case SDL_SUT_OPTIONTYPE_STRING:
- vars[i].string.on = SDL_TRUE;
- vars[i].string.value = options[i].name;
- break;
- }
- }
- return 1;
- }
|