Atlas - variator_exhaustive.c
Home / ext / SDL2 / visualtest / src Lines: 1 | Size: 3661 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)][FILE BEGIN]1/* See COPYING.txt for the full license governing this code. */ 2/** 3 * \file variator_exhaustive.c 4 * 5 * Source file for the variator that tests the SUT with all the different 6 * variations of input parameters that are valid. 7 */ 8 9#include <time.h> 10#include <SDL_test.h> 11#include "SDL_visualtest_sut_configparser.h" 12#include "SDL_visualtest_exhaustive_variator.h" 13 14static int 15NextVariation(SDLVisualTest_Variation* variation, 16 SDLVisualTest_SUTConfig* config) 17{ 18 int i, carry; 19 if(!variation) 20 { 21 SDLTest_LogError("variation argument cannot be NULL"); 22 return -1; 23 } 24 if(!config) 25 { 26 SDLTest_LogError("config argument cannot be NULL"); 27 return -1; 28 } 29 30 carry = 1; 31 for(i = 0; i < variation->num_vars; i++) 32 { 33 carry = SDLVisualTest_NextValue(&variation->vars[i], &config->options[i]); 34 if(carry != 1) 35 break; 36 } 37 38 if(carry == 1) /* we're done, we've tried all possible variations */ 39 return 0; 40 if(carry == 0) 41 return 1; 42 SDLTest_LogError("NextVariation() failed"); 43 return -1; 44} 45 46int 47SDLVisualTest_InitExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator, 48 SDLVisualTest_SUTConfig* config) 49{ 50 if(!variator) 51 { 52 SDLTest_LogError("variator argument cannot be NULL"); 53 return 0; 54 } 55 if(!config) 56 { 57 SDLTest_LogError("config argument cannot be NULL"); 58 return 0; 59 } 60 61 SDLTest_FuzzerInit(time(NULL)); 62 63 variator->config = *config; 64 variator->variation.num_vars = 0; 65 variator->variation.vars = NULL; 66 67 return 1; 68} 69 70/* TODO: Right now variations where an option is not specified at all are not 71 tested for. This can be implemented by switching the on attribute for integer, 72 enum and string options to true and false. */ 73char* 74SDLVisualTest_GetNextExhaustiveVariation(SDLVisualTest_ExhaustiveVariator* variator) 75{ 76 int success; 77 if(!variator) 78 { 79 SDLTest_LogError("variator argument cannot be NULL"); 80 return NULL; 81 } 82 83 if(!variator->variation.vars) /* the first time this function is called */ 84 { 85 success = SDLVisualTest_InitVariation(&variator->variation, 86 &variator->config); 87 if(!success) 88 { 89 SDLTest_LogError("SDLVisualTest_InitVariation() failed"); 90 return NULL; 91 } 92 success = SDLVisualTest_MakeStrFromVariation(&variator->variation, 93 &variator->config, variator->buffer, MAX_SUT_ARGS_LEN); 94 if(!success) 95 { 96 SDLTest_LogError("SDLVisualTest_MakeStrFromVariation() failed"); 97 return NULL; 98 } 99 return variator->buffer; 100 } 101 else 102 { 103 success = NextVariation(&variator->variation, &variator->config); 104 if(success == 1) 105 { 106 success = SDLVisualTest_MakeStrFromVariation(&variator->variation, 107 &variator->config, variator->buffer, MAX_SUT_ARGS_LEN); 108 if(!success) 109 { 110 SDLTest_LogError("SDLVisualTest_MakeStrFromVariation() failed"); 111 return NULL; 112 } 113 return variator->buffer; 114 } 115 else if(success == -1) 116 SDLTest_LogError("NextVariation() failed."); 117 return NULL; 118 } 119 return NULL; 120} 121 122void 123SDLVisualTest_FreeExhaustiveVariator(SDLVisualTest_ExhaustiveVariator* variator) 124{ 125 if(!variator) 126 { 127 SDLTest_LogError("variator argument cannot be NULL"); 128 return; 129 } 130 SDL_free(variator->variation.vars); 131 variator->variation.vars = NULL; 132}[FILE END](C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.