diff options
Diffstat (limited to 'src/contrib/SDL-2.30.2/include/SDL_test_fuzzer.h')
-rw-r--r-- | src/contrib/SDL-2.30.2/include/SDL_test_fuzzer.h | 386 |
1 files changed, 386 insertions, 0 deletions
diff --git a/src/contrib/SDL-2.30.2/include/SDL_test_fuzzer.h b/src/contrib/SDL-2.30.2/include/SDL_test_fuzzer.h new file mode 100644 index 0000000..a847ccb --- /dev/null +++ b/src/contrib/SDL-2.30.2/include/SDL_test_fuzzer.h | |||
@@ -0,0 +1,386 @@ | |||
1 | /* | ||
2 | Simple DirectMedia Layer | ||
3 | Copyright (C) 1997-2024 Sam Lantinga <slouken@libsdl.org> | ||
4 | |||
5 | This software is provided 'as-is', without any express or implied | ||
6 | warranty. In no event will the authors be held liable for any damages | ||
7 | arising from the use of this software. | ||
8 | |||
9 | Permission is granted to anyone to use this software for any purpose, | ||
10 | including commercial applications, and to alter it and redistribute it | ||
11 | freely, subject to the following restrictions: | ||
12 | |||
13 | 1. The origin of this software must not be misrepresented; you must not | ||
14 | claim that you wrote the original software. If you use this software | ||
15 | in a product, an acknowledgment in the product documentation would be | ||
16 | appreciated but is not required. | ||
17 | 2. Altered source versions must be plainly marked as such, and must not be | ||
18 | misrepresented as being the original software. | ||
19 | 3. This notice may not be removed or altered from any source distribution. | ||
20 | */ | ||
21 | |||
22 | /** | ||
23 | * \file SDL_test_fuzzer.h | ||
24 | * | ||
25 | * Include file for SDL test framework. | ||
26 | * | ||
27 | * This code is a part of the SDL2_test library, not the main SDL library. | ||
28 | */ | ||
29 | |||
30 | /* | ||
31 | |||
32 | Data generators for fuzzing test data in a reproducible way. | ||
33 | |||
34 | */ | ||
35 | |||
36 | #ifndef SDL_test_fuzzer_h_ | ||
37 | #define SDL_test_fuzzer_h_ | ||
38 | |||
39 | #include "begin_code.h" | ||
40 | /* Set up for C function definitions, even when using C++ */ | ||
41 | #ifdef __cplusplus | ||
42 | extern "C" { | ||
43 | #endif | ||
44 | |||
45 | |||
46 | /* | ||
47 | Based on GSOC code by Markus Kauppila <markus.kauppila@gmail.com> | ||
48 | */ | ||
49 | |||
50 | |||
51 | /** | ||
52 | * \file | ||
53 | * Note: The fuzzer implementation uses a static instance of random context | ||
54 | * internally which makes it thread-UNsafe. | ||
55 | */ | ||
56 | |||
57 | /** | ||
58 | * Initializes the fuzzer for a test | ||
59 | * | ||
60 | * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. | ||
61 | * | ||
62 | */ | ||
63 | void SDLTest_FuzzerInit(Uint64 execKey); | ||
64 | |||
65 | |||
66 | /** | ||
67 | * Returns a random Uint8 | ||
68 | * | ||
69 | * \returns a generated integer | ||
70 | */ | ||
71 | Uint8 SDLTest_RandomUint8(void); | ||
72 | |||
73 | /** | ||
74 | * Returns a random Sint8 | ||
75 | * | ||
76 | * \returns a generated signed integer | ||
77 | */ | ||
78 | Sint8 SDLTest_RandomSint8(void); | ||
79 | |||
80 | |||
81 | /** | ||
82 | * Returns a random Uint16 | ||
83 | * | ||
84 | * \returns a generated integer | ||
85 | */ | ||
86 | Uint16 SDLTest_RandomUint16(void); | ||
87 | |||
88 | /** | ||
89 | * Returns a random Sint16 | ||
90 | * | ||
91 | * \returns a generated signed integer | ||
92 | */ | ||
93 | Sint16 SDLTest_RandomSint16(void); | ||
94 | |||
95 | |||
96 | /** | ||
97 | * Returns a random integer | ||
98 | * | ||
99 | * \returns a generated integer | ||
100 | */ | ||
101 | Sint32 SDLTest_RandomSint32(void); | ||
102 | |||
103 | |||
104 | /** | ||
105 | * Returns a random positive integer | ||
106 | * | ||
107 | * \returns a generated integer | ||
108 | */ | ||
109 | Uint32 SDLTest_RandomUint32(void); | ||
110 | |||
111 | /** | ||
112 | * Returns random Uint64. | ||
113 | * | ||
114 | * \returns a generated integer | ||
115 | */ | ||
116 | Uint64 SDLTest_RandomUint64(void); | ||
117 | |||
118 | |||
119 | /** | ||
120 | * Returns random Sint64. | ||
121 | * | ||
122 | * \returns a generated signed integer | ||
123 | */ | ||
124 | Sint64 SDLTest_RandomSint64(void); | ||
125 | |||
126 | /** | ||
127 | * \returns a random float in range [0.0 - 1.0] | ||
128 | */ | ||
129 | float SDLTest_RandomUnitFloat(void); | ||
130 | |||
131 | /** | ||
132 | * \returns a random double in range [0.0 - 1.0] | ||
133 | */ | ||
134 | double SDLTest_RandomUnitDouble(void); | ||
135 | |||
136 | /** | ||
137 | * \returns a random float. | ||
138 | * | ||
139 | */ | ||
140 | float SDLTest_RandomFloat(void); | ||
141 | |||
142 | /** | ||
143 | * \returns a random double. | ||
144 | * | ||
145 | */ | ||
146 | double SDLTest_RandomDouble(void); | ||
147 | |||
148 | /** | ||
149 | * Returns a random boundary value for Uint8 within the given boundaries. | ||
150 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
151 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
152 | * boundaries are also possible. | ||
153 | * If boundary1 > boundary2, the values are swapped | ||
154 | * | ||
155 | * Usage examples: | ||
156 | * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||
157 | * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||
158 | * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||
159 | * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) | ||
160 | * | ||
161 | * \param boundary1 Lower boundary limit | ||
162 | * \param boundary2 Upper boundary limit | ||
163 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
164 | * | ||
165 | * \returns a random boundary value for the given range and domain or 0 with error set | ||
166 | */ | ||
167 | Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); | ||
168 | |||
169 | /** | ||
170 | * Returns a random boundary value for Uint16 within the given boundaries. | ||
171 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
172 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
173 | * boundaries are also possible. | ||
174 | * If boundary1 > boundary2, the values are swapped | ||
175 | * | ||
176 | * Usage examples: | ||
177 | * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||
178 | * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||
179 | * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||
180 | * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) | ||
181 | * | ||
182 | * \param boundary1 Lower boundary limit | ||
183 | * \param boundary2 Upper boundary limit | ||
184 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
185 | * | ||
186 | * \returns a random boundary value for the given range and domain or 0 with error set | ||
187 | */ | ||
188 | Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); | ||
189 | |||
190 | /** | ||
191 | * Returns a random boundary value for Uint32 within the given boundaries. | ||
192 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
193 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
194 | * boundaries are also possible. | ||
195 | * If boundary1 > boundary2, the values are swapped | ||
196 | * | ||
197 | * Usage examples: | ||
198 | * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||
199 | * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||
200 | * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||
201 | * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) | ||
202 | * | ||
203 | * \param boundary1 Lower boundary limit | ||
204 | * \param boundary2 Upper boundary limit | ||
205 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
206 | * | ||
207 | * \returns a random boundary value for the given range and domain or 0 with error set | ||
208 | */ | ||
209 | Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); | ||
210 | |||
211 | /** | ||
212 | * Returns a random boundary value for Uint64 within the given boundaries. | ||
213 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
214 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
215 | * boundaries are also possible. | ||
216 | * If boundary1 > boundary2, the values are swapped | ||
217 | * | ||
218 | * Usage examples: | ||
219 | * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 | ||
220 | * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 | ||
221 | * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 | ||
222 | * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) | ||
223 | * | ||
224 | * \param boundary1 Lower boundary limit | ||
225 | * \param boundary2 Upper boundary limit | ||
226 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
227 | * | ||
228 | * \returns a random boundary value for the given range and domain or 0 with error set | ||
229 | */ | ||
230 | Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); | ||
231 | |||
232 | /** | ||
233 | * Returns a random boundary value for Sint8 within the given boundaries. | ||
234 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
235 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
236 | * boundaries are also possible. | ||
237 | * If boundary1 > boundary2, the values are swapped | ||
238 | * | ||
239 | * Usage examples: | ||
240 | * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||
241 | * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||
242 | * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 | ||
243 | * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set | ||
244 | * | ||
245 | * \param boundary1 Lower boundary limit | ||
246 | * \param boundary2 Upper boundary limit | ||
247 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
248 | * | ||
249 | * \returns a random boundary value for the given range and domain or SINT8_MIN with error set | ||
250 | */ | ||
251 | Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); | ||
252 | |||
253 | |||
254 | /** | ||
255 | * Returns a random boundary value for Sint16 within the given boundaries. | ||
256 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
257 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
258 | * boundaries are also possible. | ||
259 | * If boundary1 > boundary2, the values are swapped | ||
260 | * | ||
261 | * Usage examples: | ||
262 | * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||
263 | * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||
264 | * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 | ||
265 | * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set | ||
266 | * | ||
267 | * \param boundary1 Lower boundary limit | ||
268 | * \param boundary2 Upper boundary limit | ||
269 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
270 | * | ||
271 | * \returns a random boundary value for the given range and domain or SINT16_MIN with error set | ||
272 | */ | ||
273 | Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); | ||
274 | |||
275 | /** | ||
276 | * Returns a random boundary value for Sint32 within the given boundaries. | ||
277 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
278 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
279 | * boundaries are also possible. | ||
280 | * If boundary1 > boundary2, the values are swapped | ||
281 | * | ||
282 | * Usage examples: | ||
283 | * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||
284 | * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||
285 | * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 | ||
286 | * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) | ||
287 | * | ||
288 | * \param boundary1 Lower boundary limit | ||
289 | * \param boundary2 Upper boundary limit | ||
290 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
291 | * | ||
292 | * \returns a random boundary value for the given range and domain or SINT32_MIN with error set | ||
293 | */ | ||
294 | Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); | ||
295 | |||
296 | /** | ||
297 | * Returns a random boundary value for Sint64 within the given boundaries. | ||
298 | * Boundaries are inclusive, see the usage examples below. If validDomain | ||
299 | * is true, the function will only return valid boundaries, otherwise non-valid | ||
300 | * boundaries are also possible. | ||
301 | * If boundary1 > boundary2, the values are swapped | ||
302 | * | ||
303 | * Usage examples: | ||
304 | * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 | ||
305 | * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 | ||
306 | * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 | ||
307 | * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set | ||
308 | * | ||
309 | * \param boundary1 Lower boundary limit | ||
310 | * \param boundary2 Upper boundary limit | ||
311 | * \param validDomain Should the generated boundary be valid (=within the bounds) or not? | ||
312 | * | ||
313 | * \returns a random boundary value for the given range and domain or SINT64_MIN with error set | ||
314 | */ | ||
315 | Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); | ||
316 | |||
317 | |||
318 | /** | ||
319 | * Returns integer in range [min, max] (inclusive). | ||
320 | * Min and max values can be negative values. | ||
321 | * If Max in smaller than min, then the values are swapped. | ||
322 | * Min and max are the same value, that value will be returned. | ||
323 | * | ||
324 | * \param min Minimum inclusive value of returned random number | ||
325 | * \param max Maximum inclusive value of returned random number | ||
326 | * | ||
327 | * \returns a generated random integer in range | ||
328 | */ | ||
329 | Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); | ||
330 | |||
331 | |||
332 | /** | ||
333 | * Generates random null-terminated string. The minimum length for | ||
334 | * the string is 1 character, maximum length for the string is 255 | ||
335 | * characters and it can contain ASCII characters from 32 to 126. | ||
336 | * | ||
337 | * Note: Returned string needs to be deallocated. | ||
338 | * | ||
339 | * \returns a newly allocated random string; or NULL if length was invalid or string could not be allocated. | ||
340 | */ | ||
341 | char * SDLTest_RandomAsciiString(void); | ||
342 | |||
343 | |||
344 | /** | ||
345 | * Generates random null-terminated string. The maximum length for | ||
346 | * the string is defined by the maxLength parameter. | ||
347 | * String can contain ASCII characters from 32 to 126. | ||
348 | * | ||
349 | * Note: Returned string needs to be deallocated. | ||
350 | * | ||
351 | * \param maxLength The maximum length of the generated string. | ||
352 | * | ||
353 | * \returns a newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. | ||
354 | */ | ||
355 | char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); | ||
356 | |||
357 | |||
358 | /** | ||
359 | * Generates random null-terminated string. The length for | ||
360 | * the string is defined by the size parameter. | ||
361 | * String can contain ASCII characters from 32 to 126. | ||
362 | * | ||
363 | * Note: Returned string needs to be deallocated. | ||
364 | * | ||
365 | * \param size The length of the generated string | ||
366 | * | ||
367 | * \returns a newly allocated random string; or NULL if size was invalid or string could not be allocated. | ||
368 | */ | ||
369 | char * SDLTest_RandomAsciiStringOfSize(int size); | ||
370 | |||
371 | /** | ||
372 | * Get the invocation count for the fuzzer since last ...FuzzerInit. | ||
373 | * | ||
374 | * \returns the invocation count. | ||
375 | */ | ||
376 | int SDLTest_GetFuzzerInvocationCount(void); | ||
377 | |||
378 | /* Ends C function definitions when using C++ */ | ||
379 | #ifdef __cplusplus | ||
380 | } | ||
381 | #endif | ||
382 | #include "close_code.h" | ||
383 | |||
384 | #endif /* SDL_test_fuzzer_h_ */ | ||
385 | |||
386 | /* vi: set ts=4 sw=4 expandtab: */ | ||