6 Copyright (c) 2010 Michael Long
8 Permission is hereby granted, free of charge, to any person obtaining a copy
9 of this software and associated documentation files (the "Software"), to deal
10 in the Software without restriction, including without limitation the rights
11 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 copies of the Software, and to permit persons to whom the Software is
13 furnished to do so, subject to the following conditions:
15 The above copyright notice and this permission notice shall be included in all
16 copies or substantial portions of the Software.
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 #ifndef FAKE_FUNCTIONS
27 #define FAKE_FUNCTIONS
30 #include <string.h> /* For memset and memcpy */
32 #define FFF_MAX_ARGS (20u)
33 #ifndef FFF_ARG_HISTORY_LEN
34 #define FFF_ARG_HISTORY_LEN (50u)
36 #ifndef FFF_CALL_HISTORY_LEN
37 #define FFF_CALL_HISTORY_LEN (50u)
39 /* -- INTERNAL HELPER MACROS -- */
40 #define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
41 FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \
42 FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;
43 #define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
44 FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \
45 FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;
47 /* Defining a function to reset a fake function */
48 #define RESET_FAKE(FUNCNAME) { \
53 #define DECLARE_ARG(type, n, FUNCNAME) \
55 type arg##n##_history[FFF_ARG_HISTORY_LEN];
57 #define DECLARE_ALL_FUNC_COMMON \
58 unsigned int call_count; \
59 unsigned int arg_history_len; \
60 unsigned int arg_histories_dropped; \
62 #define DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
63 RETURN_TYPE return_val_history[FFF_ARG_HISTORY_LEN];
65 #define SAVE_ARG(FUNCNAME, n) \
66 memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));
68 #define ROOM_FOR_MORE_HISTORY(FUNCNAME) \
69 FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
71 #define SAVE_RET_HISTORY(FUNCNAME, RETVAL) \
72 if ((FUNCNAME##_fake.call_count - 1) < FFF_ARG_HISTORY_LEN) \
73 memcpy((void *)&FUNCNAME##_fake.return_val_history[FUNCNAME##_fake.call_count - 1], (const void *) &RETVAL, sizeof(RETVAL)); \
75 #define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \
76 memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));
78 #define HISTORY_DROPPED(FUNCNAME) \
79 FUNCNAME##_fake.arg_histories_dropped++
81 #define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
82 RETURN_TYPE return_val; \
83 int return_val_seq_len; \
84 int return_val_seq_idx; \
85 RETURN_TYPE * return_val_seq; \
87 #define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
88 int custom_fake_seq_len; \
89 int custom_fake_seq_idx; \
91 #define INCREMENT_CALL_COUNT(FUNCNAME) \
92 FUNCNAME##_fake.call_count++
94 #define RETURN_FAKE_RESULT(FUNCNAME) \
95 if (FUNCNAME##_fake.return_val_seq_len){ /* then its a sequence */ \
96 if (FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) { \
97 SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx]) \
98 return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx++]; \
100 SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]) \
101 return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]; /* return last element */ \
103 SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val) \
104 return FUNCNAME##_fake.return_val; \
107 #define FFF_EXTERN_C extern "C"{
108 #define FFF_END_EXTERN_C }
111 #define FFF_END_EXTERN_C
112 #endif /* cpp/ansi c */
114 #define DEFINE_RESET_FUNCTION(FUNCNAME) \
115 void FUNCNAME##_reset(void){ \
116 memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \
117 FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN; \
119 /* -- END INTERNAL HELPER MACROS -- */
121 typedef void (*fff_function_t)(void);
123 fff_function_t call_history[FFF_CALL_HISTORY_LEN];
124 unsigned int call_history_idx;
128 extern fff_globals_t fff;
131 #define DEFINE_FFF_GLOBALS \
136 #define FFF_RESET_HISTORY() \
137 fff.call_history_idx = 0; \
138 memset(fff.call_history, 0, sizeof(fff.call_history));
140 #define REGISTER_CALL(function) \
141 if (fff.call_history_idx < FFF_CALL_HISTORY_LEN) \
142 fff.call_history[fff.call_history_idx++] = (fff_function_t)function;
144 #define DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
145 typedef struct FUNCNAME##_Fake { \
146 DECLARE_ALL_FUNC_COMMON \
147 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
148 void(*custom_fake)(void); \
149 void(**custom_fake_seq)(void); \
151 extern FUNCNAME##_Fake FUNCNAME##_fake; \
152 void FUNCNAME##_reset(void); \
153 void FUNCNAME(void); \
155 #define DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
156 FUNCNAME##_Fake FUNCNAME##_fake; \
157 void FUNCNAME(void){ \
158 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
161 HISTORY_DROPPED(FUNCNAME); \
163 INCREMENT_CALL_COUNT(FUNCNAME); \
164 REGISTER_CALL(FUNCNAME); \
165 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
166 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
167 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
170 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
173 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(); \
175 DEFINE_RESET_FUNCTION(FUNCNAME) \
177 #define FAKE_VOID_FUNC0(FUNCNAME) \
178 DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
179 DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
182 #define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
183 typedef struct FUNCNAME##_Fake { \
184 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
185 DECLARE_ALL_FUNC_COMMON \
186 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
187 void(*custom_fake)(ARG0_TYPE arg0); \
188 void(**custom_fake_seq)(ARG0_TYPE arg0); \
190 extern FUNCNAME##_Fake FUNCNAME##_fake; \
191 void FUNCNAME##_reset(void); \
192 void FUNCNAME(ARG0_TYPE arg0); \
194 #define DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
195 FUNCNAME##_Fake FUNCNAME##_fake; \
196 void FUNCNAME(ARG0_TYPE arg0){ \
197 SAVE_ARG(FUNCNAME, 0); \
198 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
199 SAVE_ARG_HISTORY(FUNCNAME, 0); \
202 HISTORY_DROPPED(FUNCNAME); \
204 INCREMENT_CALL_COUNT(FUNCNAME); \
205 REGISTER_CALL(FUNCNAME); \
206 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
207 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
208 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
211 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
214 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0); \
216 DEFINE_RESET_FUNCTION(FUNCNAME) \
218 #define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
219 DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
220 DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
223 #define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
224 typedef struct FUNCNAME##_Fake { \
225 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
226 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
227 DECLARE_ALL_FUNC_COMMON \
228 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
229 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
230 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
232 extern FUNCNAME##_Fake FUNCNAME##_fake; \
233 void FUNCNAME##_reset(void); \
234 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
236 #define DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
237 FUNCNAME##_Fake FUNCNAME##_fake; \
238 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
239 SAVE_ARG(FUNCNAME, 0); \
240 SAVE_ARG(FUNCNAME, 1); \
241 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
242 SAVE_ARG_HISTORY(FUNCNAME, 0); \
243 SAVE_ARG_HISTORY(FUNCNAME, 1); \
246 HISTORY_DROPPED(FUNCNAME); \
248 INCREMENT_CALL_COUNT(FUNCNAME); \
249 REGISTER_CALL(FUNCNAME); \
250 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
251 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
252 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
255 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
258 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1); \
260 DEFINE_RESET_FUNCTION(FUNCNAME) \
262 #define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
263 DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
264 DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
267 #define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
268 typedef struct FUNCNAME##_Fake { \
269 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
270 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
271 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
272 DECLARE_ALL_FUNC_COMMON \
273 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
274 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
275 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
277 extern FUNCNAME##_Fake FUNCNAME##_fake; \
278 void FUNCNAME##_reset(void); \
279 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
281 #define DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
282 FUNCNAME##_Fake FUNCNAME##_fake; \
283 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
284 SAVE_ARG(FUNCNAME, 0); \
285 SAVE_ARG(FUNCNAME, 1); \
286 SAVE_ARG(FUNCNAME, 2); \
287 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
288 SAVE_ARG_HISTORY(FUNCNAME, 0); \
289 SAVE_ARG_HISTORY(FUNCNAME, 1); \
290 SAVE_ARG_HISTORY(FUNCNAME, 2); \
293 HISTORY_DROPPED(FUNCNAME); \
295 INCREMENT_CALL_COUNT(FUNCNAME); \
296 REGISTER_CALL(FUNCNAME); \
297 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
298 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
299 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
302 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
305 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
307 DEFINE_RESET_FUNCTION(FUNCNAME) \
309 #define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
310 DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
311 DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
314 #define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
315 typedef struct FUNCNAME##_Fake { \
316 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
317 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
318 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
319 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
320 DECLARE_ALL_FUNC_COMMON \
321 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
322 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
323 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
325 extern FUNCNAME##_Fake FUNCNAME##_fake; \
326 void FUNCNAME##_reset(void); \
327 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
329 #define DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
330 FUNCNAME##_Fake FUNCNAME##_fake; \
331 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
332 SAVE_ARG(FUNCNAME, 0); \
333 SAVE_ARG(FUNCNAME, 1); \
334 SAVE_ARG(FUNCNAME, 2); \
335 SAVE_ARG(FUNCNAME, 3); \
336 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
337 SAVE_ARG_HISTORY(FUNCNAME, 0); \
338 SAVE_ARG_HISTORY(FUNCNAME, 1); \
339 SAVE_ARG_HISTORY(FUNCNAME, 2); \
340 SAVE_ARG_HISTORY(FUNCNAME, 3); \
343 HISTORY_DROPPED(FUNCNAME); \
345 INCREMENT_CALL_COUNT(FUNCNAME); \
346 REGISTER_CALL(FUNCNAME); \
347 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
348 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
349 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
352 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
355 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
357 DEFINE_RESET_FUNCTION(FUNCNAME) \
359 #define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
360 DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
361 DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
364 #define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
365 typedef struct FUNCNAME##_Fake { \
366 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
367 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
368 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
369 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
370 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
371 DECLARE_ALL_FUNC_COMMON \
372 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
373 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
374 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
376 extern FUNCNAME##_Fake FUNCNAME##_fake; \
377 void FUNCNAME##_reset(void); \
378 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
380 #define DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
381 FUNCNAME##_Fake FUNCNAME##_fake; \
382 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
383 SAVE_ARG(FUNCNAME, 0); \
384 SAVE_ARG(FUNCNAME, 1); \
385 SAVE_ARG(FUNCNAME, 2); \
386 SAVE_ARG(FUNCNAME, 3); \
387 SAVE_ARG(FUNCNAME, 4); \
388 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
389 SAVE_ARG_HISTORY(FUNCNAME, 0); \
390 SAVE_ARG_HISTORY(FUNCNAME, 1); \
391 SAVE_ARG_HISTORY(FUNCNAME, 2); \
392 SAVE_ARG_HISTORY(FUNCNAME, 3); \
393 SAVE_ARG_HISTORY(FUNCNAME, 4); \
396 HISTORY_DROPPED(FUNCNAME); \
398 INCREMENT_CALL_COUNT(FUNCNAME); \
399 REGISTER_CALL(FUNCNAME); \
400 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
401 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
402 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
405 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
408 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
410 DEFINE_RESET_FUNCTION(FUNCNAME) \
412 #define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
413 DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
414 DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
417 #define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
418 typedef struct FUNCNAME##_Fake { \
419 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
420 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
421 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
422 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
423 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
424 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
425 DECLARE_ALL_FUNC_COMMON \
426 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
427 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
428 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
430 extern FUNCNAME##_Fake FUNCNAME##_fake; \
431 void FUNCNAME##_reset(void); \
432 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
434 #define DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
435 FUNCNAME##_Fake FUNCNAME##_fake; \
436 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
437 SAVE_ARG(FUNCNAME, 0); \
438 SAVE_ARG(FUNCNAME, 1); \
439 SAVE_ARG(FUNCNAME, 2); \
440 SAVE_ARG(FUNCNAME, 3); \
441 SAVE_ARG(FUNCNAME, 4); \
442 SAVE_ARG(FUNCNAME, 5); \
443 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
444 SAVE_ARG_HISTORY(FUNCNAME, 0); \
445 SAVE_ARG_HISTORY(FUNCNAME, 1); \
446 SAVE_ARG_HISTORY(FUNCNAME, 2); \
447 SAVE_ARG_HISTORY(FUNCNAME, 3); \
448 SAVE_ARG_HISTORY(FUNCNAME, 4); \
449 SAVE_ARG_HISTORY(FUNCNAME, 5); \
452 HISTORY_DROPPED(FUNCNAME); \
454 INCREMENT_CALL_COUNT(FUNCNAME); \
455 REGISTER_CALL(FUNCNAME); \
456 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
457 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
458 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
461 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
464 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
466 DEFINE_RESET_FUNCTION(FUNCNAME) \
468 #define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
469 DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
470 DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
473 #define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
474 typedef struct FUNCNAME##_Fake { \
475 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
476 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
477 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
478 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
479 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
480 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
481 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
482 DECLARE_ALL_FUNC_COMMON \
483 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
484 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
485 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
487 extern FUNCNAME##_Fake FUNCNAME##_fake; \
488 void FUNCNAME##_reset(void); \
489 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
491 #define DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
492 FUNCNAME##_Fake FUNCNAME##_fake; \
493 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
494 SAVE_ARG(FUNCNAME, 0); \
495 SAVE_ARG(FUNCNAME, 1); \
496 SAVE_ARG(FUNCNAME, 2); \
497 SAVE_ARG(FUNCNAME, 3); \
498 SAVE_ARG(FUNCNAME, 4); \
499 SAVE_ARG(FUNCNAME, 5); \
500 SAVE_ARG(FUNCNAME, 6); \
501 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
502 SAVE_ARG_HISTORY(FUNCNAME, 0); \
503 SAVE_ARG_HISTORY(FUNCNAME, 1); \
504 SAVE_ARG_HISTORY(FUNCNAME, 2); \
505 SAVE_ARG_HISTORY(FUNCNAME, 3); \
506 SAVE_ARG_HISTORY(FUNCNAME, 4); \
507 SAVE_ARG_HISTORY(FUNCNAME, 5); \
508 SAVE_ARG_HISTORY(FUNCNAME, 6); \
511 HISTORY_DROPPED(FUNCNAME); \
513 INCREMENT_CALL_COUNT(FUNCNAME); \
514 REGISTER_CALL(FUNCNAME); \
515 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
516 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
517 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
520 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
523 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
525 DEFINE_RESET_FUNCTION(FUNCNAME) \
527 #define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
528 DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
529 DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
532 #define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
533 typedef struct FUNCNAME##_Fake { \
534 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
535 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
536 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
537 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
538 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
539 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
540 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
541 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
542 DECLARE_ALL_FUNC_COMMON \
543 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
544 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
545 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
547 extern FUNCNAME##_Fake FUNCNAME##_fake; \
548 void FUNCNAME##_reset(void); \
549 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
551 #define DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
552 FUNCNAME##_Fake FUNCNAME##_fake; \
553 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
554 SAVE_ARG(FUNCNAME, 0); \
555 SAVE_ARG(FUNCNAME, 1); \
556 SAVE_ARG(FUNCNAME, 2); \
557 SAVE_ARG(FUNCNAME, 3); \
558 SAVE_ARG(FUNCNAME, 4); \
559 SAVE_ARG(FUNCNAME, 5); \
560 SAVE_ARG(FUNCNAME, 6); \
561 SAVE_ARG(FUNCNAME, 7); \
562 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
563 SAVE_ARG_HISTORY(FUNCNAME, 0); \
564 SAVE_ARG_HISTORY(FUNCNAME, 1); \
565 SAVE_ARG_HISTORY(FUNCNAME, 2); \
566 SAVE_ARG_HISTORY(FUNCNAME, 3); \
567 SAVE_ARG_HISTORY(FUNCNAME, 4); \
568 SAVE_ARG_HISTORY(FUNCNAME, 5); \
569 SAVE_ARG_HISTORY(FUNCNAME, 6); \
570 SAVE_ARG_HISTORY(FUNCNAME, 7); \
573 HISTORY_DROPPED(FUNCNAME); \
575 INCREMENT_CALL_COUNT(FUNCNAME); \
576 REGISTER_CALL(FUNCNAME); \
577 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
578 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
579 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
582 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
585 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
587 DEFINE_RESET_FUNCTION(FUNCNAME) \
589 #define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
590 DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
591 DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
594 #define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
595 typedef struct FUNCNAME##_Fake { \
596 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
597 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
598 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
599 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
600 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
601 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
602 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
603 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
604 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
605 DECLARE_ALL_FUNC_COMMON \
606 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
607 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
608 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
610 extern FUNCNAME##_Fake FUNCNAME##_fake; \
611 void FUNCNAME##_reset(void); \
612 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
614 #define DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
615 FUNCNAME##_Fake FUNCNAME##_fake; \
616 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
617 SAVE_ARG(FUNCNAME, 0); \
618 SAVE_ARG(FUNCNAME, 1); \
619 SAVE_ARG(FUNCNAME, 2); \
620 SAVE_ARG(FUNCNAME, 3); \
621 SAVE_ARG(FUNCNAME, 4); \
622 SAVE_ARG(FUNCNAME, 5); \
623 SAVE_ARG(FUNCNAME, 6); \
624 SAVE_ARG(FUNCNAME, 7); \
625 SAVE_ARG(FUNCNAME, 8); \
626 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
627 SAVE_ARG_HISTORY(FUNCNAME, 0); \
628 SAVE_ARG_HISTORY(FUNCNAME, 1); \
629 SAVE_ARG_HISTORY(FUNCNAME, 2); \
630 SAVE_ARG_HISTORY(FUNCNAME, 3); \
631 SAVE_ARG_HISTORY(FUNCNAME, 4); \
632 SAVE_ARG_HISTORY(FUNCNAME, 5); \
633 SAVE_ARG_HISTORY(FUNCNAME, 6); \
634 SAVE_ARG_HISTORY(FUNCNAME, 7); \
635 SAVE_ARG_HISTORY(FUNCNAME, 8); \
638 HISTORY_DROPPED(FUNCNAME); \
640 INCREMENT_CALL_COUNT(FUNCNAME); \
641 REGISTER_CALL(FUNCNAME); \
642 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
643 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
644 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
647 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
650 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
652 DEFINE_RESET_FUNCTION(FUNCNAME) \
654 #define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
655 DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
656 DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
659 #define DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
660 typedef struct FUNCNAME##_Fake { \
661 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
662 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
663 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
664 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
665 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
666 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
667 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
668 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
669 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
670 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
671 DECLARE_ALL_FUNC_COMMON \
672 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
673 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
674 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
676 extern FUNCNAME##_Fake FUNCNAME##_fake; \
677 void FUNCNAME##_reset(void); \
678 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
680 #define DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
681 FUNCNAME##_Fake FUNCNAME##_fake; \
682 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
683 SAVE_ARG(FUNCNAME, 0); \
684 SAVE_ARG(FUNCNAME, 1); \
685 SAVE_ARG(FUNCNAME, 2); \
686 SAVE_ARG(FUNCNAME, 3); \
687 SAVE_ARG(FUNCNAME, 4); \
688 SAVE_ARG(FUNCNAME, 5); \
689 SAVE_ARG(FUNCNAME, 6); \
690 SAVE_ARG(FUNCNAME, 7); \
691 SAVE_ARG(FUNCNAME, 8); \
692 SAVE_ARG(FUNCNAME, 9); \
693 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
694 SAVE_ARG_HISTORY(FUNCNAME, 0); \
695 SAVE_ARG_HISTORY(FUNCNAME, 1); \
696 SAVE_ARG_HISTORY(FUNCNAME, 2); \
697 SAVE_ARG_HISTORY(FUNCNAME, 3); \
698 SAVE_ARG_HISTORY(FUNCNAME, 4); \
699 SAVE_ARG_HISTORY(FUNCNAME, 5); \
700 SAVE_ARG_HISTORY(FUNCNAME, 6); \
701 SAVE_ARG_HISTORY(FUNCNAME, 7); \
702 SAVE_ARG_HISTORY(FUNCNAME, 8); \
703 SAVE_ARG_HISTORY(FUNCNAME, 9); \
706 HISTORY_DROPPED(FUNCNAME); \
708 INCREMENT_CALL_COUNT(FUNCNAME); \
709 REGISTER_CALL(FUNCNAME); \
710 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
711 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
712 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
715 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
718 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
720 DEFINE_RESET_FUNCTION(FUNCNAME) \
722 #define FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
723 DECLARE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
724 DEFINE_FAKE_VOID_FUNC10(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
727 #define DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
728 typedef struct FUNCNAME##_Fake { \
729 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
730 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
731 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
732 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
733 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
734 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
735 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
736 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
737 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
738 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
739 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
740 DECLARE_ALL_FUNC_COMMON \
741 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
742 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
743 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
745 extern FUNCNAME##_Fake FUNCNAME##_fake; \
746 void FUNCNAME##_reset(void); \
747 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
749 #define DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
750 FUNCNAME##_Fake FUNCNAME##_fake; \
751 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
752 SAVE_ARG(FUNCNAME, 0); \
753 SAVE_ARG(FUNCNAME, 1); \
754 SAVE_ARG(FUNCNAME, 2); \
755 SAVE_ARG(FUNCNAME, 3); \
756 SAVE_ARG(FUNCNAME, 4); \
757 SAVE_ARG(FUNCNAME, 5); \
758 SAVE_ARG(FUNCNAME, 6); \
759 SAVE_ARG(FUNCNAME, 7); \
760 SAVE_ARG(FUNCNAME, 8); \
761 SAVE_ARG(FUNCNAME, 9); \
762 SAVE_ARG(FUNCNAME, 10); \
763 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
764 SAVE_ARG_HISTORY(FUNCNAME, 0); \
765 SAVE_ARG_HISTORY(FUNCNAME, 1); \
766 SAVE_ARG_HISTORY(FUNCNAME, 2); \
767 SAVE_ARG_HISTORY(FUNCNAME, 3); \
768 SAVE_ARG_HISTORY(FUNCNAME, 4); \
769 SAVE_ARG_HISTORY(FUNCNAME, 5); \
770 SAVE_ARG_HISTORY(FUNCNAME, 6); \
771 SAVE_ARG_HISTORY(FUNCNAME, 7); \
772 SAVE_ARG_HISTORY(FUNCNAME, 8); \
773 SAVE_ARG_HISTORY(FUNCNAME, 9); \
774 SAVE_ARG_HISTORY(FUNCNAME, 10); \
777 HISTORY_DROPPED(FUNCNAME); \
779 INCREMENT_CALL_COUNT(FUNCNAME); \
780 REGISTER_CALL(FUNCNAME); \
781 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
782 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
783 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
786 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
789 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
791 DEFINE_RESET_FUNCTION(FUNCNAME) \
793 #define FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
794 DECLARE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
795 DEFINE_FAKE_VOID_FUNC11(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
798 #define DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
799 typedef struct FUNCNAME##_Fake { \
800 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
801 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
802 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
803 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
804 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
805 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
806 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
807 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
808 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
809 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
810 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
811 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
812 DECLARE_ALL_FUNC_COMMON \
813 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
814 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
815 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
817 extern FUNCNAME##_Fake FUNCNAME##_fake; \
818 void FUNCNAME##_reset(void); \
819 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
821 #define DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
822 FUNCNAME##_Fake FUNCNAME##_fake; \
823 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
824 SAVE_ARG(FUNCNAME, 0); \
825 SAVE_ARG(FUNCNAME, 1); \
826 SAVE_ARG(FUNCNAME, 2); \
827 SAVE_ARG(FUNCNAME, 3); \
828 SAVE_ARG(FUNCNAME, 4); \
829 SAVE_ARG(FUNCNAME, 5); \
830 SAVE_ARG(FUNCNAME, 6); \
831 SAVE_ARG(FUNCNAME, 7); \
832 SAVE_ARG(FUNCNAME, 8); \
833 SAVE_ARG(FUNCNAME, 9); \
834 SAVE_ARG(FUNCNAME, 10); \
835 SAVE_ARG(FUNCNAME, 11); \
836 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
837 SAVE_ARG_HISTORY(FUNCNAME, 0); \
838 SAVE_ARG_HISTORY(FUNCNAME, 1); \
839 SAVE_ARG_HISTORY(FUNCNAME, 2); \
840 SAVE_ARG_HISTORY(FUNCNAME, 3); \
841 SAVE_ARG_HISTORY(FUNCNAME, 4); \
842 SAVE_ARG_HISTORY(FUNCNAME, 5); \
843 SAVE_ARG_HISTORY(FUNCNAME, 6); \
844 SAVE_ARG_HISTORY(FUNCNAME, 7); \
845 SAVE_ARG_HISTORY(FUNCNAME, 8); \
846 SAVE_ARG_HISTORY(FUNCNAME, 9); \
847 SAVE_ARG_HISTORY(FUNCNAME, 10); \
848 SAVE_ARG_HISTORY(FUNCNAME, 11); \
851 HISTORY_DROPPED(FUNCNAME); \
853 INCREMENT_CALL_COUNT(FUNCNAME); \
854 REGISTER_CALL(FUNCNAME); \
855 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
856 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
857 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
860 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
863 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
865 DEFINE_RESET_FUNCTION(FUNCNAME) \
867 #define FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
868 DECLARE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
869 DEFINE_FAKE_VOID_FUNC12(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
872 #define DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
873 typedef struct FUNCNAME##_Fake { \
874 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
875 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
876 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
877 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
878 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
879 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
880 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
881 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
882 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
883 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
884 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
885 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
886 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
887 DECLARE_ALL_FUNC_COMMON \
888 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
889 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
890 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
892 extern FUNCNAME##_Fake FUNCNAME##_fake; \
893 void FUNCNAME##_reset(void); \
894 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
896 #define DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
897 FUNCNAME##_Fake FUNCNAME##_fake; \
898 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
899 SAVE_ARG(FUNCNAME, 0); \
900 SAVE_ARG(FUNCNAME, 1); \
901 SAVE_ARG(FUNCNAME, 2); \
902 SAVE_ARG(FUNCNAME, 3); \
903 SAVE_ARG(FUNCNAME, 4); \
904 SAVE_ARG(FUNCNAME, 5); \
905 SAVE_ARG(FUNCNAME, 6); \
906 SAVE_ARG(FUNCNAME, 7); \
907 SAVE_ARG(FUNCNAME, 8); \
908 SAVE_ARG(FUNCNAME, 9); \
909 SAVE_ARG(FUNCNAME, 10); \
910 SAVE_ARG(FUNCNAME, 11); \
911 SAVE_ARG(FUNCNAME, 12); \
912 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
913 SAVE_ARG_HISTORY(FUNCNAME, 0); \
914 SAVE_ARG_HISTORY(FUNCNAME, 1); \
915 SAVE_ARG_HISTORY(FUNCNAME, 2); \
916 SAVE_ARG_HISTORY(FUNCNAME, 3); \
917 SAVE_ARG_HISTORY(FUNCNAME, 4); \
918 SAVE_ARG_HISTORY(FUNCNAME, 5); \
919 SAVE_ARG_HISTORY(FUNCNAME, 6); \
920 SAVE_ARG_HISTORY(FUNCNAME, 7); \
921 SAVE_ARG_HISTORY(FUNCNAME, 8); \
922 SAVE_ARG_HISTORY(FUNCNAME, 9); \
923 SAVE_ARG_HISTORY(FUNCNAME, 10); \
924 SAVE_ARG_HISTORY(FUNCNAME, 11); \
925 SAVE_ARG_HISTORY(FUNCNAME, 12); \
928 HISTORY_DROPPED(FUNCNAME); \
930 INCREMENT_CALL_COUNT(FUNCNAME); \
931 REGISTER_CALL(FUNCNAME); \
932 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
933 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
934 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
937 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
940 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
942 DEFINE_RESET_FUNCTION(FUNCNAME) \
944 #define FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
945 DECLARE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
946 DEFINE_FAKE_VOID_FUNC13(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
949 #define DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
950 typedef struct FUNCNAME##_Fake { \
951 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
952 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
953 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
954 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
955 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
956 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
957 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
958 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
959 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
960 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
961 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
962 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
963 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
964 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
965 DECLARE_ALL_FUNC_COMMON \
966 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
967 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
968 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
970 extern FUNCNAME##_Fake FUNCNAME##_fake; \
971 void FUNCNAME##_reset(void); \
972 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
974 #define DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
975 FUNCNAME##_Fake FUNCNAME##_fake; \
976 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
977 SAVE_ARG(FUNCNAME, 0); \
978 SAVE_ARG(FUNCNAME, 1); \
979 SAVE_ARG(FUNCNAME, 2); \
980 SAVE_ARG(FUNCNAME, 3); \
981 SAVE_ARG(FUNCNAME, 4); \
982 SAVE_ARG(FUNCNAME, 5); \
983 SAVE_ARG(FUNCNAME, 6); \
984 SAVE_ARG(FUNCNAME, 7); \
985 SAVE_ARG(FUNCNAME, 8); \
986 SAVE_ARG(FUNCNAME, 9); \
987 SAVE_ARG(FUNCNAME, 10); \
988 SAVE_ARG(FUNCNAME, 11); \
989 SAVE_ARG(FUNCNAME, 12); \
990 SAVE_ARG(FUNCNAME, 13); \
991 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
992 SAVE_ARG_HISTORY(FUNCNAME, 0); \
993 SAVE_ARG_HISTORY(FUNCNAME, 1); \
994 SAVE_ARG_HISTORY(FUNCNAME, 2); \
995 SAVE_ARG_HISTORY(FUNCNAME, 3); \
996 SAVE_ARG_HISTORY(FUNCNAME, 4); \
997 SAVE_ARG_HISTORY(FUNCNAME, 5); \
998 SAVE_ARG_HISTORY(FUNCNAME, 6); \
999 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1000 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1001 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1002 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1003 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1004 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1005 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1008 HISTORY_DROPPED(FUNCNAME); \
1010 INCREMENT_CALL_COUNT(FUNCNAME); \
1011 REGISTER_CALL(FUNCNAME); \
1012 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1013 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1014 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
1017 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
1020 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
1022 DEFINE_RESET_FUNCTION(FUNCNAME) \
1024 #define FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1025 DECLARE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1026 DEFINE_FAKE_VOID_FUNC14(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
1029 #define DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1030 typedef struct FUNCNAME##_Fake { \
1031 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1032 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1033 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1034 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1035 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1036 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1037 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1038 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1039 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1040 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1041 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1042 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1043 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1044 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1045 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1046 DECLARE_ALL_FUNC_COMMON \
1047 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1048 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
1049 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
1050 } FUNCNAME##_Fake; \
1051 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1052 void FUNCNAME##_reset(void); \
1053 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
1055 #define DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1056 FUNCNAME##_Fake FUNCNAME##_fake; \
1057 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
1058 SAVE_ARG(FUNCNAME, 0); \
1059 SAVE_ARG(FUNCNAME, 1); \
1060 SAVE_ARG(FUNCNAME, 2); \
1061 SAVE_ARG(FUNCNAME, 3); \
1062 SAVE_ARG(FUNCNAME, 4); \
1063 SAVE_ARG(FUNCNAME, 5); \
1064 SAVE_ARG(FUNCNAME, 6); \
1065 SAVE_ARG(FUNCNAME, 7); \
1066 SAVE_ARG(FUNCNAME, 8); \
1067 SAVE_ARG(FUNCNAME, 9); \
1068 SAVE_ARG(FUNCNAME, 10); \
1069 SAVE_ARG(FUNCNAME, 11); \
1070 SAVE_ARG(FUNCNAME, 12); \
1071 SAVE_ARG(FUNCNAME, 13); \
1072 SAVE_ARG(FUNCNAME, 14); \
1073 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1074 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1075 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1076 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1077 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1078 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1079 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1080 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1081 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1082 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1083 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1084 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1085 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1086 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1087 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1088 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1091 HISTORY_DROPPED(FUNCNAME); \
1093 INCREMENT_CALL_COUNT(FUNCNAME); \
1094 REGISTER_CALL(FUNCNAME); \
1095 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1096 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1097 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
1100 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
1103 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
1105 DEFINE_RESET_FUNCTION(FUNCNAME) \
1107 #define FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1108 DECLARE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1109 DEFINE_FAKE_VOID_FUNC15(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
1112 #define DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1113 typedef struct FUNCNAME##_Fake { \
1114 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1115 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1116 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1117 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1118 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1119 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1120 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1121 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1122 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1123 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1124 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1125 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1126 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1127 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1128 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1129 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1130 DECLARE_ALL_FUNC_COMMON \
1131 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1132 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
1133 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
1134 } FUNCNAME##_Fake; \
1135 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1136 void FUNCNAME##_reset(void); \
1137 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
1139 #define DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1140 FUNCNAME##_Fake FUNCNAME##_fake; \
1141 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
1142 SAVE_ARG(FUNCNAME, 0); \
1143 SAVE_ARG(FUNCNAME, 1); \
1144 SAVE_ARG(FUNCNAME, 2); \
1145 SAVE_ARG(FUNCNAME, 3); \
1146 SAVE_ARG(FUNCNAME, 4); \
1147 SAVE_ARG(FUNCNAME, 5); \
1148 SAVE_ARG(FUNCNAME, 6); \
1149 SAVE_ARG(FUNCNAME, 7); \
1150 SAVE_ARG(FUNCNAME, 8); \
1151 SAVE_ARG(FUNCNAME, 9); \
1152 SAVE_ARG(FUNCNAME, 10); \
1153 SAVE_ARG(FUNCNAME, 11); \
1154 SAVE_ARG(FUNCNAME, 12); \
1155 SAVE_ARG(FUNCNAME, 13); \
1156 SAVE_ARG(FUNCNAME, 14); \
1157 SAVE_ARG(FUNCNAME, 15); \
1158 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1159 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1160 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1161 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1162 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1163 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1164 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1165 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1166 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1167 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1168 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1169 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1170 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1171 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1172 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1173 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1174 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1177 HISTORY_DROPPED(FUNCNAME); \
1179 INCREMENT_CALL_COUNT(FUNCNAME); \
1180 REGISTER_CALL(FUNCNAME); \
1181 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1182 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1183 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
1186 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
1189 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
1191 DEFINE_RESET_FUNCTION(FUNCNAME) \
1193 #define FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1194 DECLARE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1195 DEFINE_FAKE_VOID_FUNC16(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
1198 #define DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1199 typedef struct FUNCNAME##_Fake { \
1200 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1201 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1202 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1203 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1204 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1205 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1206 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1207 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1208 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1209 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1210 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1211 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1212 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1213 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1214 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1215 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1216 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1217 DECLARE_ALL_FUNC_COMMON \
1218 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1219 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
1220 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
1221 } FUNCNAME##_Fake; \
1222 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1223 void FUNCNAME##_reset(void); \
1224 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
1226 #define DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1227 FUNCNAME##_Fake FUNCNAME##_fake; \
1228 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
1229 SAVE_ARG(FUNCNAME, 0); \
1230 SAVE_ARG(FUNCNAME, 1); \
1231 SAVE_ARG(FUNCNAME, 2); \
1232 SAVE_ARG(FUNCNAME, 3); \
1233 SAVE_ARG(FUNCNAME, 4); \
1234 SAVE_ARG(FUNCNAME, 5); \
1235 SAVE_ARG(FUNCNAME, 6); \
1236 SAVE_ARG(FUNCNAME, 7); \
1237 SAVE_ARG(FUNCNAME, 8); \
1238 SAVE_ARG(FUNCNAME, 9); \
1239 SAVE_ARG(FUNCNAME, 10); \
1240 SAVE_ARG(FUNCNAME, 11); \
1241 SAVE_ARG(FUNCNAME, 12); \
1242 SAVE_ARG(FUNCNAME, 13); \
1243 SAVE_ARG(FUNCNAME, 14); \
1244 SAVE_ARG(FUNCNAME, 15); \
1245 SAVE_ARG(FUNCNAME, 16); \
1246 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1247 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1248 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1249 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1250 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1251 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1252 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1253 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1254 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1255 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1256 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1257 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1258 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1259 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1260 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1261 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1262 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1263 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1266 HISTORY_DROPPED(FUNCNAME); \
1268 INCREMENT_CALL_COUNT(FUNCNAME); \
1269 REGISTER_CALL(FUNCNAME); \
1270 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1271 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1272 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
1275 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
1278 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
1280 DEFINE_RESET_FUNCTION(FUNCNAME) \
1282 #define FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1283 DECLARE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1284 DEFINE_FAKE_VOID_FUNC17(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
1287 #define DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1288 typedef struct FUNCNAME##_Fake { \
1289 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1290 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1291 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1292 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1293 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1294 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1295 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1296 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1297 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1298 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1299 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1300 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1301 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1302 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1303 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1304 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1305 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1306 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
1307 DECLARE_ALL_FUNC_COMMON \
1308 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1309 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
1310 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
1311 } FUNCNAME##_Fake; \
1312 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1313 void FUNCNAME##_reset(void); \
1314 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
1316 #define DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1317 FUNCNAME##_Fake FUNCNAME##_fake; \
1318 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
1319 SAVE_ARG(FUNCNAME, 0); \
1320 SAVE_ARG(FUNCNAME, 1); \
1321 SAVE_ARG(FUNCNAME, 2); \
1322 SAVE_ARG(FUNCNAME, 3); \
1323 SAVE_ARG(FUNCNAME, 4); \
1324 SAVE_ARG(FUNCNAME, 5); \
1325 SAVE_ARG(FUNCNAME, 6); \
1326 SAVE_ARG(FUNCNAME, 7); \
1327 SAVE_ARG(FUNCNAME, 8); \
1328 SAVE_ARG(FUNCNAME, 9); \
1329 SAVE_ARG(FUNCNAME, 10); \
1330 SAVE_ARG(FUNCNAME, 11); \
1331 SAVE_ARG(FUNCNAME, 12); \
1332 SAVE_ARG(FUNCNAME, 13); \
1333 SAVE_ARG(FUNCNAME, 14); \
1334 SAVE_ARG(FUNCNAME, 15); \
1335 SAVE_ARG(FUNCNAME, 16); \
1336 SAVE_ARG(FUNCNAME, 17); \
1337 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1338 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1339 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1340 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1341 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1342 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1343 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1344 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1345 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1346 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1347 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1348 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1349 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1350 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1351 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1352 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1353 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1354 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1355 SAVE_ARG_HISTORY(FUNCNAME, 17); \
1358 HISTORY_DROPPED(FUNCNAME); \
1360 INCREMENT_CALL_COUNT(FUNCNAME); \
1361 REGISTER_CALL(FUNCNAME); \
1362 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1363 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1364 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
1367 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
1370 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
1372 DEFINE_RESET_FUNCTION(FUNCNAME) \
1374 #define FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1375 DECLARE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1376 DEFINE_FAKE_VOID_FUNC18(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
1379 #define DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1380 typedef struct FUNCNAME##_Fake { \
1381 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1382 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1383 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1384 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1385 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1386 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1387 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1388 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1389 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1390 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1391 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1392 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1393 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1394 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1395 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1396 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1397 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1398 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
1399 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
1400 DECLARE_ALL_FUNC_COMMON \
1401 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1402 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
1403 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
1404 } FUNCNAME##_Fake; \
1405 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1406 void FUNCNAME##_reset(void); \
1407 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
1409 #define DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1410 FUNCNAME##_Fake FUNCNAME##_fake; \
1411 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
1412 SAVE_ARG(FUNCNAME, 0); \
1413 SAVE_ARG(FUNCNAME, 1); \
1414 SAVE_ARG(FUNCNAME, 2); \
1415 SAVE_ARG(FUNCNAME, 3); \
1416 SAVE_ARG(FUNCNAME, 4); \
1417 SAVE_ARG(FUNCNAME, 5); \
1418 SAVE_ARG(FUNCNAME, 6); \
1419 SAVE_ARG(FUNCNAME, 7); \
1420 SAVE_ARG(FUNCNAME, 8); \
1421 SAVE_ARG(FUNCNAME, 9); \
1422 SAVE_ARG(FUNCNAME, 10); \
1423 SAVE_ARG(FUNCNAME, 11); \
1424 SAVE_ARG(FUNCNAME, 12); \
1425 SAVE_ARG(FUNCNAME, 13); \
1426 SAVE_ARG(FUNCNAME, 14); \
1427 SAVE_ARG(FUNCNAME, 15); \
1428 SAVE_ARG(FUNCNAME, 16); \
1429 SAVE_ARG(FUNCNAME, 17); \
1430 SAVE_ARG(FUNCNAME, 18); \
1431 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1432 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1433 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1434 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1435 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1436 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1437 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1438 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1439 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1440 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1441 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1442 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1443 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1444 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1445 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1446 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1447 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1448 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1449 SAVE_ARG_HISTORY(FUNCNAME, 17); \
1450 SAVE_ARG_HISTORY(FUNCNAME, 18); \
1453 HISTORY_DROPPED(FUNCNAME); \
1455 INCREMENT_CALL_COUNT(FUNCNAME); \
1456 REGISTER_CALL(FUNCNAME); \
1457 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1458 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1459 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
1462 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
1465 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
1467 DEFINE_RESET_FUNCTION(FUNCNAME) \
1469 #define FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1470 DECLARE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1471 DEFINE_FAKE_VOID_FUNC19(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
1474 #define DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1475 typedef struct FUNCNAME##_Fake { \
1476 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1477 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1478 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1479 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1480 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1481 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1482 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1483 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
1484 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
1485 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
1486 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
1487 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
1488 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
1489 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
1490 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
1491 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
1492 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
1493 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
1494 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
1495 DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
1496 DECLARE_ALL_FUNC_COMMON \
1497 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1498 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
1499 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
1500 } FUNCNAME##_Fake; \
1501 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1502 void FUNCNAME##_reset(void); \
1503 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
1505 #define DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1506 FUNCNAME##_Fake FUNCNAME##_fake; \
1507 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
1508 SAVE_ARG(FUNCNAME, 0); \
1509 SAVE_ARG(FUNCNAME, 1); \
1510 SAVE_ARG(FUNCNAME, 2); \
1511 SAVE_ARG(FUNCNAME, 3); \
1512 SAVE_ARG(FUNCNAME, 4); \
1513 SAVE_ARG(FUNCNAME, 5); \
1514 SAVE_ARG(FUNCNAME, 6); \
1515 SAVE_ARG(FUNCNAME, 7); \
1516 SAVE_ARG(FUNCNAME, 8); \
1517 SAVE_ARG(FUNCNAME, 9); \
1518 SAVE_ARG(FUNCNAME, 10); \
1519 SAVE_ARG(FUNCNAME, 11); \
1520 SAVE_ARG(FUNCNAME, 12); \
1521 SAVE_ARG(FUNCNAME, 13); \
1522 SAVE_ARG(FUNCNAME, 14); \
1523 SAVE_ARG(FUNCNAME, 15); \
1524 SAVE_ARG(FUNCNAME, 16); \
1525 SAVE_ARG(FUNCNAME, 17); \
1526 SAVE_ARG(FUNCNAME, 18); \
1527 SAVE_ARG(FUNCNAME, 19); \
1528 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1529 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1530 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1531 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1532 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1533 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1534 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1535 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1536 SAVE_ARG_HISTORY(FUNCNAME, 7); \
1537 SAVE_ARG_HISTORY(FUNCNAME, 8); \
1538 SAVE_ARG_HISTORY(FUNCNAME, 9); \
1539 SAVE_ARG_HISTORY(FUNCNAME, 10); \
1540 SAVE_ARG_HISTORY(FUNCNAME, 11); \
1541 SAVE_ARG_HISTORY(FUNCNAME, 12); \
1542 SAVE_ARG_HISTORY(FUNCNAME, 13); \
1543 SAVE_ARG_HISTORY(FUNCNAME, 14); \
1544 SAVE_ARG_HISTORY(FUNCNAME, 15); \
1545 SAVE_ARG_HISTORY(FUNCNAME, 16); \
1546 SAVE_ARG_HISTORY(FUNCNAME, 17); \
1547 SAVE_ARG_HISTORY(FUNCNAME, 18); \
1548 SAVE_ARG_HISTORY(FUNCNAME, 19); \
1551 HISTORY_DROPPED(FUNCNAME); \
1553 INCREMENT_CALL_COUNT(FUNCNAME); \
1554 REGISTER_CALL(FUNCNAME); \
1555 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1556 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1557 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
1560 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
1563 if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
1565 DEFINE_RESET_FUNCTION(FUNCNAME) \
1567 #define FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1568 DECLARE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1569 DEFINE_FAKE_VOID_FUNC20(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
1572 #define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1573 typedef struct FUNCNAME##_Fake { \
1574 DECLARE_ALL_FUNC_COMMON \
1575 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1576 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1577 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1578 RETURN_TYPE(*custom_fake)(void); \
1579 RETURN_TYPE(**custom_fake_seq)(void); \
1580 } FUNCNAME##_Fake; \
1581 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1582 void FUNCNAME##_reset(void); \
1583 RETURN_TYPE FUNCNAME(void); \
1585 #define DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1586 FUNCNAME##_Fake FUNCNAME##_fake; \
1587 RETURN_TYPE FUNCNAME(void){ \
1588 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1591 HISTORY_DROPPED(FUNCNAME); \
1593 INCREMENT_CALL_COUNT(FUNCNAME); \
1594 REGISTER_CALL(FUNCNAME); \
1595 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1596 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1597 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
1598 SAVE_RET_HISTORY(FUNCNAME, ret); \
1602 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
1603 SAVE_RET_HISTORY(FUNCNAME, ret); \
1605 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
1608 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(); \
1609 RETURN_FAKE_RESULT(FUNCNAME) \
1611 DEFINE_RESET_FUNCTION(FUNCNAME) \
1613 #define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1614 DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1615 DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
1618 #define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1619 typedef struct FUNCNAME##_Fake { \
1620 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1621 DECLARE_ALL_FUNC_COMMON \
1622 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1623 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1624 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1625 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0); \
1626 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0); \
1627 } FUNCNAME##_Fake; \
1628 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1629 void FUNCNAME##_reset(void); \
1630 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0); \
1632 #define DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1633 FUNCNAME##_Fake FUNCNAME##_fake; \
1634 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0){ \
1635 SAVE_ARG(FUNCNAME, 0); \
1636 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1637 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1640 HISTORY_DROPPED(FUNCNAME); \
1642 INCREMENT_CALL_COUNT(FUNCNAME); \
1643 REGISTER_CALL(FUNCNAME); \
1644 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1645 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1646 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
1647 SAVE_RET_HISTORY(FUNCNAME, ret); \
1651 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
1652 SAVE_RET_HISTORY(FUNCNAME, ret); \
1654 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
1657 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0); \
1658 RETURN_FAKE_RESULT(FUNCNAME) \
1660 DEFINE_RESET_FUNCTION(FUNCNAME) \
1662 #define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1663 DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1664 DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
1667 #define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1668 typedef struct FUNCNAME##_Fake { \
1669 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1670 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1671 DECLARE_ALL_FUNC_COMMON \
1672 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1673 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1674 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1675 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
1676 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
1677 } FUNCNAME##_Fake; \
1678 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1679 void FUNCNAME##_reset(void); \
1680 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
1682 #define DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1683 FUNCNAME##_Fake FUNCNAME##_fake; \
1684 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
1685 SAVE_ARG(FUNCNAME, 0); \
1686 SAVE_ARG(FUNCNAME, 1); \
1687 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1688 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1689 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1692 HISTORY_DROPPED(FUNCNAME); \
1694 INCREMENT_CALL_COUNT(FUNCNAME); \
1695 REGISTER_CALL(FUNCNAME); \
1696 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1697 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1698 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
1699 SAVE_RET_HISTORY(FUNCNAME, ret); \
1703 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
1704 SAVE_RET_HISTORY(FUNCNAME, ret); \
1706 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
1709 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1); \
1710 RETURN_FAKE_RESULT(FUNCNAME) \
1712 DEFINE_RESET_FUNCTION(FUNCNAME) \
1714 #define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1715 DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1716 DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
1719 #define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1720 typedef struct FUNCNAME##_Fake { \
1721 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1722 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1723 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1724 DECLARE_ALL_FUNC_COMMON \
1725 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1726 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1727 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1728 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
1729 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
1730 } FUNCNAME##_Fake; \
1731 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1732 void FUNCNAME##_reset(void); \
1733 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
1735 #define DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1736 FUNCNAME##_Fake FUNCNAME##_fake; \
1737 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
1738 SAVE_ARG(FUNCNAME, 0); \
1739 SAVE_ARG(FUNCNAME, 1); \
1740 SAVE_ARG(FUNCNAME, 2); \
1741 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1742 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1743 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1744 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1747 HISTORY_DROPPED(FUNCNAME); \
1749 INCREMENT_CALL_COUNT(FUNCNAME); \
1750 REGISTER_CALL(FUNCNAME); \
1751 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1752 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1753 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
1754 SAVE_RET_HISTORY(FUNCNAME, ret); \
1758 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
1759 SAVE_RET_HISTORY(FUNCNAME, ret); \
1761 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
1764 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
1765 RETURN_FAKE_RESULT(FUNCNAME) \
1767 DEFINE_RESET_FUNCTION(FUNCNAME) \
1769 #define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1770 DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1771 DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
1774 #define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1775 typedef struct FUNCNAME##_Fake { \
1776 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1777 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1778 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1779 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1780 DECLARE_ALL_FUNC_COMMON \
1781 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1782 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1783 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1784 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
1785 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
1786 } FUNCNAME##_Fake; \
1787 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1788 void FUNCNAME##_reset(void); \
1789 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
1791 #define DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1792 FUNCNAME##_Fake FUNCNAME##_fake; \
1793 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
1794 SAVE_ARG(FUNCNAME, 0); \
1795 SAVE_ARG(FUNCNAME, 1); \
1796 SAVE_ARG(FUNCNAME, 2); \
1797 SAVE_ARG(FUNCNAME, 3); \
1798 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1799 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1800 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1801 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1802 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1805 HISTORY_DROPPED(FUNCNAME); \
1807 INCREMENT_CALL_COUNT(FUNCNAME); \
1808 REGISTER_CALL(FUNCNAME); \
1809 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1810 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1811 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
1812 SAVE_RET_HISTORY(FUNCNAME, ret); \
1816 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
1817 SAVE_RET_HISTORY(FUNCNAME, ret); \
1819 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
1822 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
1823 RETURN_FAKE_RESULT(FUNCNAME) \
1825 DEFINE_RESET_FUNCTION(FUNCNAME) \
1827 #define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1828 DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1829 DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
1832 #define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1833 typedef struct FUNCNAME##_Fake { \
1834 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1835 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1836 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1837 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1838 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1839 DECLARE_ALL_FUNC_COMMON \
1840 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1841 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1842 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1843 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
1844 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
1845 } FUNCNAME##_Fake; \
1846 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1847 void FUNCNAME##_reset(void); \
1848 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
1850 #define DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1851 FUNCNAME##_Fake FUNCNAME##_fake; \
1852 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
1853 SAVE_ARG(FUNCNAME, 0); \
1854 SAVE_ARG(FUNCNAME, 1); \
1855 SAVE_ARG(FUNCNAME, 2); \
1856 SAVE_ARG(FUNCNAME, 3); \
1857 SAVE_ARG(FUNCNAME, 4); \
1858 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1859 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1860 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1861 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1862 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1863 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1866 HISTORY_DROPPED(FUNCNAME); \
1868 INCREMENT_CALL_COUNT(FUNCNAME); \
1869 REGISTER_CALL(FUNCNAME); \
1870 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1871 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1872 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
1873 SAVE_RET_HISTORY(FUNCNAME, ret); \
1877 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
1878 SAVE_RET_HISTORY(FUNCNAME, ret); \
1880 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
1883 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
1884 RETURN_FAKE_RESULT(FUNCNAME) \
1886 DEFINE_RESET_FUNCTION(FUNCNAME) \
1888 #define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1889 DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1890 DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
1893 #define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1894 typedef struct FUNCNAME##_Fake { \
1895 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1896 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1897 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1898 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1899 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1900 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1901 DECLARE_ALL_FUNC_COMMON \
1902 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1903 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1904 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1905 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
1906 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
1907 } FUNCNAME##_Fake; \
1908 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1909 void FUNCNAME##_reset(void); \
1910 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
1912 #define DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1913 FUNCNAME##_Fake FUNCNAME##_fake; \
1914 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
1915 SAVE_ARG(FUNCNAME, 0); \
1916 SAVE_ARG(FUNCNAME, 1); \
1917 SAVE_ARG(FUNCNAME, 2); \
1918 SAVE_ARG(FUNCNAME, 3); \
1919 SAVE_ARG(FUNCNAME, 4); \
1920 SAVE_ARG(FUNCNAME, 5); \
1921 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1922 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1923 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1924 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1925 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1926 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1927 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1930 HISTORY_DROPPED(FUNCNAME); \
1932 INCREMENT_CALL_COUNT(FUNCNAME); \
1933 REGISTER_CALL(FUNCNAME); \
1934 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
1935 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
1936 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
1937 SAVE_RET_HISTORY(FUNCNAME, ret); \
1941 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
1942 SAVE_RET_HISTORY(FUNCNAME, ret); \
1944 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
1947 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
1948 RETURN_FAKE_RESULT(FUNCNAME) \
1950 DEFINE_RESET_FUNCTION(FUNCNAME) \
1952 #define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1953 DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1954 DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
1957 #define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
1958 typedef struct FUNCNAME##_Fake { \
1959 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
1960 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
1961 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
1962 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
1963 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
1964 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
1965 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
1966 DECLARE_ALL_FUNC_COMMON \
1967 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
1968 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
1969 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
1970 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
1971 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
1972 } FUNCNAME##_Fake; \
1973 extern FUNCNAME##_Fake FUNCNAME##_fake; \
1974 void FUNCNAME##_reset(void); \
1975 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
1977 #define DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
1978 FUNCNAME##_Fake FUNCNAME##_fake; \
1979 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
1980 SAVE_ARG(FUNCNAME, 0); \
1981 SAVE_ARG(FUNCNAME, 1); \
1982 SAVE_ARG(FUNCNAME, 2); \
1983 SAVE_ARG(FUNCNAME, 3); \
1984 SAVE_ARG(FUNCNAME, 4); \
1985 SAVE_ARG(FUNCNAME, 5); \
1986 SAVE_ARG(FUNCNAME, 6); \
1987 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
1988 SAVE_ARG_HISTORY(FUNCNAME, 0); \
1989 SAVE_ARG_HISTORY(FUNCNAME, 1); \
1990 SAVE_ARG_HISTORY(FUNCNAME, 2); \
1991 SAVE_ARG_HISTORY(FUNCNAME, 3); \
1992 SAVE_ARG_HISTORY(FUNCNAME, 4); \
1993 SAVE_ARG_HISTORY(FUNCNAME, 5); \
1994 SAVE_ARG_HISTORY(FUNCNAME, 6); \
1997 HISTORY_DROPPED(FUNCNAME); \
1999 INCREMENT_CALL_COUNT(FUNCNAME); \
2000 REGISTER_CALL(FUNCNAME); \
2001 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2002 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2003 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2004 SAVE_RET_HISTORY(FUNCNAME, ret); \
2008 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2009 SAVE_RET_HISTORY(FUNCNAME, ret); \
2011 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2014 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
2015 RETURN_FAKE_RESULT(FUNCNAME) \
2017 DEFINE_RESET_FUNCTION(FUNCNAME) \
2019 #define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2020 DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2021 DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
2024 #define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2025 typedef struct FUNCNAME##_Fake { \
2026 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2027 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2028 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2029 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2030 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2031 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2032 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2033 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2034 DECLARE_ALL_FUNC_COMMON \
2035 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2036 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2037 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2038 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
2039 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
2040 } FUNCNAME##_Fake; \
2041 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2042 void FUNCNAME##_reset(void); \
2043 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7); \
2045 #define DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2046 FUNCNAME##_Fake FUNCNAME##_fake; \
2047 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7){ \
2048 SAVE_ARG(FUNCNAME, 0); \
2049 SAVE_ARG(FUNCNAME, 1); \
2050 SAVE_ARG(FUNCNAME, 2); \
2051 SAVE_ARG(FUNCNAME, 3); \
2052 SAVE_ARG(FUNCNAME, 4); \
2053 SAVE_ARG(FUNCNAME, 5); \
2054 SAVE_ARG(FUNCNAME, 6); \
2055 SAVE_ARG(FUNCNAME, 7); \
2056 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2057 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2058 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2059 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2060 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2061 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2062 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2063 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2064 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2067 HISTORY_DROPPED(FUNCNAME); \
2069 INCREMENT_CALL_COUNT(FUNCNAME); \
2070 REGISTER_CALL(FUNCNAME); \
2071 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2072 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2073 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2074 SAVE_RET_HISTORY(FUNCNAME, ret); \
2078 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2079 SAVE_RET_HISTORY(FUNCNAME, ret); \
2081 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2084 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
2085 RETURN_FAKE_RESULT(FUNCNAME) \
2087 DEFINE_RESET_FUNCTION(FUNCNAME) \
2089 #define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2090 DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2091 DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
2094 #define DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2095 typedef struct FUNCNAME##_Fake { \
2096 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2097 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2098 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2099 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2100 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2101 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2102 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2103 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2104 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2105 DECLARE_ALL_FUNC_COMMON \
2106 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2107 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2108 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2109 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
2110 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
2111 } FUNCNAME##_Fake; \
2112 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2113 void FUNCNAME##_reset(void); \
2114 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8); \
2116 #define DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2117 FUNCNAME##_Fake FUNCNAME##_fake; \
2118 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8){ \
2119 SAVE_ARG(FUNCNAME, 0); \
2120 SAVE_ARG(FUNCNAME, 1); \
2121 SAVE_ARG(FUNCNAME, 2); \
2122 SAVE_ARG(FUNCNAME, 3); \
2123 SAVE_ARG(FUNCNAME, 4); \
2124 SAVE_ARG(FUNCNAME, 5); \
2125 SAVE_ARG(FUNCNAME, 6); \
2126 SAVE_ARG(FUNCNAME, 7); \
2127 SAVE_ARG(FUNCNAME, 8); \
2128 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2129 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2130 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2131 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2132 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2133 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2134 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2135 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2136 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2137 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2140 HISTORY_DROPPED(FUNCNAME); \
2142 INCREMENT_CALL_COUNT(FUNCNAME); \
2143 REGISTER_CALL(FUNCNAME); \
2144 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2145 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2146 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2147 SAVE_RET_HISTORY(FUNCNAME, ret); \
2151 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2152 SAVE_RET_HISTORY(FUNCNAME, ret); \
2154 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2157 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
2158 RETURN_FAKE_RESULT(FUNCNAME) \
2160 DEFINE_RESET_FUNCTION(FUNCNAME) \
2162 #define FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2163 DECLARE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2164 DEFINE_FAKE_VALUE_FUNC9(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
2167 #define DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2168 typedef struct FUNCNAME##_Fake { \
2169 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2170 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2171 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2172 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2173 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2174 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2175 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2176 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2177 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2178 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2179 DECLARE_ALL_FUNC_COMMON \
2180 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2181 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2182 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2183 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
2184 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
2185 } FUNCNAME##_Fake; \
2186 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2187 void FUNCNAME##_reset(void); \
2188 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9); \
2190 #define DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2191 FUNCNAME##_Fake FUNCNAME##_fake; \
2192 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9){ \
2193 SAVE_ARG(FUNCNAME, 0); \
2194 SAVE_ARG(FUNCNAME, 1); \
2195 SAVE_ARG(FUNCNAME, 2); \
2196 SAVE_ARG(FUNCNAME, 3); \
2197 SAVE_ARG(FUNCNAME, 4); \
2198 SAVE_ARG(FUNCNAME, 5); \
2199 SAVE_ARG(FUNCNAME, 6); \
2200 SAVE_ARG(FUNCNAME, 7); \
2201 SAVE_ARG(FUNCNAME, 8); \
2202 SAVE_ARG(FUNCNAME, 9); \
2203 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2204 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2205 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2206 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2207 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2208 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2209 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2210 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2211 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2212 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2213 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2216 HISTORY_DROPPED(FUNCNAME); \
2218 INCREMENT_CALL_COUNT(FUNCNAME); \
2219 REGISTER_CALL(FUNCNAME); \
2220 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2221 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2222 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2223 SAVE_RET_HISTORY(FUNCNAME, ret); \
2227 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2228 SAVE_RET_HISTORY(FUNCNAME, ret); \
2230 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2233 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
2234 RETURN_FAKE_RESULT(FUNCNAME) \
2236 DEFINE_RESET_FUNCTION(FUNCNAME) \
2238 #define FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2239 DECLARE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2240 DEFINE_FAKE_VALUE_FUNC10(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE) \
2243 #define DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2244 typedef struct FUNCNAME##_Fake { \
2245 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2246 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2247 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2248 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2249 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2250 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2251 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2252 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2253 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2254 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2255 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2256 DECLARE_ALL_FUNC_COMMON \
2257 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2258 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2259 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2260 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
2261 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
2262 } FUNCNAME##_Fake; \
2263 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2264 void FUNCNAME##_reset(void); \
2265 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10); \
2267 #define DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2268 FUNCNAME##_Fake FUNCNAME##_fake; \
2269 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10){ \
2270 SAVE_ARG(FUNCNAME, 0); \
2271 SAVE_ARG(FUNCNAME, 1); \
2272 SAVE_ARG(FUNCNAME, 2); \
2273 SAVE_ARG(FUNCNAME, 3); \
2274 SAVE_ARG(FUNCNAME, 4); \
2275 SAVE_ARG(FUNCNAME, 5); \
2276 SAVE_ARG(FUNCNAME, 6); \
2277 SAVE_ARG(FUNCNAME, 7); \
2278 SAVE_ARG(FUNCNAME, 8); \
2279 SAVE_ARG(FUNCNAME, 9); \
2280 SAVE_ARG(FUNCNAME, 10); \
2281 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2282 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2283 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2284 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2285 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2286 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2287 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2288 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2289 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2290 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2291 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2292 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2295 HISTORY_DROPPED(FUNCNAME); \
2297 INCREMENT_CALL_COUNT(FUNCNAME); \
2298 REGISTER_CALL(FUNCNAME); \
2299 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2300 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2301 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2302 SAVE_RET_HISTORY(FUNCNAME, ret); \
2306 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2307 SAVE_RET_HISTORY(FUNCNAME, ret); \
2309 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2312 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
2313 RETURN_FAKE_RESULT(FUNCNAME) \
2315 DEFINE_RESET_FUNCTION(FUNCNAME) \
2317 #define FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2318 DECLARE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2319 DEFINE_FAKE_VALUE_FUNC11(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE) \
2322 #define DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2323 typedef struct FUNCNAME##_Fake { \
2324 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2325 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2326 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2327 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2328 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2329 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2330 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2331 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2332 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2333 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2334 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2335 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2336 DECLARE_ALL_FUNC_COMMON \
2337 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2338 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2339 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2340 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
2341 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
2342 } FUNCNAME##_Fake; \
2343 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2344 void FUNCNAME##_reset(void); \
2345 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11); \
2347 #define DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2348 FUNCNAME##_Fake FUNCNAME##_fake; \
2349 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11){ \
2350 SAVE_ARG(FUNCNAME, 0); \
2351 SAVE_ARG(FUNCNAME, 1); \
2352 SAVE_ARG(FUNCNAME, 2); \
2353 SAVE_ARG(FUNCNAME, 3); \
2354 SAVE_ARG(FUNCNAME, 4); \
2355 SAVE_ARG(FUNCNAME, 5); \
2356 SAVE_ARG(FUNCNAME, 6); \
2357 SAVE_ARG(FUNCNAME, 7); \
2358 SAVE_ARG(FUNCNAME, 8); \
2359 SAVE_ARG(FUNCNAME, 9); \
2360 SAVE_ARG(FUNCNAME, 10); \
2361 SAVE_ARG(FUNCNAME, 11); \
2362 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2363 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2364 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2365 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2366 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2367 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2368 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2369 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2370 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2371 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2372 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2373 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2374 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2377 HISTORY_DROPPED(FUNCNAME); \
2379 INCREMENT_CALL_COUNT(FUNCNAME); \
2380 REGISTER_CALL(FUNCNAME); \
2381 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2382 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2383 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2384 SAVE_RET_HISTORY(FUNCNAME, ret); \
2388 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2389 SAVE_RET_HISTORY(FUNCNAME, ret); \
2391 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2394 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
2395 RETURN_FAKE_RESULT(FUNCNAME) \
2397 DEFINE_RESET_FUNCTION(FUNCNAME) \
2399 #define FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2400 DECLARE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2401 DEFINE_FAKE_VALUE_FUNC12(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE) \
2404 #define DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2405 typedef struct FUNCNAME##_Fake { \
2406 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2407 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2408 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2409 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2410 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2411 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2412 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2413 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2414 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2415 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2416 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2417 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2418 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2419 DECLARE_ALL_FUNC_COMMON \
2420 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2421 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2422 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2423 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
2424 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
2425 } FUNCNAME##_Fake; \
2426 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2427 void FUNCNAME##_reset(void); \
2428 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12); \
2430 #define DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2431 FUNCNAME##_Fake FUNCNAME##_fake; \
2432 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12){ \
2433 SAVE_ARG(FUNCNAME, 0); \
2434 SAVE_ARG(FUNCNAME, 1); \
2435 SAVE_ARG(FUNCNAME, 2); \
2436 SAVE_ARG(FUNCNAME, 3); \
2437 SAVE_ARG(FUNCNAME, 4); \
2438 SAVE_ARG(FUNCNAME, 5); \
2439 SAVE_ARG(FUNCNAME, 6); \
2440 SAVE_ARG(FUNCNAME, 7); \
2441 SAVE_ARG(FUNCNAME, 8); \
2442 SAVE_ARG(FUNCNAME, 9); \
2443 SAVE_ARG(FUNCNAME, 10); \
2444 SAVE_ARG(FUNCNAME, 11); \
2445 SAVE_ARG(FUNCNAME, 12); \
2446 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2447 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2448 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2449 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2450 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2451 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2452 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2453 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2454 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2455 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2456 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2457 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2458 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2459 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2462 HISTORY_DROPPED(FUNCNAME); \
2464 INCREMENT_CALL_COUNT(FUNCNAME); \
2465 REGISTER_CALL(FUNCNAME); \
2466 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2467 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2468 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2469 SAVE_RET_HISTORY(FUNCNAME, ret); \
2473 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2474 SAVE_RET_HISTORY(FUNCNAME, ret); \
2476 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2479 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
2480 RETURN_FAKE_RESULT(FUNCNAME) \
2482 DEFINE_RESET_FUNCTION(FUNCNAME) \
2484 #define FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2485 DECLARE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2486 DEFINE_FAKE_VALUE_FUNC13(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE) \
2489 #define DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2490 typedef struct FUNCNAME##_Fake { \
2491 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2492 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2493 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2494 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2495 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2496 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2497 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2498 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2499 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2500 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2501 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2502 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2503 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2504 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2505 DECLARE_ALL_FUNC_COMMON \
2506 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2507 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2508 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2509 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
2510 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
2511 } FUNCNAME##_Fake; \
2512 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2513 void FUNCNAME##_reset(void); \
2514 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13); \
2516 #define DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2517 FUNCNAME##_Fake FUNCNAME##_fake; \
2518 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13){ \
2519 SAVE_ARG(FUNCNAME, 0); \
2520 SAVE_ARG(FUNCNAME, 1); \
2521 SAVE_ARG(FUNCNAME, 2); \
2522 SAVE_ARG(FUNCNAME, 3); \
2523 SAVE_ARG(FUNCNAME, 4); \
2524 SAVE_ARG(FUNCNAME, 5); \
2525 SAVE_ARG(FUNCNAME, 6); \
2526 SAVE_ARG(FUNCNAME, 7); \
2527 SAVE_ARG(FUNCNAME, 8); \
2528 SAVE_ARG(FUNCNAME, 9); \
2529 SAVE_ARG(FUNCNAME, 10); \
2530 SAVE_ARG(FUNCNAME, 11); \
2531 SAVE_ARG(FUNCNAME, 12); \
2532 SAVE_ARG(FUNCNAME, 13); \
2533 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2534 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2535 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2536 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2537 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2538 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2539 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2540 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2541 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2542 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2543 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2544 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2545 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2546 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2547 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2550 HISTORY_DROPPED(FUNCNAME); \
2552 INCREMENT_CALL_COUNT(FUNCNAME); \
2553 REGISTER_CALL(FUNCNAME); \
2554 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2555 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2556 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2557 SAVE_RET_HISTORY(FUNCNAME, ret); \
2561 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2562 SAVE_RET_HISTORY(FUNCNAME, ret); \
2564 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2567 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
2568 RETURN_FAKE_RESULT(FUNCNAME) \
2570 DEFINE_RESET_FUNCTION(FUNCNAME) \
2572 #define FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2573 DECLARE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2574 DEFINE_FAKE_VALUE_FUNC14(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE) \
2577 #define DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2578 typedef struct FUNCNAME##_Fake { \
2579 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2580 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2581 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2582 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2583 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2584 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2585 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2586 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2587 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2588 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2589 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2590 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2591 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2592 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2593 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2594 DECLARE_ALL_FUNC_COMMON \
2595 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2596 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2597 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2598 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
2599 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
2600 } FUNCNAME##_Fake; \
2601 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2602 void FUNCNAME##_reset(void); \
2603 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14); \
2605 #define DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2606 FUNCNAME##_Fake FUNCNAME##_fake; \
2607 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14){ \
2608 SAVE_ARG(FUNCNAME, 0); \
2609 SAVE_ARG(FUNCNAME, 1); \
2610 SAVE_ARG(FUNCNAME, 2); \
2611 SAVE_ARG(FUNCNAME, 3); \
2612 SAVE_ARG(FUNCNAME, 4); \
2613 SAVE_ARG(FUNCNAME, 5); \
2614 SAVE_ARG(FUNCNAME, 6); \
2615 SAVE_ARG(FUNCNAME, 7); \
2616 SAVE_ARG(FUNCNAME, 8); \
2617 SAVE_ARG(FUNCNAME, 9); \
2618 SAVE_ARG(FUNCNAME, 10); \
2619 SAVE_ARG(FUNCNAME, 11); \
2620 SAVE_ARG(FUNCNAME, 12); \
2621 SAVE_ARG(FUNCNAME, 13); \
2622 SAVE_ARG(FUNCNAME, 14); \
2623 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2624 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2625 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2626 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2627 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2628 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2629 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2630 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2631 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2632 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2633 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2634 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2635 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2636 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2637 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2638 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2641 HISTORY_DROPPED(FUNCNAME); \
2643 INCREMENT_CALL_COUNT(FUNCNAME); \
2644 REGISTER_CALL(FUNCNAME); \
2645 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2646 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2647 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2648 SAVE_RET_HISTORY(FUNCNAME, ret); \
2652 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2653 SAVE_RET_HISTORY(FUNCNAME, ret); \
2655 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2658 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
2659 RETURN_FAKE_RESULT(FUNCNAME) \
2661 DEFINE_RESET_FUNCTION(FUNCNAME) \
2663 #define FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2664 DECLARE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2665 DEFINE_FAKE_VALUE_FUNC15(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE) \
2668 #define DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2669 typedef struct FUNCNAME##_Fake { \
2670 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2671 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2672 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2673 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2674 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2675 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2676 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2677 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2678 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2679 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2680 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2681 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2682 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2683 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2684 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2685 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
2686 DECLARE_ALL_FUNC_COMMON \
2687 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2688 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2689 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2690 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
2691 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
2692 } FUNCNAME##_Fake; \
2693 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2694 void FUNCNAME##_reset(void); \
2695 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15); \
2697 #define DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2698 FUNCNAME##_Fake FUNCNAME##_fake; \
2699 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15){ \
2700 SAVE_ARG(FUNCNAME, 0); \
2701 SAVE_ARG(FUNCNAME, 1); \
2702 SAVE_ARG(FUNCNAME, 2); \
2703 SAVE_ARG(FUNCNAME, 3); \
2704 SAVE_ARG(FUNCNAME, 4); \
2705 SAVE_ARG(FUNCNAME, 5); \
2706 SAVE_ARG(FUNCNAME, 6); \
2707 SAVE_ARG(FUNCNAME, 7); \
2708 SAVE_ARG(FUNCNAME, 8); \
2709 SAVE_ARG(FUNCNAME, 9); \
2710 SAVE_ARG(FUNCNAME, 10); \
2711 SAVE_ARG(FUNCNAME, 11); \
2712 SAVE_ARG(FUNCNAME, 12); \
2713 SAVE_ARG(FUNCNAME, 13); \
2714 SAVE_ARG(FUNCNAME, 14); \
2715 SAVE_ARG(FUNCNAME, 15); \
2716 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2717 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2718 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2719 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2720 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2721 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2722 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2723 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2724 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2725 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2726 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2727 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2728 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2729 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2730 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2731 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2732 SAVE_ARG_HISTORY(FUNCNAME, 15); \
2735 HISTORY_DROPPED(FUNCNAME); \
2737 INCREMENT_CALL_COUNT(FUNCNAME); \
2738 REGISTER_CALL(FUNCNAME); \
2739 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2740 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2741 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2742 SAVE_RET_HISTORY(FUNCNAME, ret); \
2746 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2747 SAVE_RET_HISTORY(FUNCNAME, ret); \
2749 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2752 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15); \
2753 RETURN_FAKE_RESULT(FUNCNAME) \
2755 DEFINE_RESET_FUNCTION(FUNCNAME) \
2757 #define FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2758 DECLARE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2759 DEFINE_FAKE_VALUE_FUNC16(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE) \
2762 #define DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2763 typedef struct FUNCNAME##_Fake { \
2764 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2765 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2766 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2767 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2768 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2769 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2770 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2771 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2772 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2773 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2774 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2775 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2776 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2777 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2778 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2779 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
2780 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
2781 DECLARE_ALL_FUNC_COMMON \
2782 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2783 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2784 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2785 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
2786 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
2787 } FUNCNAME##_Fake; \
2788 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2789 void FUNCNAME##_reset(void); \
2790 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16); \
2792 #define DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2793 FUNCNAME##_Fake FUNCNAME##_fake; \
2794 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16){ \
2795 SAVE_ARG(FUNCNAME, 0); \
2796 SAVE_ARG(FUNCNAME, 1); \
2797 SAVE_ARG(FUNCNAME, 2); \
2798 SAVE_ARG(FUNCNAME, 3); \
2799 SAVE_ARG(FUNCNAME, 4); \
2800 SAVE_ARG(FUNCNAME, 5); \
2801 SAVE_ARG(FUNCNAME, 6); \
2802 SAVE_ARG(FUNCNAME, 7); \
2803 SAVE_ARG(FUNCNAME, 8); \
2804 SAVE_ARG(FUNCNAME, 9); \
2805 SAVE_ARG(FUNCNAME, 10); \
2806 SAVE_ARG(FUNCNAME, 11); \
2807 SAVE_ARG(FUNCNAME, 12); \
2808 SAVE_ARG(FUNCNAME, 13); \
2809 SAVE_ARG(FUNCNAME, 14); \
2810 SAVE_ARG(FUNCNAME, 15); \
2811 SAVE_ARG(FUNCNAME, 16); \
2812 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2813 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2814 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2815 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2816 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2817 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2818 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2819 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2820 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2821 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2822 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2823 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2824 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2825 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2826 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2827 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2828 SAVE_ARG_HISTORY(FUNCNAME, 15); \
2829 SAVE_ARG_HISTORY(FUNCNAME, 16); \
2832 HISTORY_DROPPED(FUNCNAME); \
2834 INCREMENT_CALL_COUNT(FUNCNAME); \
2835 REGISTER_CALL(FUNCNAME); \
2836 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2837 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2838 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2839 SAVE_RET_HISTORY(FUNCNAME, ret); \
2843 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2844 SAVE_RET_HISTORY(FUNCNAME, ret); \
2846 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2849 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16); \
2850 RETURN_FAKE_RESULT(FUNCNAME) \
2852 DEFINE_RESET_FUNCTION(FUNCNAME) \
2854 #define FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2855 DECLARE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2856 DEFINE_FAKE_VALUE_FUNC17(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE) \
2859 #define DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
2860 typedef struct FUNCNAME##_Fake { \
2861 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2862 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2863 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2864 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2865 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2866 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2867 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2868 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2869 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2870 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2871 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2872 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2873 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2874 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2875 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2876 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
2877 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
2878 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
2879 DECLARE_ALL_FUNC_COMMON \
2880 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2881 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2882 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2883 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
2884 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
2885 } FUNCNAME##_Fake; \
2886 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2887 void FUNCNAME##_reset(void); \
2888 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17); \
2890 #define DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
2891 FUNCNAME##_Fake FUNCNAME##_fake; \
2892 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17){ \
2893 SAVE_ARG(FUNCNAME, 0); \
2894 SAVE_ARG(FUNCNAME, 1); \
2895 SAVE_ARG(FUNCNAME, 2); \
2896 SAVE_ARG(FUNCNAME, 3); \
2897 SAVE_ARG(FUNCNAME, 4); \
2898 SAVE_ARG(FUNCNAME, 5); \
2899 SAVE_ARG(FUNCNAME, 6); \
2900 SAVE_ARG(FUNCNAME, 7); \
2901 SAVE_ARG(FUNCNAME, 8); \
2902 SAVE_ARG(FUNCNAME, 9); \
2903 SAVE_ARG(FUNCNAME, 10); \
2904 SAVE_ARG(FUNCNAME, 11); \
2905 SAVE_ARG(FUNCNAME, 12); \
2906 SAVE_ARG(FUNCNAME, 13); \
2907 SAVE_ARG(FUNCNAME, 14); \
2908 SAVE_ARG(FUNCNAME, 15); \
2909 SAVE_ARG(FUNCNAME, 16); \
2910 SAVE_ARG(FUNCNAME, 17); \
2911 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
2912 SAVE_ARG_HISTORY(FUNCNAME, 0); \
2913 SAVE_ARG_HISTORY(FUNCNAME, 1); \
2914 SAVE_ARG_HISTORY(FUNCNAME, 2); \
2915 SAVE_ARG_HISTORY(FUNCNAME, 3); \
2916 SAVE_ARG_HISTORY(FUNCNAME, 4); \
2917 SAVE_ARG_HISTORY(FUNCNAME, 5); \
2918 SAVE_ARG_HISTORY(FUNCNAME, 6); \
2919 SAVE_ARG_HISTORY(FUNCNAME, 7); \
2920 SAVE_ARG_HISTORY(FUNCNAME, 8); \
2921 SAVE_ARG_HISTORY(FUNCNAME, 9); \
2922 SAVE_ARG_HISTORY(FUNCNAME, 10); \
2923 SAVE_ARG_HISTORY(FUNCNAME, 11); \
2924 SAVE_ARG_HISTORY(FUNCNAME, 12); \
2925 SAVE_ARG_HISTORY(FUNCNAME, 13); \
2926 SAVE_ARG_HISTORY(FUNCNAME, 14); \
2927 SAVE_ARG_HISTORY(FUNCNAME, 15); \
2928 SAVE_ARG_HISTORY(FUNCNAME, 16); \
2929 SAVE_ARG_HISTORY(FUNCNAME, 17); \
2932 HISTORY_DROPPED(FUNCNAME); \
2934 INCREMENT_CALL_COUNT(FUNCNAME); \
2935 REGISTER_CALL(FUNCNAME); \
2936 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
2937 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
2938 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
2939 SAVE_RET_HISTORY(FUNCNAME, ret); \
2943 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
2944 SAVE_RET_HISTORY(FUNCNAME, ret); \
2946 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
2949 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17); \
2950 RETURN_FAKE_RESULT(FUNCNAME) \
2952 DEFINE_RESET_FUNCTION(FUNCNAME) \
2954 #define FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
2955 DECLARE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
2956 DEFINE_FAKE_VALUE_FUNC18(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE) \
2959 #define DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
2960 typedef struct FUNCNAME##_Fake { \
2961 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
2962 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
2963 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
2964 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
2965 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
2966 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
2967 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
2968 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
2969 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
2970 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
2971 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
2972 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
2973 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
2974 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
2975 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
2976 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
2977 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
2978 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
2979 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
2980 DECLARE_ALL_FUNC_COMMON \
2981 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
2982 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
2983 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
2984 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
2985 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
2986 } FUNCNAME##_Fake; \
2987 extern FUNCNAME##_Fake FUNCNAME##_fake; \
2988 void FUNCNAME##_reset(void); \
2989 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18); \
2991 #define DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
2992 FUNCNAME##_Fake FUNCNAME##_fake; \
2993 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18){ \
2994 SAVE_ARG(FUNCNAME, 0); \
2995 SAVE_ARG(FUNCNAME, 1); \
2996 SAVE_ARG(FUNCNAME, 2); \
2997 SAVE_ARG(FUNCNAME, 3); \
2998 SAVE_ARG(FUNCNAME, 4); \
2999 SAVE_ARG(FUNCNAME, 5); \
3000 SAVE_ARG(FUNCNAME, 6); \
3001 SAVE_ARG(FUNCNAME, 7); \
3002 SAVE_ARG(FUNCNAME, 8); \
3003 SAVE_ARG(FUNCNAME, 9); \
3004 SAVE_ARG(FUNCNAME, 10); \
3005 SAVE_ARG(FUNCNAME, 11); \
3006 SAVE_ARG(FUNCNAME, 12); \
3007 SAVE_ARG(FUNCNAME, 13); \
3008 SAVE_ARG(FUNCNAME, 14); \
3009 SAVE_ARG(FUNCNAME, 15); \
3010 SAVE_ARG(FUNCNAME, 16); \
3011 SAVE_ARG(FUNCNAME, 17); \
3012 SAVE_ARG(FUNCNAME, 18); \
3013 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3014 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3015 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3016 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3017 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3018 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3019 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3020 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3021 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3022 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3023 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3024 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3025 SAVE_ARG_HISTORY(FUNCNAME, 11); \
3026 SAVE_ARG_HISTORY(FUNCNAME, 12); \
3027 SAVE_ARG_HISTORY(FUNCNAME, 13); \
3028 SAVE_ARG_HISTORY(FUNCNAME, 14); \
3029 SAVE_ARG_HISTORY(FUNCNAME, 15); \
3030 SAVE_ARG_HISTORY(FUNCNAME, 16); \
3031 SAVE_ARG_HISTORY(FUNCNAME, 17); \
3032 SAVE_ARG_HISTORY(FUNCNAME, 18); \
3035 HISTORY_DROPPED(FUNCNAME); \
3037 INCREMENT_CALL_COUNT(FUNCNAME); \
3038 REGISTER_CALL(FUNCNAME); \
3039 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3040 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3041 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3042 SAVE_RET_HISTORY(FUNCNAME, ret); \
3046 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3047 SAVE_RET_HISTORY(FUNCNAME, ret); \
3049 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3052 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18); \
3053 RETURN_FAKE_RESULT(FUNCNAME) \
3055 DEFINE_RESET_FUNCTION(FUNCNAME) \
3057 #define FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3058 DECLARE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3059 DEFINE_FAKE_VALUE_FUNC19(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE) \
3062 #define DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3063 typedef struct FUNCNAME##_Fake { \
3064 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3065 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3066 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3067 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3068 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3069 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3070 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3071 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3072 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3073 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3074 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3075 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
3076 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
3077 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
3078 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
3079 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
3080 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
3081 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
3082 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
3083 DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
3084 DECLARE_ALL_FUNC_COMMON \
3085 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
3086 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
3087 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3088 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
3089 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
3090 } FUNCNAME##_Fake; \
3091 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3092 void FUNCNAME##_reset(void); \
3093 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19); \
3095 #define DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3096 FUNCNAME##_Fake FUNCNAME##_fake; \
3097 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ARG19_TYPE arg19){ \
3098 SAVE_ARG(FUNCNAME, 0); \
3099 SAVE_ARG(FUNCNAME, 1); \
3100 SAVE_ARG(FUNCNAME, 2); \
3101 SAVE_ARG(FUNCNAME, 3); \
3102 SAVE_ARG(FUNCNAME, 4); \
3103 SAVE_ARG(FUNCNAME, 5); \
3104 SAVE_ARG(FUNCNAME, 6); \
3105 SAVE_ARG(FUNCNAME, 7); \
3106 SAVE_ARG(FUNCNAME, 8); \
3107 SAVE_ARG(FUNCNAME, 9); \
3108 SAVE_ARG(FUNCNAME, 10); \
3109 SAVE_ARG(FUNCNAME, 11); \
3110 SAVE_ARG(FUNCNAME, 12); \
3111 SAVE_ARG(FUNCNAME, 13); \
3112 SAVE_ARG(FUNCNAME, 14); \
3113 SAVE_ARG(FUNCNAME, 15); \
3114 SAVE_ARG(FUNCNAME, 16); \
3115 SAVE_ARG(FUNCNAME, 17); \
3116 SAVE_ARG(FUNCNAME, 18); \
3117 SAVE_ARG(FUNCNAME, 19); \
3118 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3119 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3120 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3121 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3122 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3123 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3124 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3125 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3126 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3127 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3128 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3129 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3130 SAVE_ARG_HISTORY(FUNCNAME, 11); \
3131 SAVE_ARG_HISTORY(FUNCNAME, 12); \
3132 SAVE_ARG_HISTORY(FUNCNAME, 13); \
3133 SAVE_ARG_HISTORY(FUNCNAME, 14); \
3134 SAVE_ARG_HISTORY(FUNCNAME, 15); \
3135 SAVE_ARG_HISTORY(FUNCNAME, 16); \
3136 SAVE_ARG_HISTORY(FUNCNAME, 17); \
3137 SAVE_ARG_HISTORY(FUNCNAME, 18); \
3138 SAVE_ARG_HISTORY(FUNCNAME, 19); \
3141 HISTORY_DROPPED(FUNCNAME); \
3143 INCREMENT_CALL_COUNT(FUNCNAME); \
3144 REGISTER_CALL(FUNCNAME); \
3145 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3146 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3147 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3148 SAVE_RET_HISTORY(FUNCNAME, ret); \
3152 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3153 SAVE_RET_HISTORY(FUNCNAME, ret); \
3155 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3158 if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, arg19); \
3159 RETURN_FAKE_RESULT(FUNCNAME) \
3161 DEFINE_RESET_FUNCTION(FUNCNAME) \
3163 #define FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3164 DECLARE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3165 DEFINE_FAKE_VALUE_FUNC20(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ARG19_TYPE) \
3168 #define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3169 typedef struct FUNCNAME##_Fake { \
3170 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3171 DECLARE_ALL_FUNC_COMMON \
3172 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3173 void(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
3174 void(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
3175 } FUNCNAME##_Fake; \
3176 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3177 void FUNCNAME##_reset(void); \
3178 void FUNCNAME(ARG0_TYPE arg0, ...); \
3180 #define DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3181 FUNCNAME##_Fake FUNCNAME##_fake; \
3182 void FUNCNAME(ARG0_TYPE arg0, ...){ \
3183 SAVE_ARG(FUNCNAME, 0); \
3184 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3185 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3188 HISTORY_DROPPED(FUNCNAME); \
3190 INCREMENT_CALL_COUNT(FUNCNAME); \
3191 REGISTER_CALL(FUNCNAME); \
3192 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3193 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3195 va_start(ap, arg0); \
3196 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
3201 va_start(ap, arg0); \
3202 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
3206 if (FUNCNAME##_fake.custom_fake){ \
3208 va_start(ap, arg0); \
3209 FUNCNAME##_fake.custom_fake(arg0, ap); \
3213 DEFINE_RESET_FUNCTION(FUNCNAME) \
3215 #define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3216 DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3217 DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
3220 #define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3221 typedef struct FUNCNAME##_Fake { \
3222 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3223 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3224 DECLARE_ALL_FUNC_COMMON \
3225 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3226 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
3227 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
3228 } FUNCNAME##_Fake; \
3229 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3230 void FUNCNAME##_reset(void); \
3231 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
3233 #define DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3234 FUNCNAME##_Fake FUNCNAME##_fake; \
3235 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
3236 SAVE_ARG(FUNCNAME, 0); \
3237 SAVE_ARG(FUNCNAME, 1); \
3238 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3239 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3240 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3243 HISTORY_DROPPED(FUNCNAME); \
3245 INCREMENT_CALL_COUNT(FUNCNAME); \
3246 REGISTER_CALL(FUNCNAME); \
3247 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3248 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3250 va_start(ap, arg1); \
3251 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
3256 va_start(ap, arg1); \
3257 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
3261 if (FUNCNAME##_fake.custom_fake){ \
3263 va_start(ap, arg1); \
3264 FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
3268 DEFINE_RESET_FUNCTION(FUNCNAME) \
3270 #define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3271 DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3272 DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
3275 #define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3276 typedef struct FUNCNAME##_Fake { \
3277 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3278 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3279 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3280 DECLARE_ALL_FUNC_COMMON \
3281 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3282 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
3283 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
3284 } FUNCNAME##_Fake; \
3285 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3286 void FUNCNAME##_reset(void); \
3287 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
3289 #define DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3290 FUNCNAME##_Fake FUNCNAME##_fake; \
3291 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
3292 SAVE_ARG(FUNCNAME, 0); \
3293 SAVE_ARG(FUNCNAME, 1); \
3294 SAVE_ARG(FUNCNAME, 2); \
3295 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3296 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3297 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3298 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3301 HISTORY_DROPPED(FUNCNAME); \
3303 INCREMENT_CALL_COUNT(FUNCNAME); \
3304 REGISTER_CALL(FUNCNAME); \
3305 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3306 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3308 va_start(ap, arg2); \
3309 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
3314 va_start(ap, arg2); \
3315 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
3319 if (FUNCNAME##_fake.custom_fake){ \
3321 va_start(ap, arg2); \
3322 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
3326 DEFINE_RESET_FUNCTION(FUNCNAME) \
3328 #define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3329 DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3330 DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
3333 #define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3334 typedef struct FUNCNAME##_Fake { \
3335 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3336 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3337 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3338 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3339 DECLARE_ALL_FUNC_COMMON \
3340 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3341 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
3342 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
3343 } FUNCNAME##_Fake; \
3344 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3345 void FUNCNAME##_reset(void); \
3346 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
3348 #define DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3349 FUNCNAME##_Fake FUNCNAME##_fake; \
3350 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
3351 SAVE_ARG(FUNCNAME, 0); \
3352 SAVE_ARG(FUNCNAME, 1); \
3353 SAVE_ARG(FUNCNAME, 2); \
3354 SAVE_ARG(FUNCNAME, 3); \
3355 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3356 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3357 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3358 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3359 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3362 HISTORY_DROPPED(FUNCNAME); \
3364 INCREMENT_CALL_COUNT(FUNCNAME); \
3365 REGISTER_CALL(FUNCNAME); \
3366 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3367 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3369 va_start(ap, arg3); \
3370 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
3375 va_start(ap, arg3); \
3376 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
3380 if (FUNCNAME##_fake.custom_fake){ \
3382 va_start(ap, arg3); \
3383 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
3387 DEFINE_RESET_FUNCTION(FUNCNAME) \
3389 #define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3390 DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3391 DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
3394 #define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3395 typedef struct FUNCNAME##_Fake { \
3396 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3397 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3398 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3399 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3400 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3401 DECLARE_ALL_FUNC_COMMON \
3402 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3403 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
3404 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
3405 } FUNCNAME##_Fake; \
3406 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3407 void FUNCNAME##_reset(void); \
3408 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
3410 #define DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3411 FUNCNAME##_Fake FUNCNAME##_fake; \
3412 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
3413 SAVE_ARG(FUNCNAME, 0); \
3414 SAVE_ARG(FUNCNAME, 1); \
3415 SAVE_ARG(FUNCNAME, 2); \
3416 SAVE_ARG(FUNCNAME, 3); \
3417 SAVE_ARG(FUNCNAME, 4); \
3418 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3419 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3420 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3421 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3422 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3423 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3426 HISTORY_DROPPED(FUNCNAME); \
3428 INCREMENT_CALL_COUNT(FUNCNAME); \
3429 REGISTER_CALL(FUNCNAME); \
3430 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3431 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3433 va_start(ap, arg4); \
3434 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
3439 va_start(ap, arg4); \
3440 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
3444 if (FUNCNAME##_fake.custom_fake){ \
3446 va_start(ap, arg4); \
3447 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
3451 DEFINE_RESET_FUNCTION(FUNCNAME) \
3453 #define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3454 DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3455 DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
3458 #define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3459 typedef struct FUNCNAME##_Fake { \
3460 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3461 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3462 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3463 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3464 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3465 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3466 DECLARE_ALL_FUNC_COMMON \
3467 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3468 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
3469 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
3470 } FUNCNAME##_Fake; \
3471 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3472 void FUNCNAME##_reset(void); \
3473 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
3475 #define DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3476 FUNCNAME##_Fake FUNCNAME##_fake; \
3477 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
3478 SAVE_ARG(FUNCNAME, 0); \
3479 SAVE_ARG(FUNCNAME, 1); \
3480 SAVE_ARG(FUNCNAME, 2); \
3481 SAVE_ARG(FUNCNAME, 3); \
3482 SAVE_ARG(FUNCNAME, 4); \
3483 SAVE_ARG(FUNCNAME, 5); \
3484 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3485 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3486 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3487 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3488 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3489 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3490 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3493 HISTORY_DROPPED(FUNCNAME); \
3495 INCREMENT_CALL_COUNT(FUNCNAME); \
3496 REGISTER_CALL(FUNCNAME); \
3497 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3498 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3500 va_start(ap, arg5); \
3501 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
3506 va_start(ap, arg5); \
3507 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
3511 if (FUNCNAME##_fake.custom_fake){ \
3513 va_start(ap, arg5); \
3514 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
3518 DEFINE_RESET_FUNCTION(FUNCNAME) \
3520 #define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3521 DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3522 DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
3525 #define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3526 typedef struct FUNCNAME##_Fake { \
3527 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3528 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3529 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3530 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3531 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3532 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3533 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3534 DECLARE_ALL_FUNC_COMMON \
3535 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3536 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
3537 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
3538 } FUNCNAME##_Fake; \
3539 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3540 void FUNCNAME##_reset(void); \
3541 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
3543 #define DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3544 FUNCNAME##_Fake FUNCNAME##_fake; \
3545 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
3546 SAVE_ARG(FUNCNAME, 0); \
3547 SAVE_ARG(FUNCNAME, 1); \
3548 SAVE_ARG(FUNCNAME, 2); \
3549 SAVE_ARG(FUNCNAME, 3); \
3550 SAVE_ARG(FUNCNAME, 4); \
3551 SAVE_ARG(FUNCNAME, 5); \
3552 SAVE_ARG(FUNCNAME, 6); \
3553 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3554 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3555 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3556 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3557 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3558 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3559 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3560 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3563 HISTORY_DROPPED(FUNCNAME); \
3565 INCREMENT_CALL_COUNT(FUNCNAME); \
3566 REGISTER_CALL(FUNCNAME); \
3567 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3568 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3570 va_start(ap, arg6); \
3571 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
3576 va_start(ap, arg6); \
3577 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
3581 if (FUNCNAME##_fake.custom_fake){ \
3583 va_start(ap, arg6); \
3584 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
3588 DEFINE_RESET_FUNCTION(FUNCNAME) \
3590 #define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3591 DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3592 DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
3595 #define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3596 typedef struct FUNCNAME##_Fake { \
3597 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3598 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3599 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3600 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3601 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3602 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3603 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3604 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3605 DECLARE_ALL_FUNC_COMMON \
3606 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3607 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
3608 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
3609 } FUNCNAME##_Fake; \
3610 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3611 void FUNCNAME##_reset(void); \
3612 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); \
3614 #define DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3615 FUNCNAME##_Fake FUNCNAME##_fake; \
3616 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
3617 SAVE_ARG(FUNCNAME, 0); \
3618 SAVE_ARG(FUNCNAME, 1); \
3619 SAVE_ARG(FUNCNAME, 2); \
3620 SAVE_ARG(FUNCNAME, 3); \
3621 SAVE_ARG(FUNCNAME, 4); \
3622 SAVE_ARG(FUNCNAME, 5); \
3623 SAVE_ARG(FUNCNAME, 6); \
3624 SAVE_ARG(FUNCNAME, 7); \
3625 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3626 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3627 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3628 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3629 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3630 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3631 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3632 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3633 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3636 HISTORY_DROPPED(FUNCNAME); \
3638 INCREMENT_CALL_COUNT(FUNCNAME); \
3639 REGISTER_CALL(FUNCNAME); \
3640 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3641 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3643 va_start(ap, arg7); \
3644 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
3649 va_start(ap, arg7); \
3650 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
3654 if (FUNCNAME##_fake.custom_fake){ \
3656 va_start(ap, arg7); \
3657 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
3661 DEFINE_RESET_FUNCTION(FUNCNAME) \
3663 #define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3664 DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3665 DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
3668 #define DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3669 typedef struct FUNCNAME##_Fake { \
3670 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3671 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3672 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3673 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3674 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3675 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3676 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3677 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3678 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3679 DECLARE_ALL_FUNC_COMMON \
3680 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3681 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
3682 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
3683 } FUNCNAME##_Fake; \
3684 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3685 void FUNCNAME##_reset(void); \
3686 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); \
3688 #define DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3689 FUNCNAME##_Fake FUNCNAME##_fake; \
3690 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
3691 SAVE_ARG(FUNCNAME, 0); \
3692 SAVE_ARG(FUNCNAME, 1); \
3693 SAVE_ARG(FUNCNAME, 2); \
3694 SAVE_ARG(FUNCNAME, 3); \
3695 SAVE_ARG(FUNCNAME, 4); \
3696 SAVE_ARG(FUNCNAME, 5); \
3697 SAVE_ARG(FUNCNAME, 6); \
3698 SAVE_ARG(FUNCNAME, 7); \
3699 SAVE_ARG(FUNCNAME, 8); \
3700 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3701 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3702 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3703 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3704 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3705 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3706 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3707 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3708 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3709 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3712 HISTORY_DROPPED(FUNCNAME); \
3714 INCREMENT_CALL_COUNT(FUNCNAME); \
3715 REGISTER_CALL(FUNCNAME); \
3716 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3717 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3719 va_start(ap, arg8); \
3720 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
3725 va_start(ap, arg8); \
3726 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
3730 if (FUNCNAME##_fake.custom_fake){ \
3732 va_start(ap, arg8); \
3733 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
3737 DEFINE_RESET_FUNCTION(FUNCNAME) \
3739 #define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3740 DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3741 DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
3744 #define DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3745 typedef struct FUNCNAME##_Fake { \
3746 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3747 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3748 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3749 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3750 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3751 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3752 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3753 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3754 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3755 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3756 DECLARE_ALL_FUNC_COMMON \
3757 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3758 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
3759 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
3760 } FUNCNAME##_Fake; \
3761 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3762 void FUNCNAME##_reset(void); \
3763 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...); \
3765 #define DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3766 FUNCNAME##_Fake FUNCNAME##_fake; \
3767 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
3768 SAVE_ARG(FUNCNAME, 0); \
3769 SAVE_ARG(FUNCNAME, 1); \
3770 SAVE_ARG(FUNCNAME, 2); \
3771 SAVE_ARG(FUNCNAME, 3); \
3772 SAVE_ARG(FUNCNAME, 4); \
3773 SAVE_ARG(FUNCNAME, 5); \
3774 SAVE_ARG(FUNCNAME, 6); \
3775 SAVE_ARG(FUNCNAME, 7); \
3776 SAVE_ARG(FUNCNAME, 8); \
3777 SAVE_ARG(FUNCNAME, 9); \
3778 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3779 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3780 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3781 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3782 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3783 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3784 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3785 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3786 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3787 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3788 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3791 HISTORY_DROPPED(FUNCNAME); \
3793 INCREMENT_CALL_COUNT(FUNCNAME); \
3794 REGISTER_CALL(FUNCNAME); \
3795 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3796 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3798 va_start(ap, arg9); \
3799 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
3804 va_start(ap, arg9); \
3805 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
3809 if (FUNCNAME##_fake.custom_fake){ \
3811 va_start(ap, arg9); \
3812 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
3816 DEFINE_RESET_FUNCTION(FUNCNAME) \
3818 #define FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3819 DECLARE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3820 DEFINE_FAKE_VOID_FUNC11_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
3823 #define DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3824 typedef struct FUNCNAME##_Fake { \
3825 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3826 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3827 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3828 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3829 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3830 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3831 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3832 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3833 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3834 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3835 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3836 DECLARE_ALL_FUNC_COMMON \
3837 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3838 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
3839 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
3840 } FUNCNAME##_Fake; \
3841 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3842 void FUNCNAME##_reset(void); \
3843 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...); \
3845 #define DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3846 FUNCNAME##_Fake FUNCNAME##_fake; \
3847 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
3848 SAVE_ARG(FUNCNAME, 0); \
3849 SAVE_ARG(FUNCNAME, 1); \
3850 SAVE_ARG(FUNCNAME, 2); \
3851 SAVE_ARG(FUNCNAME, 3); \
3852 SAVE_ARG(FUNCNAME, 4); \
3853 SAVE_ARG(FUNCNAME, 5); \
3854 SAVE_ARG(FUNCNAME, 6); \
3855 SAVE_ARG(FUNCNAME, 7); \
3856 SAVE_ARG(FUNCNAME, 8); \
3857 SAVE_ARG(FUNCNAME, 9); \
3858 SAVE_ARG(FUNCNAME, 10); \
3859 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3860 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3861 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3862 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3863 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3864 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3865 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3866 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3867 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3868 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3869 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3870 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3873 HISTORY_DROPPED(FUNCNAME); \
3875 INCREMENT_CALL_COUNT(FUNCNAME); \
3876 REGISTER_CALL(FUNCNAME); \
3877 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3878 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3880 va_start(ap, arg10); \
3881 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
3886 va_start(ap, arg10); \
3887 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
3891 if (FUNCNAME##_fake.custom_fake){ \
3893 va_start(ap, arg10); \
3894 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
3898 DEFINE_RESET_FUNCTION(FUNCNAME) \
3900 #define FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3901 DECLARE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3902 DEFINE_FAKE_VOID_FUNC12_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
3905 #define DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
3906 typedef struct FUNCNAME##_Fake { \
3907 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3908 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3909 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3910 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3911 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3912 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3913 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3914 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
3915 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
3916 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
3917 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
3918 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
3919 DECLARE_ALL_FUNC_COMMON \
3920 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
3921 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
3922 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
3923 } FUNCNAME##_Fake; \
3924 extern FUNCNAME##_Fake FUNCNAME##_fake; \
3925 void FUNCNAME##_reset(void); \
3926 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...); \
3928 #define DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
3929 FUNCNAME##_Fake FUNCNAME##_fake; \
3930 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
3931 SAVE_ARG(FUNCNAME, 0); \
3932 SAVE_ARG(FUNCNAME, 1); \
3933 SAVE_ARG(FUNCNAME, 2); \
3934 SAVE_ARG(FUNCNAME, 3); \
3935 SAVE_ARG(FUNCNAME, 4); \
3936 SAVE_ARG(FUNCNAME, 5); \
3937 SAVE_ARG(FUNCNAME, 6); \
3938 SAVE_ARG(FUNCNAME, 7); \
3939 SAVE_ARG(FUNCNAME, 8); \
3940 SAVE_ARG(FUNCNAME, 9); \
3941 SAVE_ARG(FUNCNAME, 10); \
3942 SAVE_ARG(FUNCNAME, 11); \
3943 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
3944 SAVE_ARG_HISTORY(FUNCNAME, 0); \
3945 SAVE_ARG_HISTORY(FUNCNAME, 1); \
3946 SAVE_ARG_HISTORY(FUNCNAME, 2); \
3947 SAVE_ARG_HISTORY(FUNCNAME, 3); \
3948 SAVE_ARG_HISTORY(FUNCNAME, 4); \
3949 SAVE_ARG_HISTORY(FUNCNAME, 5); \
3950 SAVE_ARG_HISTORY(FUNCNAME, 6); \
3951 SAVE_ARG_HISTORY(FUNCNAME, 7); \
3952 SAVE_ARG_HISTORY(FUNCNAME, 8); \
3953 SAVE_ARG_HISTORY(FUNCNAME, 9); \
3954 SAVE_ARG_HISTORY(FUNCNAME, 10); \
3955 SAVE_ARG_HISTORY(FUNCNAME, 11); \
3958 HISTORY_DROPPED(FUNCNAME); \
3960 INCREMENT_CALL_COUNT(FUNCNAME); \
3961 REGISTER_CALL(FUNCNAME); \
3962 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
3963 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
3965 va_start(ap, arg11); \
3966 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
3971 va_start(ap, arg11); \
3972 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
3976 if (FUNCNAME##_fake.custom_fake){ \
3978 va_start(ap, arg11); \
3979 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
3983 DEFINE_RESET_FUNCTION(FUNCNAME) \
3985 #define FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
3986 DECLARE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
3987 DEFINE_FAKE_VOID_FUNC13_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
3990 #define DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
3991 typedef struct FUNCNAME##_Fake { \
3992 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
3993 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
3994 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
3995 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
3996 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
3997 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
3998 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
3999 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4000 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4001 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4002 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4003 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4004 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4005 DECLARE_ALL_FUNC_COMMON \
4006 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4007 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
4008 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
4009 } FUNCNAME##_Fake; \
4010 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4011 void FUNCNAME##_reset(void); \
4012 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); \
4014 #define DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4015 FUNCNAME##_Fake FUNCNAME##_fake; \
4016 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
4017 SAVE_ARG(FUNCNAME, 0); \
4018 SAVE_ARG(FUNCNAME, 1); \
4019 SAVE_ARG(FUNCNAME, 2); \
4020 SAVE_ARG(FUNCNAME, 3); \
4021 SAVE_ARG(FUNCNAME, 4); \
4022 SAVE_ARG(FUNCNAME, 5); \
4023 SAVE_ARG(FUNCNAME, 6); \
4024 SAVE_ARG(FUNCNAME, 7); \
4025 SAVE_ARG(FUNCNAME, 8); \
4026 SAVE_ARG(FUNCNAME, 9); \
4027 SAVE_ARG(FUNCNAME, 10); \
4028 SAVE_ARG(FUNCNAME, 11); \
4029 SAVE_ARG(FUNCNAME, 12); \
4030 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4031 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4032 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4033 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4034 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4035 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4036 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4037 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4038 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4039 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4040 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4041 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4042 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4043 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4046 HISTORY_DROPPED(FUNCNAME); \
4048 INCREMENT_CALL_COUNT(FUNCNAME); \
4049 REGISTER_CALL(FUNCNAME); \
4050 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4051 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4053 va_start(ap, arg12); \
4054 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
4059 va_start(ap, arg12); \
4060 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
4064 if (FUNCNAME##_fake.custom_fake){ \
4066 va_start(ap, arg12); \
4067 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
4071 DEFINE_RESET_FUNCTION(FUNCNAME) \
4073 #define FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4074 DECLARE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4075 DEFINE_FAKE_VOID_FUNC14_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
4078 #define DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4079 typedef struct FUNCNAME##_Fake { \
4080 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4081 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4082 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4083 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4084 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4085 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4086 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4087 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4088 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4089 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4090 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4091 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4092 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4093 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4094 DECLARE_ALL_FUNC_COMMON \
4095 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4096 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
4097 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
4098 } FUNCNAME##_Fake; \
4099 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4100 void FUNCNAME##_reset(void); \
4101 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); \
4103 #define DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4104 FUNCNAME##_Fake FUNCNAME##_fake; \
4105 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
4106 SAVE_ARG(FUNCNAME, 0); \
4107 SAVE_ARG(FUNCNAME, 1); \
4108 SAVE_ARG(FUNCNAME, 2); \
4109 SAVE_ARG(FUNCNAME, 3); \
4110 SAVE_ARG(FUNCNAME, 4); \
4111 SAVE_ARG(FUNCNAME, 5); \
4112 SAVE_ARG(FUNCNAME, 6); \
4113 SAVE_ARG(FUNCNAME, 7); \
4114 SAVE_ARG(FUNCNAME, 8); \
4115 SAVE_ARG(FUNCNAME, 9); \
4116 SAVE_ARG(FUNCNAME, 10); \
4117 SAVE_ARG(FUNCNAME, 11); \
4118 SAVE_ARG(FUNCNAME, 12); \
4119 SAVE_ARG(FUNCNAME, 13); \
4120 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4121 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4122 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4123 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4124 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4125 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4126 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4127 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4128 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4129 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4130 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4131 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4132 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4133 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4134 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4137 HISTORY_DROPPED(FUNCNAME); \
4139 INCREMENT_CALL_COUNT(FUNCNAME); \
4140 REGISTER_CALL(FUNCNAME); \
4141 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4142 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4144 va_start(ap, arg13); \
4145 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
4150 va_start(ap, arg13); \
4151 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
4155 if (FUNCNAME##_fake.custom_fake){ \
4157 va_start(ap, arg13); \
4158 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
4162 DEFINE_RESET_FUNCTION(FUNCNAME) \
4164 #define FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4165 DECLARE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4166 DEFINE_FAKE_VOID_FUNC15_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
4169 #define DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4170 typedef struct FUNCNAME##_Fake { \
4171 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4172 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4173 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4174 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4175 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4176 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4177 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4178 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4179 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4180 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4181 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4182 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4183 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4184 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4185 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4186 DECLARE_ALL_FUNC_COMMON \
4187 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4188 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
4189 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
4190 } FUNCNAME##_Fake; \
4191 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4192 void FUNCNAME##_reset(void); \
4193 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...); \
4195 #define DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4196 FUNCNAME##_Fake FUNCNAME##_fake; \
4197 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
4198 SAVE_ARG(FUNCNAME, 0); \
4199 SAVE_ARG(FUNCNAME, 1); \
4200 SAVE_ARG(FUNCNAME, 2); \
4201 SAVE_ARG(FUNCNAME, 3); \
4202 SAVE_ARG(FUNCNAME, 4); \
4203 SAVE_ARG(FUNCNAME, 5); \
4204 SAVE_ARG(FUNCNAME, 6); \
4205 SAVE_ARG(FUNCNAME, 7); \
4206 SAVE_ARG(FUNCNAME, 8); \
4207 SAVE_ARG(FUNCNAME, 9); \
4208 SAVE_ARG(FUNCNAME, 10); \
4209 SAVE_ARG(FUNCNAME, 11); \
4210 SAVE_ARG(FUNCNAME, 12); \
4211 SAVE_ARG(FUNCNAME, 13); \
4212 SAVE_ARG(FUNCNAME, 14); \
4213 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4214 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4215 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4216 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4217 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4218 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4219 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4220 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4221 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4222 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4223 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4224 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4225 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4226 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4227 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4228 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4231 HISTORY_DROPPED(FUNCNAME); \
4233 INCREMENT_CALL_COUNT(FUNCNAME); \
4234 REGISTER_CALL(FUNCNAME); \
4235 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4236 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4238 va_start(ap, arg14); \
4239 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
4244 va_start(ap, arg14); \
4245 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
4249 if (FUNCNAME##_fake.custom_fake){ \
4251 va_start(ap, arg14); \
4252 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
4256 DEFINE_RESET_FUNCTION(FUNCNAME) \
4258 #define FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4259 DECLARE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4260 DEFINE_FAKE_VOID_FUNC16_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
4263 #define DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4264 typedef struct FUNCNAME##_Fake { \
4265 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4266 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4267 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4268 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4269 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4270 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4271 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4272 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4273 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4274 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4275 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4276 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4277 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4278 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4279 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4280 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4281 DECLARE_ALL_FUNC_COMMON \
4282 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4283 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
4284 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
4285 } FUNCNAME##_Fake; \
4286 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4287 void FUNCNAME##_reset(void); \
4288 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...); \
4290 #define DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4291 FUNCNAME##_Fake FUNCNAME##_fake; \
4292 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
4293 SAVE_ARG(FUNCNAME, 0); \
4294 SAVE_ARG(FUNCNAME, 1); \
4295 SAVE_ARG(FUNCNAME, 2); \
4296 SAVE_ARG(FUNCNAME, 3); \
4297 SAVE_ARG(FUNCNAME, 4); \
4298 SAVE_ARG(FUNCNAME, 5); \
4299 SAVE_ARG(FUNCNAME, 6); \
4300 SAVE_ARG(FUNCNAME, 7); \
4301 SAVE_ARG(FUNCNAME, 8); \
4302 SAVE_ARG(FUNCNAME, 9); \
4303 SAVE_ARG(FUNCNAME, 10); \
4304 SAVE_ARG(FUNCNAME, 11); \
4305 SAVE_ARG(FUNCNAME, 12); \
4306 SAVE_ARG(FUNCNAME, 13); \
4307 SAVE_ARG(FUNCNAME, 14); \
4308 SAVE_ARG(FUNCNAME, 15); \
4309 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4310 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4311 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4312 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4313 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4314 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4315 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4316 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4317 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4318 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4319 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4320 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4321 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4322 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4323 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4324 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4325 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4328 HISTORY_DROPPED(FUNCNAME); \
4330 INCREMENT_CALL_COUNT(FUNCNAME); \
4331 REGISTER_CALL(FUNCNAME); \
4332 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4333 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4335 va_start(ap, arg15); \
4336 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
4341 va_start(ap, arg15); \
4342 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
4346 if (FUNCNAME##_fake.custom_fake){ \
4348 va_start(ap, arg15); \
4349 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
4353 DEFINE_RESET_FUNCTION(FUNCNAME) \
4355 #define FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4356 DECLARE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4357 DEFINE_FAKE_VOID_FUNC17_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
4360 #define DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4361 typedef struct FUNCNAME##_Fake { \
4362 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4363 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4364 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4365 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4366 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4367 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4368 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4369 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4370 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4371 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4372 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4373 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4374 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4375 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4376 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4377 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4378 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
4379 DECLARE_ALL_FUNC_COMMON \
4380 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4381 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
4382 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
4383 } FUNCNAME##_Fake; \
4384 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4385 void FUNCNAME##_reset(void); \
4386 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); \
4388 #define DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4389 FUNCNAME##_Fake FUNCNAME##_fake; \
4390 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
4391 SAVE_ARG(FUNCNAME, 0); \
4392 SAVE_ARG(FUNCNAME, 1); \
4393 SAVE_ARG(FUNCNAME, 2); \
4394 SAVE_ARG(FUNCNAME, 3); \
4395 SAVE_ARG(FUNCNAME, 4); \
4396 SAVE_ARG(FUNCNAME, 5); \
4397 SAVE_ARG(FUNCNAME, 6); \
4398 SAVE_ARG(FUNCNAME, 7); \
4399 SAVE_ARG(FUNCNAME, 8); \
4400 SAVE_ARG(FUNCNAME, 9); \
4401 SAVE_ARG(FUNCNAME, 10); \
4402 SAVE_ARG(FUNCNAME, 11); \
4403 SAVE_ARG(FUNCNAME, 12); \
4404 SAVE_ARG(FUNCNAME, 13); \
4405 SAVE_ARG(FUNCNAME, 14); \
4406 SAVE_ARG(FUNCNAME, 15); \
4407 SAVE_ARG(FUNCNAME, 16); \
4408 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4409 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4410 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4411 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4412 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4413 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4414 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4415 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4416 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4417 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4418 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4419 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4420 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4421 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4422 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4423 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4424 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4425 SAVE_ARG_HISTORY(FUNCNAME, 16); \
4428 HISTORY_DROPPED(FUNCNAME); \
4430 INCREMENT_CALL_COUNT(FUNCNAME); \
4431 REGISTER_CALL(FUNCNAME); \
4432 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4433 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4435 va_start(ap, arg16); \
4436 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
4441 va_start(ap, arg16); \
4442 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
4446 if (FUNCNAME##_fake.custom_fake){ \
4448 va_start(ap, arg16); \
4449 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
4453 DEFINE_RESET_FUNCTION(FUNCNAME) \
4455 #define FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4456 DECLARE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4457 DEFINE_FAKE_VOID_FUNC18_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
4460 #define DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4461 typedef struct FUNCNAME##_Fake { \
4462 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4463 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4464 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4465 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4466 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4467 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4468 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4469 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4470 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4471 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4472 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4473 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4474 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4475 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4476 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4477 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4478 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
4479 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
4480 DECLARE_ALL_FUNC_COMMON \
4481 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4482 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
4483 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
4484 } FUNCNAME##_Fake; \
4485 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4486 void FUNCNAME##_reset(void); \
4487 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); \
4489 #define DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4490 FUNCNAME##_Fake FUNCNAME##_fake; \
4491 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
4492 SAVE_ARG(FUNCNAME, 0); \
4493 SAVE_ARG(FUNCNAME, 1); \
4494 SAVE_ARG(FUNCNAME, 2); \
4495 SAVE_ARG(FUNCNAME, 3); \
4496 SAVE_ARG(FUNCNAME, 4); \
4497 SAVE_ARG(FUNCNAME, 5); \
4498 SAVE_ARG(FUNCNAME, 6); \
4499 SAVE_ARG(FUNCNAME, 7); \
4500 SAVE_ARG(FUNCNAME, 8); \
4501 SAVE_ARG(FUNCNAME, 9); \
4502 SAVE_ARG(FUNCNAME, 10); \
4503 SAVE_ARG(FUNCNAME, 11); \
4504 SAVE_ARG(FUNCNAME, 12); \
4505 SAVE_ARG(FUNCNAME, 13); \
4506 SAVE_ARG(FUNCNAME, 14); \
4507 SAVE_ARG(FUNCNAME, 15); \
4508 SAVE_ARG(FUNCNAME, 16); \
4509 SAVE_ARG(FUNCNAME, 17); \
4510 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4511 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4512 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4513 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4514 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4515 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4516 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4517 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4518 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4519 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4520 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4521 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4522 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4523 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4524 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4525 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4526 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4527 SAVE_ARG_HISTORY(FUNCNAME, 16); \
4528 SAVE_ARG_HISTORY(FUNCNAME, 17); \
4531 HISTORY_DROPPED(FUNCNAME); \
4533 INCREMENT_CALL_COUNT(FUNCNAME); \
4534 REGISTER_CALL(FUNCNAME); \
4535 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4536 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4538 va_start(ap, arg17); \
4539 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
4544 va_start(ap, arg17); \
4545 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
4549 if (FUNCNAME##_fake.custom_fake){ \
4551 va_start(ap, arg17); \
4552 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
4556 DEFINE_RESET_FUNCTION(FUNCNAME) \
4558 #define FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4559 DECLARE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4560 DEFINE_FAKE_VOID_FUNC19_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
4563 #define DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4564 typedef struct FUNCNAME##_Fake { \
4565 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4566 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4567 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4568 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4569 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4570 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
4571 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
4572 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
4573 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
4574 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
4575 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
4576 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
4577 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
4578 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
4579 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
4580 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
4581 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
4582 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
4583 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
4584 DECLARE_ALL_FUNC_COMMON \
4585 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4586 void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
4587 void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
4588 } FUNCNAME##_Fake; \
4589 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4590 void FUNCNAME##_reset(void); \
4591 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...); \
4593 #define DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4594 FUNCNAME##_Fake FUNCNAME##_fake; \
4595 void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
4596 SAVE_ARG(FUNCNAME, 0); \
4597 SAVE_ARG(FUNCNAME, 1); \
4598 SAVE_ARG(FUNCNAME, 2); \
4599 SAVE_ARG(FUNCNAME, 3); \
4600 SAVE_ARG(FUNCNAME, 4); \
4601 SAVE_ARG(FUNCNAME, 5); \
4602 SAVE_ARG(FUNCNAME, 6); \
4603 SAVE_ARG(FUNCNAME, 7); \
4604 SAVE_ARG(FUNCNAME, 8); \
4605 SAVE_ARG(FUNCNAME, 9); \
4606 SAVE_ARG(FUNCNAME, 10); \
4607 SAVE_ARG(FUNCNAME, 11); \
4608 SAVE_ARG(FUNCNAME, 12); \
4609 SAVE_ARG(FUNCNAME, 13); \
4610 SAVE_ARG(FUNCNAME, 14); \
4611 SAVE_ARG(FUNCNAME, 15); \
4612 SAVE_ARG(FUNCNAME, 16); \
4613 SAVE_ARG(FUNCNAME, 17); \
4614 SAVE_ARG(FUNCNAME, 18); \
4615 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4616 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4617 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4618 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4619 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4620 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4621 SAVE_ARG_HISTORY(FUNCNAME, 5); \
4622 SAVE_ARG_HISTORY(FUNCNAME, 6); \
4623 SAVE_ARG_HISTORY(FUNCNAME, 7); \
4624 SAVE_ARG_HISTORY(FUNCNAME, 8); \
4625 SAVE_ARG_HISTORY(FUNCNAME, 9); \
4626 SAVE_ARG_HISTORY(FUNCNAME, 10); \
4627 SAVE_ARG_HISTORY(FUNCNAME, 11); \
4628 SAVE_ARG_HISTORY(FUNCNAME, 12); \
4629 SAVE_ARG_HISTORY(FUNCNAME, 13); \
4630 SAVE_ARG_HISTORY(FUNCNAME, 14); \
4631 SAVE_ARG_HISTORY(FUNCNAME, 15); \
4632 SAVE_ARG_HISTORY(FUNCNAME, 16); \
4633 SAVE_ARG_HISTORY(FUNCNAME, 17); \
4634 SAVE_ARG_HISTORY(FUNCNAME, 18); \
4637 HISTORY_DROPPED(FUNCNAME); \
4639 INCREMENT_CALL_COUNT(FUNCNAME); \
4640 REGISTER_CALL(FUNCNAME); \
4641 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4642 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4644 va_start(ap, arg18); \
4645 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
4650 va_start(ap, arg18); \
4651 FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
4655 if (FUNCNAME##_fake.custom_fake){ \
4657 va_start(ap, arg18); \
4658 FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
4662 DEFINE_RESET_FUNCTION(FUNCNAME) \
4664 #define FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4665 DECLARE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4666 DEFINE_FAKE_VOID_FUNC20_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
4669 #define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4670 typedef struct FUNCNAME##_Fake { \
4671 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4672 DECLARE_ALL_FUNC_COMMON \
4673 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4674 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4675 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4676 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
4677 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
4678 } FUNCNAME##_Fake; \
4679 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4680 void FUNCNAME##_reset(void); \
4681 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...); \
4683 #define DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4684 FUNCNAME##_Fake FUNCNAME##_fake; \
4685 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...){ \
4686 SAVE_ARG(FUNCNAME, 0); \
4687 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4688 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4691 HISTORY_DROPPED(FUNCNAME); \
4693 INCREMENT_CALL_COUNT(FUNCNAME); \
4694 REGISTER_CALL(FUNCNAME); \
4695 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4696 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4698 va_start(ap, arg0); \
4699 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
4700 SAVE_RET_HISTORY(FUNCNAME, ret); \
4706 va_start(ap, arg0); \
4707 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
4708 SAVE_RET_HISTORY(FUNCNAME, ret); \
4711 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
4714 if (FUNCNAME##_fake.custom_fake){ \
4717 va_start(ap, arg0); \
4718 ret = FUNCNAME##_fake.custom_fake(arg0, ap); \
4720 SAVE_RET_HISTORY(FUNCNAME, ret); \
4723 RETURN_FAKE_RESULT(FUNCNAME) \
4725 DEFINE_RESET_FUNCTION(FUNCNAME) \
4727 #define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4728 DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4729 DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
4732 #define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4733 typedef struct FUNCNAME##_Fake { \
4734 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4735 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4736 DECLARE_ALL_FUNC_COMMON \
4737 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4738 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4739 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4740 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
4741 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
4742 } FUNCNAME##_Fake; \
4743 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4744 void FUNCNAME##_reset(void); \
4745 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
4747 #define DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4748 FUNCNAME##_Fake FUNCNAME##_fake; \
4749 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
4750 SAVE_ARG(FUNCNAME, 0); \
4751 SAVE_ARG(FUNCNAME, 1); \
4752 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4753 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4754 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4757 HISTORY_DROPPED(FUNCNAME); \
4759 INCREMENT_CALL_COUNT(FUNCNAME); \
4760 REGISTER_CALL(FUNCNAME); \
4761 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4762 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4764 va_start(ap, arg1); \
4765 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
4766 SAVE_RET_HISTORY(FUNCNAME, ret); \
4772 va_start(ap, arg1); \
4773 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
4774 SAVE_RET_HISTORY(FUNCNAME, ret); \
4777 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
4780 if (FUNCNAME##_fake.custom_fake){ \
4783 va_start(ap, arg1); \
4784 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
4786 SAVE_RET_HISTORY(FUNCNAME, ret); \
4789 RETURN_FAKE_RESULT(FUNCNAME) \
4791 DEFINE_RESET_FUNCTION(FUNCNAME) \
4793 #define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4794 DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4795 DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
4798 #define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4799 typedef struct FUNCNAME##_Fake { \
4800 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4801 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4802 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4803 DECLARE_ALL_FUNC_COMMON \
4804 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4805 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4806 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4807 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
4808 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
4809 } FUNCNAME##_Fake; \
4810 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4811 void FUNCNAME##_reset(void); \
4812 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
4814 #define DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4815 FUNCNAME##_Fake FUNCNAME##_fake; \
4816 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
4817 SAVE_ARG(FUNCNAME, 0); \
4818 SAVE_ARG(FUNCNAME, 1); \
4819 SAVE_ARG(FUNCNAME, 2); \
4820 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4821 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4822 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4823 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4826 HISTORY_DROPPED(FUNCNAME); \
4828 INCREMENT_CALL_COUNT(FUNCNAME); \
4829 REGISTER_CALL(FUNCNAME); \
4830 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4831 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4833 va_start(ap, arg2); \
4834 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
4835 SAVE_RET_HISTORY(FUNCNAME, ret); \
4841 va_start(ap, arg2); \
4842 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
4843 SAVE_RET_HISTORY(FUNCNAME, ret); \
4846 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
4849 if (FUNCNAME##_fake.custom_fake){ \
4852 va_start(ap, arg2); \
4853 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
4855 SAVE_RET_HISTORY(FUNCNAME, ret); \
4858 RETURN_FAKE_RESULT(FUNCNAME) \
4860 DEFINE_RESET_FUNCTION(FUNCNAME) \
4862 #define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4863 DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4864 DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
4867 #define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
4868 typedef struct FUNCNAME##_Fake { \
4869 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4870 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4871 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4872 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4873 DECLARE_ALL_FUNC_COMMON \
4874 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4875 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4876 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4877 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
4878 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
4879 } FUNCNAME##_Fake; \
4880 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4881 void FUNCNAME##_reset(void); \
4882 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
4884 #define DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
4885 FUNCNAME##_Fake FUNCNAME##_fake; \
4886 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
4887 SAVE_ARG(FUNCNAME, 0); \
4888 SAVE_ARG(FUNCNAME, 1); \
4889 SAVE_ARG(FUNCNAME, 2); \
4890 SAVE_ARG(FUNCNAME, 3); \
4891 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4892 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4893 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4894 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4895 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4898 HISTORY_DROPPED(FUNCNAME); \
4900 INCREMENT_CALL_COUNT(FUNCNAME); \
4901 REGISTER_CALL(FUNCNAME); \
4902 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4903 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4905 va_start(ap, arg3); \
4906 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
4907 SAVE_RET_HISTORY(FUNCNAME, ret); \
4913 va_start(ap, arg3); \
4914 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
4915 SAVE_RET_HISTORY(FUNCNAME, ret); \
4918 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
4921 if (FUNCNAME##_fake.custom_fake){ \
4924 va_start(ap, arg3); \
4925 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
4927 SAVE_RET_HISTORY(FUNCNAME, ret); \
4930 RETURN_FAKE_RESULT(FUNCNAME) \
4932 DEFINE_RESET_FUNCTION(FUNCNAME) \
4934 #define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
4935 DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
4936 DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
4939 #define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
4940 typedef struct FUNCNAME##_Fake { \
4941 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
4942 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
4943 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
4944 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
4945 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
4946 DECLARE_ALL_FUNC_COMMON \
4947 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
4948 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
4949 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
4950 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
4951 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
4952 } FUNCNAME##_Fake; \
4953 extern FUNCNAME##_Fake FUNCNAME##_fake; \
4954 void FUNCNAME##_reset(void); \
4955 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
4957 #define DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
4958 FUNCNAME##_Fake FUNCNAME##_fake; \
4959 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
4960 SAVE_ARG(FUNCNAME, 0); \
4961 SAVE_ARG(FUNCNAME, 1); \
4962 SAVE_ARG(FUNCNAME, 2); \
4963 SAVE_ARG(FUNCNAME, 3); \
4964 SAVE_ARG(FUNCNAME, 4); \
4965 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
4966 SAVE_ARG_HISTORY(FUNCNAME, 0); \
4967 SAVE_ARG_HISTORY(FUNCNAME, 1); \
4968 SAVE_ARG_HISTORY(FUNCNAME, 2); \
4969 SAVE_ARG_HISTORY(FUNCNAME, 3); \
4970 SAVE_ARG_HISTORY(FUNCNAME, 4); \
4973 HISTORY_DROPPED(FUNCNAME); \
4975 INCREMENT_CALL_COUNT(FUNCNAME); \
4976 REGISTER_CALL(FUNCNAME); \
4977 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
4978 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
4980 va_start(ap, arg4); \
4981 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
4982 SAVE_RET_HISTORY(FUNCNAME, ret); \
4988 va_start(ap, arg4); \
4989 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
4990 SAVE_RET_HISTORY(FUNCNAME, ret); \
4993 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
4996 if (FUNCNAME##_fake.custom_fake){ \
4999 va_start(ap, arg4); \
5000 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
5002 SAVE_RET_HISTORY(FUNCNAME, ret); \
5005 RETURN_FAKE_RESULT(FUNCNAME) \
5007 DEFINE_RESET_FUNCTION(FUNCNAME) \
5009 #define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5010 DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5011 DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
5014 #define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5015 typedef struct FUNCNAME##_Fake { \
5016 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5017 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5018 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5019 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5020 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5021 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5022 DECLARE_ALL_FUNC_COMMON \
5023 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5024 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5025 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5026 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
5027 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
5028 } FUNCNAME##_Fake; \
5029 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5030 void FUNCNAME##_reset(void); \
5031 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
5033 #define DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5034 FUNCNAME##_Fake FUNCNAME##_fake; \
5035 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
5036 SAVE_ARG(FUNCNAME, 0); \
5037 SAVE_ARG(FUNCNAME, 1); \
5038 SAVE_ARG(FUNCNAME, 2); \
5039 SAVE_ARG(FUNCNAME, 3); \
5040 SAVE_ARG(FUNCNAME, 4); \
5041 SAVE_ARG(FUNCNAME, 5); \
5042 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5043 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5044 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5045 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5046 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5047 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5048 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5051 HISTORY_DROPPED(FUNCNAME); \
5053 INCREMENT_CALL_COUNT(FUNCNAME); \
5054 REGISTER_CALL(FUNCNAME); \
5055 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5056 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5058 va_start(ap, arg5); \
5059 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5060 SAVE_RET_HISTORY(FUNCNAME, ret); \
5066 va_start(ap, arg5); \
5067 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5068 SAVE_RET_HISTORY(FUNCNAME, ret); \
5071 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5074 if (FUNCNAME##_fake.custom_fake){ \
5077 va_start(ap, arg5); \
5078 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
5080 SAVE_RET_HISTORY(FUNCNAME, ret); \
5083 RETURN_FAKE_RESULT(FUNCNAME) \
5085 DEFINE_RESET_FUNCTION(FUNCNAME) \
5087 #define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5088 DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5089 DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
5092 #define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5093 typedef struct FUNCNAME##_Fake { \
5094 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5095 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5096 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5097 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5098 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5099 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5100 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5101 DECLARE_ALL_FUNC_COMMON \
5102 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5103 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5104 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5105 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
5106 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, va_list ap); \
5107 } FUNCNAME##_Fake; \
5108 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5109 void FUNCNAME##_reset(void); \
5110 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
5112 #define DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5113 FUNCNAME##_Fake FUNCNAME##_fake; \
5114 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
5115 SAVE_ARG(FUNCNAME, 0); \
5116 SAVE_ARG(FUNCNAME, 1); \
5117 SAVE_ARG(FUNCNAME, 2); \
5118 SAVE_ARG(FUNCNAME, 3); \
5119 SAVE_ARG(FUNCNAME, 4); \
5120 SAVE_ARG(FUNCNAME, 5); \
5121 SAVE_ARG(FUNCNAME, 6); \
5122 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5123 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5124 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5125 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5126 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5127 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5128 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5129 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5132 HISTORY_DROPPED(FUNCNAME); \
5134 INCREMENT_CALL_COUNT(FUNCNAME); \
5135 REGISTER_CALL(FUNCNAME); \
5136 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5137 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5139 va_start(ap, arg6); \
5140 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5141 SAVE_RET_HISTORY(FUNCNAME, ret); \
5147 va_start(ap, arg6); \
5148 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5149 SAVE_RET_HISTORY(FUNCNAME, ret); \
5152 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5155 if (FUNCNAME##_fake.custom_fake){ \
5158 va_start(ap, arg6); \
5159 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
5161 SAVE_RET_HISTORY(FUNCNAME, ret); \
5164 RETURN_FAKE_RESULT(FUNCNAME) \
5166 DEFINE_RESET_FUNCTION(FUNCNAME) \
5168 #define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5169 DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5170 DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
5173 #define DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5174 typedef struct FUNCNAME##_Fake { \
5175 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5176 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5177 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5178 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5179 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5180 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5181 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5182 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5183 DECLARE_ALL_FUNC_COMMON \
5184 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5185 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5186 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5187 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
5188 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, va_list ap); \
5189 } FUNCNAME##_Fake; \
5190 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5191 void FUNCNAME##_reset(void); \
5192 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...); \
5194 #define DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5195 FUNCNAME##_Fake FUNCNAME##_fake; \
5196 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ...){ \
5197 SAVE_ARG(FUNCNAME, 0); \
5198 SAVE_ARG(FUNCNAME, 1); \
5199 SAVE_ARG(FUNCNAME, 2); \
5200 SAVE_ARG(FUNCNAME, 3); \
5201 SAVE_ARG(FUNCNAME, 4); \
5202 SAVE_ARG(FUNCNAME, 5); \
5203 SAVE_ARG(FUNCNAME, 6); \
5204 SAVE_ARG(FUNCNAME, 7); \
5205 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5206 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5207 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5208 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5209 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5210 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5211 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5212 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5213 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5216 HISTORY_DROPPED(FUNCNAME); \
5218 INCREMENT_CALL_COUNT(FUNCNAME); \
5219 REGISTER_CALL(FUNCNAME); \
5220 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5221 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5223 va_start(ap, arg7); \
5224 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5225 SAVE_RET_HISTORY(FUNCNAME, ret); \
5231 va_start(ap, arg7); \
5232 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5233 SAVE_RET_HISTORY(FUNCNAME, ret); \
5236 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5239 if (FUNCNAME##_fake.custom_fake){ \
5242 va_start(ap, arg7); \
5243 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
5245 SAVE_RET_HISTORY(FUNCNAME, ret); \
5248 RETURN_FAKE_RESULT(FUNCNAME) \
5250 DEFINE_RESET_FUNCTION(FUNCNAME) \
5252 #define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5253 DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5254 DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
5257 #define DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5258 typedef struct FUNCNAME##_Fake { \
5259 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5260 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5261 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5262 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5263 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5264 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5265 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5266 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5267 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5268 DECLARE_ALL_FUNC_COMMON \
5269 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5270 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5271 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5272 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
5273 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, va_list ap); \
5274 } FUNCNAME##_Fake; \
5275 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5276 void FUNCNAME##_reset(void); \
5277 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...); \
5279 #define DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5280 FUNCNAME##_Fake FUNCNAME##_fake; \
5281 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ...){ \
5282 SAVE_ARG(FUNCNAME, 0); \
5283 SAVE_ARG(FUNCNAME, 1); \
5284 SAVE_ARG(FUNCNAME, 2); \
5285 SAVE_ARG(FUNCNAME, 3); \
5286 SAVE_ARG(FUNCNAME, 4); \
5287 SAVE_ARG(FUNCNAME, 5); \
5288 SAVE_ARG(FUNCNAME, 6); \
5289 SAVE_ARG(FUNCNAME, 7); \
5290 SAVE_ARG(FUNCNAME, 8); \
5291 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5292 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5293 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5294 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5295 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5296 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5297 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5298 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5299 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5300 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5303 HISTORY_DROPPED(FUNCNAME); \
5305 INCREMENT_CALL_COUNT(FUNCNAME); \
5306 REGISTER_CALL(FUNCNAME); \
5307 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5308 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5310 va_start(ap, arg8); \
5311 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5312 SAVE_RET_HISTORY(FUNCNAME, ret); \
5318 va_start(ap, arg8); \
5319 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5320 SAVE_RET_HISTORY(FUNCNAME, ret); \
5323 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5326 if (FUNCNAME##_fake.custom_fake){ \
5329 va_start(ap, arg8); \
5330 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
5332 SAVE_RET_HISTORY(FUNCNAME, ret); \
5335 RETURN_FAKE_RESULT(FUNCNAME) \
5337 DEFINE_RESET_FUNCTION(FUNCNAME) \
5339 #define FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5340 DECLARE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5341 DEFINE_FAKE_VALUE_FUNC10_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
5344 #define DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5345 typedef struct FUNCNAME##_Fake { \
5346 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5347 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5348 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5349 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5350 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5351 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5352 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5353 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5354 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5355 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5356 DECLARE_ALL_FUNC_COMMON \
5357 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5358 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5359 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5360 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
5361 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, va_list ap); \
5362 } FUNCNAME##_Fake; \
5363 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5364 void FUNCNAME##_reset(void); \
5365 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...); \
5367 #define DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5368 FUNCNAME##_Fake FUNCNAME##_fake; \
5369 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ...){ \
5370 SAVE_ARG(FUNCNAME, 0); \
5371 SAVE_ARG(FUNCNAME, 1); \
5372 SAVE_ARG(FUNCNAME, 2); \
5373 SAVE_ARG(FUNCNAME, 3); \
5374 SAVE_ARG(FUNCNAME, 4); \
5375 SAVE_ARG(FUNCNAME, 5); \
5376 SAVE_ARG(FUNCNAME, 6); \
5377 SAVE_ARG(FUNCNAME, 7); \
5378 SAVE_ARG(FUNCNAME, 8); \
5379 SAVE_ARG(FUNCNAME, 9); \
5380 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5381 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5382 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5383 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5384 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5385 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5386 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5387 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5388 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5389 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5390 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5393 HISTORY_DROPPED(FUNCNAME); \
5395 INCREMENT_CALL_COUNT(FUNCNAME); \
5396 REGISTER_CALL(FUNCNAME); \
5397 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5398 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5400 va_start(ap, arg9); \
5401 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5402 SAVE_RET_HISTORY(FUNCNAME, ret); \
5408 va_start(ap, arg9); \
5409 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5410 SAVE_RET_HISTORY(FUNCNAME, ret); \
5413 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5416 if (FUNCNAME##_fake.custom_fake){ \
5419 va_start(ap, arg9); \
5420 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
5422 SAVE_RET_HISTORY(FUNCNAME, ret); \
5425 RETURN_FAKE_RESULT(FUNCNAME) \
5427 DEFINE_RESET_FUNCTION(FUNCNAME) \
5429 #define FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5430 DECLARE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5431 DEFINE_FAKE_VALUE_FUNC11_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ...) \
5434 #define DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5435 typedef struct FUNCNAME##_Fake { \
5436 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5437 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5438 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5439 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5440 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5441 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5442 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5443 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5444 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5445 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5446 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5447 DECLARE_ALL_FUNC_COMMON \
5448 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5449 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5450 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5451 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
5452 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, va_list ap); \
5453 } FUNCNAME##_Fake; \
5454 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5455 void FUNCNAME##_reset(void); \
5456 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...); \
5458 #define DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5459 FUNCNAME##_Fake FUNCNAME##_fake; \
5460 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ...){ \
5461 SAVE_ARG(FUNCNAME, 0); \
5462 SAVE_ARG(FUNCNAME, 1); \
5463 SAVE_ARG(FUNCNAME, 2); \
5464 SAVE_ARG(FUNCNAME, 3); \
5465 SAVE_ARG(FUNCNAME, 4); \
5466 SAVE_ARG(FUNCNAME, 5); \
5467 SAVE_ARG(FUNCNAME, 6); \
5468 SAVE_ARG(FUNCNAME, 7); \
5469 SAVE_ARG(FUNCNAME, 8); \
5470 SAVE_ARG(FUNCNAME, 9); \
5471 SAVE_ARG(FUNCNAME, 10); \
5472 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5473 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5474 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5475 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5476 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5477 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5478 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5479 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5480 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5481 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5482 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5483 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5486 HISTORY_DROPPED(FUNCNAME); \
5488 INCREMENT_CALL_COUNT(FUNCNAME); \
5489 REGISTER_CALL(FUNCNAME); \
5490 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5491 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5493 va_start(ap, arg10); \
5494 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5495 SAVE_RET_HISTORY(FUNCNAME, ret); \
5501 va_start(ap, arg10); \
5502 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5503 SAVE_RET_HISTORY(FUNCNAME, ret); \
5506 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5509 if (FUNCNAME##_fake.custom_fake){ \
5512 va_start(ap, arg10); \
5513 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
5515 SAVE_RET_HISTORY(FUNCNAME, ret); \
5518 RETURN_FAKE_RESULT(FUNCNAME) \
5520 DEFINE_RESET_FUNCTION(FUNCNAME) \
5522 #define FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5523 DECLARE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5524 DEFINE_FAKE_VALUE_FUNC12_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ...) \
5527 #define DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5528 typedef struct FUNCNAME##_Fake { \
5529 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5530 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5531 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5532 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5533 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5534 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5535 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5536 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5537 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5538 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5539 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5540 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5541 DECLARE_ALL_FUNC_COMMON \
5542 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5543 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5544 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5545 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
5546 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, va_list ap); \
5547 } FUNCNAME##_Fake; \
5548 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5549 void FUNCNAME##_reset(void); \
5550 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...); \
5552 #define DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5553 FUNCNAME##_Fake FUNCNAME##_fake; \
5554 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ...){ \
5555 SAVE_ARG(FUNCNAME, 0); \
5556 SAVE_ARG(FUNCNAME, 1); \
5557 SAVE_ARG(FUNCNAME, 2); \
5558 SAVE_ARG(FUNCNAME, 3); \
5559 SAVE_ARG(FUNCNAME, 4); \
5560 SAVE_ARG(FUNCNAME, 5); \
5561 SAVE_ARG(FUNCNAME, 6); \
5562 SAVE_ARG(FUNCNAME, 7); \
5563 SAVE_ARG(FUNCNAME, 8); \
5564 SAVE_ARG(FUNCNAME, 9); \
5565 SAVE_ARG(FUNCNAME, 10); \
5566 SAVE_ARG(FUNCNAME, 11); \
5567 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5568 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5569 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5570 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5571 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5572 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5573 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5574 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5575 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5576 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5577 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5578 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5579 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5582 HISTORY_DROPPED(FUNCNAME); \
5584 INCREMENT_CALL_COUNT(FUNCNAME); \
5585 REGISTER_CALL(FUNCNAME); \
5586 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5587 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5589 va_start(ap, arg11); \
5590 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5591 SAVE_RET_HISTORY(FUNCNAME, ret); \
5597 va_start(ap, arg11); \
5598 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5599 SAVE_RET_HISTORY(FUNCNAME, ret); \
5602 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5605 if (FUNCNAME##_fake.custom_fake){ \
5608 va_start(ap, arg11); \
5609 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
5611 SAVE_RET_HISTORY(FUNCNAME, ret); \
5614 RETURN_FAKE_RESULT(FUNCNAME) \
5616 DEFINE_RESET_FUNCTION(FUNCNAME) \
5618 #define FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5619 DECLARE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5620 DEFINE_FAKE_VALUE_FUNC13_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ...) \
5623 #define DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5624 typedef struct FUNCNAME##_Fake { \
5625 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5626 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5627 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5628 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5629 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5630 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5631 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5632 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5633 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5634 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5635 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5636 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5637 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5638 DECLARE_ALL_FUNC_COMMON \
5639 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5640 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5641 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5642 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
5643 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, va_list ap); \
5644 } FUNCNAME##_Fake; \
5645 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5646 void FUNCNAME##_reset(void); \
5647 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...); \
5649 #define DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5650 FUNCNAME##_Fake FUNCNAME##_fake; \
5651 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ...){ \
5652 SAVE_ARG(FUNCNAME, 0); \
5653 SAVE_ARG(FUNCNAME, 1); \
5654 SAVE_ARG(FUNCNAME, 2); \
5655 SAVE_ARG(FUNCNAME, 3); \
5656 SAVE_ARG(FUNCNAME, 4); \
5657 SAVE_ARG(FUNCNAME, 5); \
5658 SAVE_ARG(FUNCNAME, 6); \
5659 SAVE_ARG(FUNCNAME, 7); \
5660 SAVE_ARG(FUNCNAME, 8); \
5661 SAVE_ARG(FUNCNAME, 9); \
5662 SAVE_ARG(FUNCNAME, 10); \
5663 SAVE_ARG(FUNCNAME, 11); \
5664 SAVE_ARG(FUNCNAME, 12); \
5665 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5666 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5667 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5668 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5669 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5670 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5671 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5672 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5673 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5674 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5675 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5676 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5677 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5678 SAVE_ARG_HISTORY(FUNCNAME, 12); \
5681 HISTORY_DROPPED(FUNCNAME); \
5683 INCREMENT_CALL_COUNT(FUNCNAME); \
5684 REGISTER_CALL(FUNCNAME); \
5685 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5686 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5688 va_start(ap, arg12); \
5689 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5690 SAVE_RET_HISTORY(FUNCNAME, ret); \
5696 va_start(ap, arg12); \
5697 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5698 SAVE_RET_HISTORY(FUNCNAME, ret); \
5701 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5704 if (FUNCNAME##_fake.custom_fake){ \
5707 va_start(ap, arg12); \
5708 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
5710 SAVE_RET_HISTORY(FUNCNAME, ret); \
5713 RETURN_FAKE_RESULT(FUNCNAME) \
5715 DEFINE_RESET_FUNCTION(FUNCNAME) \
5717 #define FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5718 DECLARE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5719 DEFINE_FAKE_VALUE_FUNC14_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ...) \
5722 #define DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5723 typedef struct FUNCNAME##_Fake { \
5724 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5725 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5726 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5727 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5728 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5729 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5730 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5731 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5732 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5733 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5734 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5735 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5736 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5737 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
5738 DECLARE_ALL_FUNC_COMMON \
5739 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5740 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5741 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5742 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
5743 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, va_list ap); \
5744 } FUNCNAME##_Fake; \
5745 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5746 void FUNCNAME##_reset(void); \
5747 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...); \
5749 #define DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5750 FUNCNAME##_Fake FUNCNAME##_fake; \
5751 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ...){ \
5752 SAVE_ARG(FUNCNAME, 0); \
5753 SAVE_ARG(FUNCNAME, 1); \
5754 SAVE_ARG(FUNCNAME, 2); \
5755 SAVE_ARG(FUNCNAME, 3); \
5756 SAVE_ARG(FUNCNAME, 4); \
5757 SAVE_ARG(FUNCNAME, 5); \
5758 SAVE_ARG(FUNCNAME, 6); \
5759 SAVE_ARG(FUNCNAME, 7); \
5760 SAVE_ARG(FUNCNAME, 8); \
5761 SAVE_ARG(FUNCNAME, 9); \
5762 SAVE_ARG(FUNCNAME, 10); \
5763 SAVE_ARG(FUNCNAME, 11); \
5764 SAVE_ARG(FUNCNAME, 12); \
5765 SAVE_ARG(FUNCNAME, 13); \
5766 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5767 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5768 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5769 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5770 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5771 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5772 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5773 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5774 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5775 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5776 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5777 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5778 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5779 SAVE_ARG_HISTORY(FUNCNAME, 12); \
5780 SAVE_ARG_HISTORY(FUNCNAME, 13); \
5783 HISTORY_DROPPED(FUNCNAME); \
5785 INCREMENT_CALL_COUNT(FUNCNAME); \
5786 REGISTER_CALL(FUNCNAME); \
5787 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5788 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5790 va_start(ap, arg13); \
5791 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5792 SAVE_RET_HISTORY(FUNCNAME, ret); \
5798 va_start(ap, arg13); \
5799 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5800 SAVE_RET_HISTORY(FUNCNAME, ret); \
5803 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5806 if (FUNCNAME##_fake.custom_fake){ \
5809 va_start(ap, arg13); \
5810 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
5812 SAVE_RET_HISTORY(FUNCNAME, ret); \
5815 RETURN_FAKE_RESULT(FUNCNAME) \
5817 DEFINE_RESET_FUNCTION(FUNCNAME) \
5819 #define FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5820 DECLARE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5821 DEFINE_FAKE_VALUE_FUNC15_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ...) \
5824 #define DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
5825 typedef struct FUNCNAME##_Fake { \
5826 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5827 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5828 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5829 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5830 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5831 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5832 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5833 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5834 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5835 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5836 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5837 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5838 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5839 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
5840 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
5841 DECLARE_ALL_FUNC_COMMON \
5842 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5843 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5844 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5845 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
5846 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, va_list ap); \
5847 } FUNCNAME##_Fake; \
5848 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5849 void FUNCNAME##_reset(void); \
5850 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...); \
5852 #define DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
5853 FUNCNAME##_Fake FUNCNAME##_fake; \
5854 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ...){ \
5855 SAVE_ARG(FUNCNAME, 0); \
5856 SAVE_ARG(FUNCNAME, 1); \
5857 SAVE_ARG(FUNCNAME, 2); \
5858 SAVE_ARG(FUNCNAME, 3); \
5859 SAVE_ARG(FUNCNAME, 4); \
5860 SAVE_ARG(FUNCNAME, 5); \
5861 SAVE_ARG(FUNCNAME, 6); \
5862 SAVE_ARG(FUNCNAME, 7); \
5863 SAVE_ARG(FUNCNAME, 8); \
5864 SAVE_ARG(FUNCNAME, 9); \
5865 SAVE_ARG(FUNCNAME, 10); \
5866 SAVE_ARG(FUNCNAME, 11); \
5867 SAVE_ARG(FUNCNAME, 12); \
5868 SAVE_ARG(FUNCNAME, 13); \
5869 SAVE_ARG(FUNCNAME, 14); \
5870 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5871 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5872 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5873 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5874 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5875 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5876 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5877 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5878 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5879 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5880 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5881 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5882 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5883 SAVE_ARG_HISTORY(FUNCNAME, 12); \
5884 SAVE_ARG_HISTORY(FUNCNAME, 13); \
5885 SAVE_ARG_HISTORY(FUNCNAME, 14); \
5888 HISTORY_DROPPED(FUNCNAME); \
5890 INCREMENT_CALL_COUNT(FUNCNAME); \
5891 REGISTER_CALL(FUNCNAME); \
5892 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
5893 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
5895 va_start(ap, arg14); \
5896 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
5897 SAVE_RET_HISTORY(FUNCNAME, ret); \
5903 va_start(ap, arg14); \
5904 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
5905 SAVE_RET_HISTORY(FUNCNAME, ret); \
5908 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
5911 if (FUNCNAME##_fake.custom_fake){ \
5914 va_start(ap, arg14); \
5915 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
5917 SAVE_RET_HISTORY(FUNCNAME, ret); \
5920 RETURN_FAKE_RESULT(FUNCNAME) \
5922 DEFINE_RESET_FUNCTION(FUNCNAME) \
5924 #define FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
5925 DECLARE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
5926 DEFINE_FAKE_VALUE_FUNC16_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ...) \
5929 #define DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
5930 typedef struct FUNCNAME##_Fake { \
5931 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
5932 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
5933 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
5934 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
5935 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
5936 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
5937 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
5938 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
5939 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
5940 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
5941 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
5942 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
5943 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
5944 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
5945 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
5946 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
5947 DECLARE_ALL_FUNC_COMMON \
5948 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
5949 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
5950 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
5951 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
5952 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, va_list ap); \
5953 } FUNCNAME##_Fake; \
5954 extern FUNCNAME##_Fake FUNCNAME##_fake; \
5955 void FUNCNAME##_reset(void); \
5956 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...); \
5958 #define DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
5959 FUNCNAME##_Fake FUNCNAME##_fake; \
5960 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ...){ \
5961 SAVE_ARG(FUNCNAME, 0); \
5962 SAVE_ARG(FUNCNAME, 1); \
5963 SAVE_ARG(FUNCNAME, 2); \
5964 SAVE_ARG(FUNCNAME, 3); \
5965 SAVE_ARG(FUNCNAME, 4); \
5966 SAVE_ARG(FUNCNAME, 5); \
5967 SAVE_ARG(FUNCNAME, 6); \
5968 SAVE_ARG(FUNCNAME, 7); \
5969 SAVE_ARG(FUNCNAME, 8); \
5970 SAVE_ARG(FUNCNAME, 9); \
5971 SAVE_ARG(FUNCNAME, 10); \
5972 SAVE_ARG(FUNCNAME, 11); \
5973 SAVE_ARG(FUNCNAME, 12); \
5974 SAVE_ARG(FUNCNAME, 13); \
5975 SAVE_ARG(FUNCNAME, 14); \
5976 SAVE_ARG(FUNCNAME, 15); \
5977 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
5978 SAVE_ARG_HISTORY(FUNCNAME, 0); \
5979 SAVE_ARG_HISTORY(FUNCNAME, 1); \
5980 SAVE_ARG_HISTORY(FUNCNAME, 2); \
5981 SAVE_ARG_HISTORY(FUNCNAME, 3); \
5982 SAVE_ARG_HISTORY(FUNCNAME, 4); \
5983 SAVE_ARG_HISTORY(FUNCNAME, 5); \
5984 SAVE_ARG_HISTORY(FUNCNAME, 6); \
5985 SAVE_ARG_HISTORY(FUNCNAME, 7); \
5986 SAVE_ARG_HISTORY(FUNCNAME, 8); \
5987 SAVE_ARG_HISTORY(FUNCNAME, 9); \
5988 SAVE_ARG_HISTORY(FUNCNAME, 10); \
5989 SAVE_ARG_HISTORY(FUNCNAME, 11); \
5990 SAVE_ARG_HISTORY(FUNCNAME, 12); \
5991 SAVE_ARG_HISTORY(FUNCNAME, 13); \
5992 SAVE_ARG_HISTORY(FUNCNAME, 14); \
5993 SAVE_ARG_HISTORY(FUNCNAME, 15); \
5996 HISTORY_DROPPED(FUNCNAME); \
5998 INCREMENT_CALL_COUNT(FUNCNAME); \
5999 REGISTER_CALL(FUNCNAME); \
6000 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
6001 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6003 va_start(ap, arg15); \
6004 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6005 SAVE_RET_HISTORY(FUNCNAME, ret); \
6011 va_start(ap, arg15); \
6012 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6013 SAVE_RET_HISTORY(FUNCNAME, ret); \
6016 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6019 if (FUNCNAME##_fake.custom_fake){ \
6022 va_start(ap, arg15); \
6023 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
6025 SAVE_RET_HISTORY(FUNCNAME, ret); \
6028 RETURN_FAKE_RESULT(FUNCNAME) \
6030 DEFINE_RESET_FUNCTION(FUNCNAME) \
6032 #define FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6033 DECLARE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6034 DEFINE_FAKE_VALUE_FUNC17_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ...) \
6037 #define DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6038 typedef struct FUNCNAME##_Fake { \
6039 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6040 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6041 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6042 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6043 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6044 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6045 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6046 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6047 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6048 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6049 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6050 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6051 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6052 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6053 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6054 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6055 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
6056 DECLARE_ALL_FUNC_COMMON \
6057 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6058 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6059 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6060 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
6061 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, va_list ap); \
6062 } FUNCNAME##_Fake; \
6063 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6064 void FUNCNAME##_reset(void); \
6065 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...); \
6067 #define DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6068 FUNCNAME##_Fake FUNCNAME##_fake; \
6069 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ...){ \
6070 SAVE_ARG(FUNCNAME, 0); \
6071 SAVE_ARG(FUNCNAME, 1); \
6072 SAVE_ARG(FUNCNAME, 2); \
6073 SAVE_ARG(FUNCNAME, 3); \
6074 SAVE_ARG(FUNCNAME, 4); \
6075 SAVE_ARG(FUNCNAME, 5); \
6076 SAVE_ARG(FUNCNAME, 6); \
6077 SAVE_ARG(FUNCNAME, 7); \
6078 SAVE_ARG(FUNCNAME, 8); \
6079 SAVE_ARG(FUNCNAME, 9); \
6080 SAVE_ARG(FUNCNAME, 10); \
6081 SAVE_ARG(FUNCNAME, 11); \
6082 SAVE_ARG(FUNCNAME, 12); \
6083 SAVE_ARG(FUNCNAME, 13); \
6084 SAVE_ARG(FUNCNAME, 14); \
6085 SAVE_ARG(FUNCNAME, 15); \
6086 SAVE_ARG(FUNCNAME, 16); \
6087 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6088 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6089 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6090 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6091 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6092 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6093 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6094 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6095 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6096 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6097 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6098 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6099 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6100 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6101 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6102 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6103 SAVE_ARG_HISTORY(FUNCNAME, 15); \
6104 SAVE_ARG_HISTORY(FUNCNAME, 16); \
6107 HISTORY_DROPPED(FUNCNAME); \
6109 INCREMENT_CALL_COUNT(FUNCNAME); \
6110 REGISTER_CALL(FUNCNAME); \
6111 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
6112 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6114 va_start(ap, arg16); \
6115 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6116 SAVE_RET_HISTORY(FUNCNAME, ret); \
6122 va_start(ap, arg16); \
6123 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6124 SAVE_RET_HISTORY(FUNCNAME, ret); \
6127 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6130 if (FUNCNAME##_fake.custom_fake){ \
6133 va_start(ap, arg16); \
6134 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
6136 SAVE_RET_HISTORY(FUNCNAME, ret); \
6139 RETURN_FAKE_RESULT(FUNCNAME) \
6141 DEFINE_RESET_FUNCTION(FUNCNAME) \
6143 #define FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6144 DECLARE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6145 DEFINE_FAKE_VALUE_FUNC18_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ...) \
6148 #define DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6149 typedef struct FUNCNAME##_Fake { \
6150 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6151 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6152 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6153 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6154 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6155 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6156 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6157 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6158 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6159 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6160 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6161 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6162 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6163 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6164 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6165 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6166 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
6167 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
6168 DECLARE_ALL_FUNC_COMMON \
6169 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6170 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6171 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6172 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
6173 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, va_list ap); \
6174 } FUNCNAME##_Fake; \
6175 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6176 void FUNCNAME##_reset(void); \
6177 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...); \
6179 #define DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6180 FUNCNAME##_Fake FUNCNAME##_fake; \
6181 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ...){ \
6182 SAVE_ARG(FUNCNAME, 0); \
6183 SAVE_ARG(FUNCNAME, 1); \
6184 SAVE_ARG(FUNCNAME, 2); \
6185 SAVE_ARG(FUNCNAME, 3); \
6186 SAVE_ARG(FUNCNAME, 4); \
6187 SAVE_ARG(FUNCNAME, 5); \
6188 SAVE_ARG(FUNCNAME, 6); \
6189 SAVE_ARG(FUNCNAME, 7); \
6190 SAVE_ARG(FUNCNAME, 8); \
6191 SAVE_ARG(FUNCNAME, 9); \
6192 SAVE_ARG(FUNCNAME, 10); \
6193 SAVE_ARG(FUNCNAME, 11); \
6194 SAVE_ARG(FUNCNAME, 12); \
6195 SAVE_ARG(FUNCNAME, 13); \
6196 SAVE_ARG(FUNCNAME, 14); \
6197 SAVE_ARG(FUNCNAME, 15); \
6198 SAVE_ARG(FUNCNAME, 16); \
6199 SAVE_ARG(FUNCNAME, 17); \
6200 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6201 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6202 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6203 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6204 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6205 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6206 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6207 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6208 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6209 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6210 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6211 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6212 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6213 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6214 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6215 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6216 SAVE_ARG_HISTORY(FUNCNAME, 15); \
6217 SAVE_ARG_HISTORY(FUNCNAME, 16); \
6218 SAVE_ARG_HISTORY(FUNCNAME, 17); \
6221 HISTORY_DROPPED(FUNCNAME); \
6223 INCREMENT_CALL_COUNT(FUNCNAME); \
6224 REGISTER_CALL(FUNCNAME); \
6225 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
6226 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6228 va_start(ap, arg17); \
6229 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6230 SAVE_RET_HISTORY(FUNCNAME, ret); \
6236 va_start(ap, arg17); \
6237 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6238 SAVE_RET_HISTORY(FUNCNAME, ret); \
6241 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6244 if (FUNCNAME##_fake.custom_fake){ \
6247 va_start(ap, arg17); \
6248 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
6250 SAVE_RET_HISTORY(FUNCNAME, ret); \
6253 RETURN_FAKE_RESULT(FUNCNAME) \
6255 DEFINE_RESET_FUNCTION(FUNCNAME) \
6257 #define FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6258 DECLARE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6259 DEFINE_FAKE_VALUE_FUNC19_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ...) \
6262 #define DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6263 typedef struct FUNCNAME##_Fake { \
6264 DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
6265 DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
6266 DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
6267 DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
6268 DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
6269 DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
6270 DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
6271 DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
6272 DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
6273 DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
6274 DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
6275 DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
6276 DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
6277 DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
6278 DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
6279 DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
6280 DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
6281 DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
6282 DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
6283 DECLARE_ALL_FUNC_COMMON \
6284 DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
6285 DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
6286 DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
6287 RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
6288 RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, va_list ap); \
6289 } FUNCNAME##_Fake; \
6290 extern FUNCNAME##_Fake FUNCNAME##_fake; \
6291 void FUNCNAME##_reset(void); \
6292 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...); \
6294 #define DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6295 FUNCNAME##_Fake FUNCNAME##_fake; \
6296 RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ARG7_TYPE arg7, ARG8_TYPE arg8, ARG9_TYPE arg9, ARG10_TYPE arg10, ARG11_TYPE arg11, ARG12_TYPE arg12, ARG13_TYPE arg13, ARG14_TYPE arg14, ARG15_TYPE arg15, ARG16_TYPE arg16, ARG17_TYPE arg17, ARG18_TYPE arg18, ...){ \
6297 SAVE_ARG(FUNCNAME, 0); \
6298 SAVE_ARG(FUNCNAME, 1); \
6299 SAVE_ARG(FUNCNAME, 2); \
6300 SAVE_ARG(FUNCNAME, 3); \
6301 SAVE_ARG(FUNCNAME, 4); \
6302 SAVE_ARG(FUNCNAME, 5); \
6303 SAVE_ARG(FUNCNAME, 6); \
6304 SAVE_ARG(FUNCNAME, 7); \
6305 SAVE_ARG(FUNCNAME, 8); \
6306 SAVE_ARG(FUNCNAME, 9); \
6307 SAVE_ARG(FUNCNAME, 10); \
6308 SAVE_ARG(FUNCNAME, 11); \
6309 SAVE_ARG(FUNCNAME, 12); \
6310 SAVE_ARG(FUNCNAME, 13); \
6311 SAVE_ARG(FUNCNAME, 14); \
6312 SAVE_ARG(FUNCNAME, 15); \
6313 SAVE_ARG(FUNCNAME, 16); \
6314 SAVE_ARG(FUNCNAME, 17); \
6315 SAVE_ARG(FUNCNAME, 18); \
6316 if (ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
6317 SAVE_ARG_HISTORY(FUNCNAME, 0); \
6318 SAVE_ARG_HISTORY(FUNCNAME, 1); \
6319 SAVE_ARG_HISTORY(FUNCNAME, 2); \
6320 SAVE_ARG_HISTORY(FUNCNAME, 3); \
6321 SAVE_ARG_HISTORY(FUNCNAME, 4); \
6322 SAVE_ARG_HISTORY(FUNCNAME, 5); \
6323 SAVE_ARG_HISTORY(FUNCNAME, 6); \
6324 SAVE_ARG_HISTORY(FUNCNAME, 7); \
6325 SAVE_ARG_HISTORY(FUNCNAME, 8); \
6326 SAVE_ARG_HISTORY(FUNCNAME, 9); \
6327 SAVE_ARG_HISTORY(FUNCNAME, 10); \
6328 SAVE_ARG_HISTORY(FUNCNAME, 11); \
6329 SAVE_ARG_HISTORY(FUNCNAME, 12); \
6330 SAVE_ARG_HISTORY(FUNCNAME, 13); \
6331 SAVE_ARG_HISTORY(FUNCNAME, 14); \
6332 SAVE_ARG_HISTORY(FUNCNAME, 15); \
6333 SAVE_ARG_HISTORY(FUNCNAME, 16); \
6334 SAVE_ARG_HISTORY(FUNCNAME, 17); \
6335 SAVE_ARG_HISTORY(FUNCNAME, 18); \
6338 HISTORY_DROPPED(FUNCNAME); \
6340 INCREMENT_CALL_COUNT(FUNCNAME); \
6341 REGISTER_CALL(FUNCNAME); \
6342 if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
6343 if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
6345 va_start(ap, arg18); \
6346 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6347 SAVE_RET_HISTORY(FUNCNAME, ret); \
6353 va_start(ap, arg18); \
6354 RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6355 SAVE_RET_HISTORY(FUNCNAME, ret); \
6358 return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6361 if (FUNCNAME##_fake.custom_fake){ \
6364 va_start(ap, arg18); \
6365 ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
6367 SAVE_RET_HISTORY(FUNCNAME, ret); \
6370 RETURN_FAKE_RESULT(FUNCNAME) \
6372 DEFINE_RESET_FUNCTION(FUNCNAME) \
6374 #define FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6375 DECLARE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6376 DEFINE_FAKE_VALUE_FUNC20_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ARG9_TYPE, ARG10_TYPE, ARG11_TYPE, ARG12_TYPE, ARG13_TYPE, ARG14_TYPE, ARG15_TYPE, ARG16_TYPE, ARG17_TYPE, ARG18_TYPE, ...) \
6378 /* MSVC expand macro fix */
6381 #define PP_NARG_MINUS2(...) EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2()))
6383 #define PP_NARG_MINUS2_(...) EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__))
6385 #define PP_ARG_MINUS2_N(returnVal, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N
6387 #define PP_RSEQ_N_MINUS2() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
6389 #define PP_NARG_MINUS1(...) EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1()))
6391 #define PP_NARG_MINUS1_(...) EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__))
6393 #define PP_ARG_MINUS1_N( _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, N, ...) N
6395 #define PP_RSEQ_N_MINUS1() 20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
6399 /* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
6401 #define FAKE_VALUE_FUNC(...) EXPAND(FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6403 #define FUNC_VALUE_(N,...) EXPAND(FUNC_VALUE_N(N,__VA_ARGS__))
6405 #define FUNC_VALUE_N(N,...) EXPAND(FAKE_VALUE_FUNC ## N(__VA_ARGS__))
6408 #define FAKE_VOID_FUNC(...) EXPAND(FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6410 #define FUNC_VOID_(N,...) EXPAND(FUNC_VOID_N(N,__VA_ARGS__))
6412 #define FUNC_VOID_N(N,...) EXPAND(FAKE_VOID_FUNC ## N(__VA_ARGS__))
6415 #define FAKE_VALUE_FUNC_VARARG(...) EXPAND(FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6417 #define FUNC_VALUE_VARARG_(N,...) EXPAND(FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
6419 #define FUNC_VALUE_VARARG_N(N,...) EXPAND(FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
6422 #define FAKE_VOID_FUNC_VARARG(...) EXPAND(FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6424 #define FUNC_VOID_VARARG_(N,...) EXPAND(FUNC_VOID_VARARG_N(N,__VA_ARGS__))
6426 #define FUNC_VOID_VARARG_N(N,...) EXPAND(FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
6430 /* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
6432 #define DECLARE_FAKE_VALUE_FUNC(...) EXPAND(DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6434 #define DECLARE_FUNC_VALUE_(N,...) EXPAND(DECLARE_FUNC_VALUE_N(N,__VA_ARGS__))
6436 #define DECLARE_FUNC_VALUE_N(N,...) EXPAND(DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
6439 #define DECLARE_FAKE_VOID_FUNC(...) EXPAND(DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6441 #define DECLARE_FUNC_VOID_(N,...) EXPAND(DECLARE_FUNC_VOID_N(N,__VA_ARGS__))
6443 #define DECLARE_FUNC_VOID_N(N,...) EXPAND(DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
6446 #define DECLARE_FAKE_VALUE_FUNC_VARARG(...) EXPAND(DECLARE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6448 #define DECLARE_FUNC_VALUE_VARARG_(N,...) EXPAND(DECLARE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
6450 #define DECLARE_FUNC_VALUE_VARARG_N(N,...) EXPAND(DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
6453 #define DECLARE_FAKE_VOID_FUNC_VARARG(...) EXPAND(DECLARE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6455 #define DECLARE_FUNC_VOID_VARARG_(N,...) EXPAND(DECLARE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
6457 #define DECLARE_FUNC_VOID_VARARG_N(N,...) EXPAND(DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
6461 /* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
6463 #define DEFINE_FAKE_VALUE_FUNC(...) EXPAND(DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6465 #define DEFINE_FUNC_VALUE_(N,...) EXPAND(DEFINE_FUNC_VALUE_N(N,__VA_ARGS__))
6467 #define DEFINE_FUNC_VALUE_N(N,...) EXPAND(DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
6470 #define DEFINE_FAKE_VOID_FUNC(...) EXPAND(DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6472 #define DEFINE_FUNC_VOID_(N,...) EXPAND(DEFINE_FUNC_VOID_N(N,__VA_ARGS__))
6474 #define DEFINE_FUNC_VOID_N(N,...) EXPAND(DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
6477 #define DEFINE_FAKE_VALUE_FUNC_VARARG(...) EXPAND(DEFINE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
6479 #define DEFINE_FUNC_VALUE_VARARG_(N,...) EXPAND(DEFINE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
6481 #define DEFINE_FUNC_VALUE_VARARG_N(N,...) EXPAND(DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
6484 #define DEFINE_FAKE_VOID_FUNC_VARARG(...) EXPAND(DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
6486 #define DEFINE_FUNC_VOID_VARARG_(N,...) EXPAND(DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
6488 #define DEFINE_FUNC_VOID_VARARG_N(N,...) EXPAND(DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
6493 #endif /* FAKE_FUNCTIONS */