Use GMock instead of fff 08/285508/4 accepted/tizen/unified/dev/20230726.120017
authorInkyun Kil <inkyun.kil@samsung.com>
Wed, 14 Dec 2022 01:47:31 +0000 (10:47 +0900)
committerInkyun Kil <inkyun.kil@samsung.com>
Wed, 14 Dec 2022 03:06:57 +0000 (12:06 +0900)
- fff.h size is a little big and
  it should be included in all projects that use it.
  Therefore GMockcok is better than fff

Change-Id: Id600fbdfa557248aaba3cb58740fa05272229520
Signed-off-by: Inkyun Kil <inkyun.kil@samsung.com>
44 files changed:
CMakeLists.txt
mock/app_common.h [deleted file]
mock/appsvc_mock.h [deleted file]
mock/aul_mock.h [deleted file]
mock/cynara_mock.h [deleted file]
mock/evas_mock.h [deleted file]
mock/fff.h [deleted file]
mock/gio/gio.h [deleted file]
mock/mock.cc [deleted file]
mock/mock.h [deleted file]
mock/system_info_mock.h [deleted file]
mock/tzplatform_config_mock.h [deleted file]
mock/vconf_mock.h [deleted file]
mock/widget_service_mock.h [deleted file]
packaging/libwidget_viewer.spec
tests/CMakeLists.txt [new file with mode: 0644]
tests/mock/appsvc_mock.cc [new file with mode: 0644]
tests/mock/appsvc_mock.h [new file with mode: 0644]
tests/mock/aul_mock.cc [new file with mode: 0644]
tests/mock/aul_mock.h [new file with mode: 0644]
tests/mock/evas_mock.cc [new file with mode: 0644]
tests/mock/evas_mock.h [new file with mode: 0644]
tests/mock/mock_hook.h [new file with mode: 0644]
tests/mock/module_mock.h [new file with mode: 0644]
tests/mock/system_info_mock.cc [new file with mode: 0644]
tests/mock/system_info_mock.h [new file with mode: 0644]
tests/mock/test_fixture.cc [new file with mode: 0644]
tests/mock/test_fixture.h [new file with mode: 0644]
tests/mock/vconf_mock.cc [new file with mode: 0644]
tests/mock/vconf_mock.h [new file with mode: 0644]
tests/unit_tests/CMakeLists.txt [new file with mode: 0644]
tests/unit_tests/src/main.cc [new file with mode: 0644]
tests/unit_tests/src/test_ambient_viewer.cc [new file with mode: 0644]
tests/unit_tests/src/test_ambient_viewer_stub.cc [new file with mode: 0644]
tests/unit_tests/src/test_watch_holder.cc [new file with mode: 0644]
tests/unit_tests/src/test_watch_mirror.cc [new file with mode: 0644]
unittest/CMakeLists.txt [deleted file]
unittest/src/appsvc_mock.h [deleted file]
unittest/src/test_ambient_viewer.cc [deleted file]
unittest/src/test_ambient_viewer_stub.cc [deleted file]
unittest/src/test_main.cc [deleted file]
unittest/src/test_watch.cc [deleted file]
unittest/src/test_watch_holder.cc [deleted file]
unittest/src/test_watch_mirror.cc [deleted file]

index 48bd42fd5c9e0fb783d16f0704da1e089955daf4..c6af3c385c7490de3ea6818c3ae429c71b4fbe7c 100644 (file)
@@ -1,4 +1,5 @@
 CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(widget_viewer CXX)
 
 ADD_SUBDIRECTORY(widget_viewer_evas)
 ADD_SUBDIRECTORY(widget_viewer_sdk)
@@ -9,14 +10,17 @@ ADD_SUBDIRECTORY(frame-broker)
 ADD_SUBDIRECTORY(frame-provider)
 ADD_SUBDIRECTORY(ambient-viewer)
 ADD_SUBDIRECTORY(tool)
-ADD_SUBDIRECTORY(unittest)
 
 ADD_DEPENDENCIES(watch-holder watch-holder-base)
-ADD_DEPENDENCIES(widget-viewer_unittests widget_viewer_evas)
 ADD_DEPENDENCIES(widget_viewer_sdk widget_viewer_evas)
 ADD_DEPENDENCIES(widget_viewer_sdk watch-holder)
 
 ENABLE_TESTING()
-SET(WIDGET_VIEWER_UNIT_TESTS widget-viewer_unittests)
-ADD_TEST(NAME ${WIDGET_VIEWER_UNIT_TESTS} COMMAND ${WIDGET_VIEWER_UNIT_TESTS}
-        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/unittest)
+IF(NOT DEFINED MINIMUM_BUILD)
+ADD_SUBDIRECTORY(tests)
+ENABLE_TESTING()
+SET(UNIT_TESTS ${PROJECT_NAME}-unittests)
+ADD_TEST(NAME ${UNIT_TESTS} COMMAND ${UNIT_TESTS})
+
+ADD_DEPENDENCIES(${UNIT_TESTS} widget_viewer_evas ambient_viewer)
+ENDIF(NOT DEFINED MINIMUM_BUILD)
diff --git a/mock/app_common.h b/mock/app_common.h
deleted file mode 100644 (file)
index 478dc7a..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_APP_COMMON_H_
-#define MOCK_APP_COMMON_H_
-
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef enum {
-       APP_ERROR_NONE = 0, /**< Successful */
-       APP_ERROR_INVALID_PARAMETER = -22, /**< Invalid parameter */
-       APP_ERROR_OUT_OF_MEMORY = -12, /**< Out of memory */
-       APP_ERROR_INVALID_CONTEXT = -0x01100000 | 0x01, /**< Invalid application context */
-       APP_ERROR_NO_SUCH_FILE = -2, /**< No such file or directory */
-       APP_ERROR_NOT_SUPPORTED = -3, /**< Not supported (Since 4.0) */
-       APP_ERROR_ALREADY_RUNNING = -4, /**< Application is already running */
-       APP_ERROR_PERMISSION_DENIED = -5, /**< Permission denied @if MOBILE (Since 2.3.1) @endif */
-} app_error_e;
-
-DECLARE_FAKE_VALUE_FUNC(int, app_get_name, char**);
-
-DECLARE_FAKE_VALUE_FUNC(int, app_get_id, char**);
-
-DECLARE_FAKE_VALUE_FUNC(char*, app_get_data_path);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_APP_COMMON_H_ */
diff --git a/mock/appsvc_mock.h b/mock/appsvc_mock.h
deleted file mode 100644 (file)
index b9b2bb6..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_APPSVC_H_
-#define MOCK_APPSVC_H_
-
-#include "mock.h"
-#include "appsvc.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-DECLARE_FAKE_VALUE_FUNC(int, appsvc_run_service, bundle*, int, appsvc_res_fn, void*);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_APPSVC_H_ */
diff --git a/mock/aul_mock.h b/mock/aul_mock.h
deleted file mode 100644 (file)
index 0f5eaa6..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_AUL_H_
-#define MOCK_AUL_H_
-
-#include <aul_app_com.h>
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-DECLARE_FAKE_VALUE_FUNC(int, aul_app_get_appid_bypid, int, char *, int);
-DECLARE_FAKE_VALUE_FUNC_VARARG(int, aul_widget_write_log, const char *, const char *, ...);
-
-DECLARE_FAKE_VALUE_FUNC(int, aul_app_com_create, const char *,
-    aul_app_com_permission_h, app_com_cb, void *, aul_app_com_connection_h *);
-DECLARE_FAKE_VALUE_FUNC(int, aul_app_com_leave, aul_app_com_connection_h);
-DECLARE_FAKE_VALUE_FUNC(int, aul_app_com_send, const char *, bundle *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_AUL_H_ */
diff --git a/mock/cynara_mock.h b/mock/cynara_mock.h
deleted file mode 100644 (file)
index 99fb9fe..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_CYNARA_H_
-#define MOCK_CYNARA_H_
-
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void cynara;
-typedef void* cynara_configuration;
-
-/*! \brief  indicating that API call was interrupted by user*/
-#define CYNARA_API_INTERRUPTED                  4
-
-/*! \brief  indicating access that cannot be resolved without further actions*/
-#define CYNARA_API_ACCESS_NOT_RESOLVED          3
-
-/*! \brief   indicating access that was checked is allowed */
-#define CYNARA_API_ACCESS_ALLOWED               2
-
-/*! \brief   indicating that access that was checked is denied */
-#define CYNARA_API_ACCESS_DENIED                1
-
-/*! \brief   indicating the result of the one specific API is successful */
-#define CYNARA_API_SUCCESS                      0
-
-/*! \brief   indicating that value is not present in cache */
-#define CYNARA_API_CACHE_MISS                   -1
-
-/*! \brief   indicating that pending requests reached maximum */
-#define CYNARA_API_MAX_PENDING_REQUESTS         -2
-
-/*! \brief   indicating system is running out of memory state */
-#define CYNARA_API_OUT_OF_MEMORY                -3
-
-/*! \brief   indicating the API's parameter is malformed */
-#define CYNARA_API_INVALID_PARAM                -4
-
-/*! \brief   indicating that service is not available */
-#define CYNARA_API_SERVICE_NOT_AVAILABLE        -5
-
-/*! \brief   indicating that provided method is not supported by library */
-#define CYNARA_API_METHOD_NOT_SUPPORTED         -6
-
-/*! \brief   cynara service does not allow to perform requested operation */
-#define CYNARA_API_OPERATION_NOT_ALLOWED        -7
-
-/*! \brief   cynara service failed to perform requested operation */
-#define CYNARA_API_OPERATION_FAILED             -8
-
-/*! \brief   cynara service hasn't found requested bucket */
-#define CYNARA_API_BUCKET_NOT_FOUND             -9
-
-/*! \brief   indicating an unknown error */
-#define CYNARA_API_UNKNOWN_ERROR                -10
-
-/*! \brief   indicating configuration error */
-#define CYNARA_API_CONFIGURATION_ERROR          -11
-
-/*! \brief   indicating invalid parameter in command-line */
-#define CYNARA_API_INVALID_COMMANDLINE_PARAM    -12
-
-/*! \brief   indicating that provided buffer is too short */
-#define CYNARA_API_BUFFER_TOO_SHORT             -13
-
-/*! \brief   indicating that database is corrupted */
-#define CYNARA_API_DATABASE_CORRUPTED           -14
-
-/*! \brief   indicating that user doesn't have enough permission to perform action */
-#define CYNARA_API_PERMISSION_DENIED            -15
-
-
-enum cynara_client_creds {
-       CLIENT_METHOD_SMACK,
-       CLIENT_METHOD_PID,
-
-       CLIENT_METHOD_DEFAULT = 0xFFFF,
-};
-
-enum cynara_user_creds {
-       USER_METHOD_UID,
-       USER_METHOD_GID,
-
-       USER_METHOD_DEFAULT = 0xFFFF,
-};
-
-DECLARE_FAKE_VALUE_FUNC(int, cynara_initialize, cynara**,
-               const cynara_configuration*);
-DECLARE_FAKE_VALUE_FUNC(int, cynara_finish, cynara*);
-DECLARE_FAKE_VALUE_FUNC(int, cynara_check, cynara*,
-               const char*, const char*, const char*, const char*);
-DECLARE_FAKE_VALUE_FUNC(int, cynara_creds_gdbus_get_client, GDBusConnection*,
-               const gchar*, enum cynara_client_creds, gchar**);
-DECLARE_FAKE_VALUE_FUNC(int, cynara_creds_gdbus_get_user, GDBusConnection*,
-               const gchar*, enum cynara_user_creds, gchar**);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_CYNARA_H_ */
diff --git a/mock/evas_mock.h b/mock/evas_mock.h
deleted file mode 100644 (file)
index 9086375..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_EVAS_H_
-#define MOCK_EVAS_H_
-
-#include <tbm_surface.h>
-#include <Evas.h>
-#include <Elementary.h>
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-DECLARE_FAKE_VALUE_FUNC(Evas_Object *, elm_win_add, Evas_Object *,
-               const char *, Elm_Win_Type);
-
-DECLARE_FAKE_VALUE_FUNC(int, elm_win_aux_hint_add, Evas_Object *, const char *,
-               const char *);
-
-DECLARE_FAKE_VALUE_FUNC(Evas_Object *, elm_layout_add, Evas_Object *);
-DECLARE_FAKE_VALUE_FUNC(Evas *, evas_object_evas_get, const Eo *);
-
-DECLARE_FAKE_VALUE_FUNC(Eina_Bool, elm_layout_file_set, Eo *, const char *,
-               const char *);
-
-DECLARE_FAKE_VALUE_FUNC(void *, evas_object_data_get, const Evas_Object *,
-               const char *);
-
-DECLARE_FAKE_VOID_FUNC(evas_object_data_set, Evas_Object *, const char *,
-               const void *);
-
-DECLARE_FAKE_VOID_FUNC(evas_object_event_callback_add, Evas_Object *,
-               Evas_Callback_Type, Evas_Object_Event_Cb, const void *);
-
-DECLARE_FAKE_VOID_FUNC(elm_object_signal_callback_add, Evas_Object *,
-               const char *, const char *, Edje_Signal_Cb, void *);
-
-DECLARE_FAKE_VOID_FUNC(evas_object_smart_callback_add, Evas_Object *,
-               const char *, Evas_Smart_Cb, const void *);
-DECLARE_FAKE_VALUE_FUNC(void *, evas_object_smart_callback_del, Evas_Object *,
-               const char *, Evas_Smart_Cb);
-
-DECLARE_FAKE_VOID_FUNC(elm_object_part_content_set, Evas_Object *, const char *,
-               Evas_Object *);
-
-DECLARE_FAKE_VALUE_FUNC(Evas_Object *, elm_object_part_content_get,
-               const Evas_Object *, const char *);
-
-DECLARE_FAKE_VOID_FUNC(elm_object_signal_emit, Evas_Object *, const char  *,
-                const char  *);
-
-DECLARE_FAKE_VOID_FUNC(evas_object_geometry_get, const Evas_Object *,
-    Evas_Coord *, Evas_Coord *, Evas_Coord *, Evas_Coord *);
-DECLARE_FAKE_VALUE_FUNC(Evas_Native_Surface *,
-    evas_object_image_native_surface_get, const Evas_Object *);
-DECLARE_FAKE_VALUE_FUNC(int, tbm_surface_map, tbm_surface_h,
-    int, tbm_surface_info_s *);
-DECLARE_FAKE_VALUE_FUNC(int, tbm_surface_unmap, tbm_surface_h);
-
-DECLARE_FAKE_VALUE_FUNC(Ecore_Evas*, ecore_evas_ecore_evas_get, const Evas*);
-DECLARE_FAKE_VALUE_FUNC(Ecore_Wl2_Window*, ecore_evas_wayland2_window_get,
-                        const Ecore_Evas*);
-
-DECLARE_FAKE_VALUE_FUNC(const char*, elm_win_aux_msg_key_get,
-                        Evas_Object*, Elm_Win_Aux_Message*);
-DECLARE_FAKE_VALUE_FUNC(const char*, elm_win_aux_msg_val_get,
-                        Evas_Object*, Elm_Win_Aux_Message*);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_EVAS_H_ */
diff --git a/mock/fff.h b/mock/fff.h
deleted file mode 100644 (file)
index f8d6d5f..0000000
+++ /dev/null
@@ -1,6493 +0,0 @@
-/*
-LICENSE
-
-The MIT License (MIT)
-
-Copyright (c) 2010 Michael Long
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-*/
-#ifndef FAKE_FUNCTIONS
-#define FAKE_FUNCTIONS
-
-#include <stdarg.h>
-#include <string.h> /* For memset and memcpy */
-
-#define FFF_MAX_ARGS (20u)
-#ifndef FFF_ARG_HISTORY_LEN
-    #define FFF_ARG_HISTORY_LEN (50u)
-#endif
-#ifndef FFF_CALL_HISTORY_LEN
-    #define FFF_CALL_HISTORY_LEN (50u)
-#endif
-/* -- INTERNAL HELPER MACROS -- */
-#define SET_RETURN_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
-    FUNCNAME##_fake.return_val_seq = ARRAY_POINTER; \
-    FUNCNAME##_fake.return_val_seq_len = ARRAY_LEN;
-#define SET_CUSTOM_FAKE_SEQ(FUNCNAME, ARRAY_POINTER, ARRAY_LEN) \
-    FUNCNAME##_fake.custom_fake_seq = ARRAY_POINTER; \
-    FUNCNAME##_fake.custom_fake_seq_len = ARRAY_LEN;
-
-/* Defining a function to reset a fake function */
-#define RESET_FAKE(FUNCNAME) { \
-    FUNCNAME##_reset(); \
-} \
-
-
-#define DECLARE_ARG(type, n, FUNCNAME) \
-    type arg##n##_val; \
-    type arg##n##_history[FFF_ARG_HISTORY_LEN];
-
-#define DECLARE_ALL_FUNC_COMMON \
-    unsigned int call_count; \
-    unsigned int arg_history_len; \
-    unsigned int arg_histories_dropped; \
-
-#define DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-    RETURN_TYPE return_val_history[FFF_ARG_HISTORY_LEN];
-
-#define SAVE_ARG(FUNCNAME, n) \
-    memcpy((void*)&FUNCNAME##_fake.arg##n##_val, (void*)&arg##n, sizeof(arg##n));
-
-#define ROOM_FOR_MORE_HISTORY(FUNCNAME) \
-    FUNCNAME##_fake.call_count < FFF_ARG_HISTORY_LEN
-
-#define SAVE_RET_HISTORY(FUNCNAME, RETVAL) \
-    if ((FUNCNAME##_fake.call_count - 1) < FFF_ARG_HISTORY_LEN) \
-        memcpy((void *)&FUNCNAME##_fake.return_val_history[FUNCNAME##_fake.call_count - 1], (const void *) &RETVAL, sizeof(RETVAL)); \
-
-#define SAVE_ARG_HISTORY(FUNCNAME, ARGN) \
-    memcpy((void*)&FUNCNAME##_fake.arg##ARGN##_history[FUNCNAME##_fake.call_count], (void*)&arg##ARGN, sizeof(arg##ARGN));
-
-#define HISTORY_DROPPED(FUNCNAME) \
-    FUNCNAME##_fake.arg_histories_dropped++
-
-#define DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-    RETURN_TYPE return_val; \
-    int return_val_seq_len; \
-    int return_val_seq_idx; \
-    RETURN_TYPE * return_val_seq; \
-
-#define DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-    int custom_fake_seq_len; \
-    int custom_fake_seq_idx; \
-
-#define INCREMENT_CALL_COUNT(FUNCNAME) \
-    FUNCNAME##_fake.call_count++
-
-#define RETURN_FAKE_RESULT(FUNCNAME) \
-    if (FUNCNAME##_fake.return_val_seq_len){ /* then its a sequence */ \
-        if(FUNCNAME##_fake.return_val_seq_idx < FUNCNAME##_fake.return_val_seq_len) { \
-            SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx]) \
-            return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_idx++]; \
-        } \
-        SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]) \
-        return FUNCNAME##_fake.return_val_seq[FUNCNAME##_fake.return_val_seq_len-1]; /* return last element */ \
-    } \
-    SAVE_RET_HISTORY(FUNCNAME, FUNCNAME##_fake.return_val) \
-    return FUNCNAME##_fake.return_val; \
-
-#ifdef __cplusplus
-    #define FFF_EXTERN_C extern "C"{
-    #define FFF_END_EXTERN_C }
-#else  /* ansi c */
-    #define FFF_EXTERN_C
-    #define FFF_END_EXTERN_C
-#endif  /* cpp/ansi c */
-
-#define DEFINE_RESET_FUNCTION(FUNCNAME) \
-    void FUNCNAME##_reset(void){ \
-        memset(&FUNCNAME##_fake, 0, sizeof(FUNCNAME##_fake)); \
-        FUNCNAME##_fake.arg_history_len = FFF_ARG_HISTORY_LEN; \
-    }
-/* -- END INTERNAL HELPER MACROS -- */
-
-typedef void (*fff_function_t)(void);
-typedef struct {
-    fff_function_t call_history[FFF_CALL_HISTORY_LEN];
-    unsigned int call_history_idx;
-} fff_globals_t;
-
-FFF_EXTERN_C
-extern fff_globals_t fff;
-FFF_END_EXTERN_C
-
-#define DEFINE_FFF_GLOBALS \
-    FFF_EXTERN_C \
-        fff_globals_t fff; \
-    FFF_END_EXTERN_C
-
-#define FFF_RESET_HISTORY() \
-    fff.call_history_idx = 0; \
-    memset(fff.call_history, 0, sizeof(fff.call_history));
-
-#define REGISTER_CALL(function) \
-    if(fff.call_history_idx < FFF_CALL_HISTORY_LEN) \
-        fff.call_history[fff.call_history_idx++] = (fff_function_t)function;
-
-#define DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(void); \
-        void(**custom_fake_seq)(void); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(void); \
-
-#define DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(void){ \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC0(FUNCNAME) \
-    DECLARE_FAKE_VOID_FUNC0(FUNCNAME) \
-    DEFINE_FAKE_VOID_FUNC0(FUNCNAME) \
-
-
-#define DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0); \
-
-#define DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-    DECLARE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-    DEFINE_FAKE_VOID_FUNC1(FUNCNAME, ARG0_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-
-#define DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    DECLARE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    DEFINE_FAKE_VOID_FUNC2(FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-
-#define DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    DECLARE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    DEFINE_FAKE_VOID_FUNC3(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-
-#define DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    DECLARE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    DEFINE_FAKE_VOID_FUNC4(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-
-#define DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    DECLARE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    DEFINE_FAKE_VOID_FUNC5(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-
-#define DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    DECLARE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    DEFINE_FAKE_VOID_FUNC6(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-
-#define DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    DECLARE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    DEFINE_FAKE_VOID_FUNC7(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#define DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    DECLARE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    DEFINE_FAKE_VOID_FUNC8(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-
-
-#define DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#define DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-    DECLARE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-    DEFINE_FAKE_VOID_FUNC9(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
-            } \
-            else{ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        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); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        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); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        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); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        SAVE_ARG(FUNCNAME, 18); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            SAVE_ARG_HISTORY(FUNCNAME, 18); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        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); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-        DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        SAVE_ARG(FUNCNAME, 18); \
-        SAVE_ARG(FUNCNAME, 19); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            SAVE_ARG_HISTORY(FUNCNAME, 18); \
-            SAVE_ARG_HISTORY(FUNCNAME, 19); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-            } \
-            else{ \
-                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); \
-            } \
-        } \
-        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); \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(void); \
-        RETURN_TYPE(**custom_fake_seq)(void); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(void); \
-
-#define DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(void){ \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-    DECLARE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-    DEFINE_FAKE_VALUE_FUNC0(RETURN_TYPE, FUNCNAME) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0); \
-
-#define DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC1(RETURN_TYPE, FUNCNAME, ARG0_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1); \
-
-#define DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC2(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2); \
-
-#define DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC3(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3); \
-
-#define DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC4(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4); \
-
-#define DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC5(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5); \
-
-#define DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC6(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6); \
-
-#define DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC7(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#define DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    DECLARE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-    DEFINE_FAKE_VALUE_FUNC8(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if (FUNCNAME##_fake.custom_fake) return FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        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); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        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); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        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); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        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); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        SAVE_ARG(FUNCNAME, 18); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            SAVE_ARG_HISTORY(FUNCNAME, 18); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        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); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#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) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-        DECLARE_ARG(ARG19_TYPE, 19, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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); \
-
-#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) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        SAVE_ARG(FUNCNAME, 18); \
-        SAVE_ARG(FUNCNAME, 19); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            SAVE_ARG_HISTORY(FUNCNAME, 18); \
-            SAVE_ARG_HISTORY(FUNCNAME, 19); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-            } \
-            else{ \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                return ret; \
-                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); \
-            } \
-        } \
-        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); \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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) \
-    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) \
-    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) \
-
-
-#define DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg0); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg0); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg0); \
-            FUNCNAME##_fake.custom_fake(arg0, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC2_VARARG(FUNCNAME, ARG0_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg1); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg1); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg1); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC3_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg2); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg2); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg2); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC4_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg3); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg3); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg3); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC5_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
-        void(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg4); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg4); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg4); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC6_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        void(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, va_list ap); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg5); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg5); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg5); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC7_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg6); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg6); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg6); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC8_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#define DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg7); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg7); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg7); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC9_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg8); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg8); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg8); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-    DECLARE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-    DEFINE_FAKE_VOID_FUNC10_VARARG(FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ARG8_TYPE, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg9); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg9); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg9); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg10); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg10); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg10); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg11); \
-                FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg11); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg11); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg12); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg12); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg12); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg13); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg13); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg13); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg14); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg14); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg14); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg15); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg15); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg15); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg16); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg16); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg16); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg17); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg17); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg17); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        SAVE_ARG(FUNCNAME, 18); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            SAVE_ARG_HISTORY(FUNCNAME, 18); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg18); \
-                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); \
-                va_end(ap); \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg18); \
-                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); \
-                va_end(ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            va_list ap; \
-            va_start(ap, arg18); \
-            FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, arg18, ap); \
-            va_end(ap); \
-        } \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, va_list ap); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg0); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg0); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg0); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC2_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg1); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg1); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg1); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC3_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg2); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg2); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg2); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC4_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg3); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg3); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg3); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC5_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        RETURN_TYPE(*custom_fake)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
-        RETURN_TYPE(**custom_fake_seq)(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, va_list ap); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg4); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg4); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg4); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC6_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg5); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg5); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg5); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC7_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ...) \
-
-
-#define DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...); \
-
-#define DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    RETURN_TYPE FUNCNAME(ARG0_TYPE arg0, ARG1_TYPE arg1, ARG2_TYPE arg2, ARG3_TYPE arg3, ARG4_TYPE arg4, ARG5_TYPE arg5, ARG6_TYPE arg6, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg6); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg6); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg6); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC8_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg7); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg7); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg7); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#define FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    DECLARE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-    DEFINE_FAKE_VALUE_FUNC9_VARARG(RETURN_TYPE, FUNCNAME, ARG0_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE, ARG5_TYPE, ARG6_TYPE, ARG7_TYPE, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg8); \
-                RETURN_TYPE ret = FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_idx++](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg8); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg8); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg9); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg9); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                return FUNCNAME##_fake.custom_fake_seq[FUNCNAME##_fake.custom_fake_seq_len-1](arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg9); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg10); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg10); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg10); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg11); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg11); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg11); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg12); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg12); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg12); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg13); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg13); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg13); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg14); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg14); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg14); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg15); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg15); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg15); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg16); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg16); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg16); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg17); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg17); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg17); \
-            ret = FUNCNAME##_fake.custom_fake(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10, arg11, arg12, arg13, arg14, arg15, arg16, arg17, ap); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-
-#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, ...) \
-    typedef struct FUNCNAME##_Fake { \
-        DECLARE_ARG(ARG0_TYPE, 0, FUNCNAME) \
-        DECLARE_ARG(ARG1_TYPE, 1, FUNCNAME) \
-        DECLARE_ARG(ARG2_TYPE, 2, FUNCNAME) \
-        DECLARE_ARG(ARG3_TYPE, 3, FUNCNAME) \
-        DECLARE_ARG(ARG4_TYPE, 4, FUNCNAME) \
-        DECLARE_ARG(ARG5_TYPE, 5, FUNCNAME) \
-        DECLARE_ARG(ARG6_TYPE, 6, FUNCNAME) \
-        DECLARE_ARG(ARG7_TYPE, 7, FUNCNAME) \
-        DECLARE_ARG(ARG8_TYPE, 8, FUNCNAME) \
-        DECLARE_ARG(ARG9_TYPE, 9, FUNCNAME) \
-        DECLARE_ARG(ARG10_TYPE, 10, FUNCNAME) \
-        DECLARE_ARG(ARG11_TYPE, 11, FUNCNAME) \
-        DECLARE_ARG(ARG12_TYPE, 12, FUNCNAME) \
-        DECLARE_ARG(ARG13_TYPE, 13, FUNCNAME) \
-        DECLARE_ARG(ARG14_TYPE, 14, FUNCNAME) \
-        DECLARE_ARG(ARG15_TYPE, 15, FUNCNAME) \
-        DECLARE_ARG(ARG16_TYPE, 16, FUNCNAME) \
-        DECLARE_ARG(ARG17_TYPE, 17, FUNCNAME) \
-        DECLARE_ARG(ARG18_TYPE, 18, FUNCNAME) \
-        DECLARE_ALL_FUNC_COMMON \
-        DECLARE_VALUE_FUNCTION_VARIABLES(RETURN_TYPE) \
-        DECLARE_RETURN_VALUE_HISTORY(RETURN_TYPE) \
-        DECLARE_CUSTOM_FAKE_SEQ_VARIABLES \
-        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); \
-        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); \
-    } FUNCNAME##_Fake; \
-    extern FUNCNAME##_Fake FUNCNAME##_fake; \
-    void FUNCNAME##_reset(void); \
-    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, ...); \
-
-#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, ...) \
-    FUNCNAME##_Fake FUNCNAME##_fake; \
-    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, ...){ \
-        SAVE_ARG(FUNCNAME, 0); \
-        SAVE_ARG(FUNCNAME, 1); \
-        SAVE_ARG(FUNCNAME, 2); \
-        SAVE_ARG(FUNCNAME, 3); \
-        SAVE_ARG(FUNCNAME, 4); \
-        SAVE_ARG(FUNCNAME, 5); \
-        SAVE_ARG(FUNCNAME, 6); \
-        SAVE_ARG(FUNCNAME, 7); \
-        SAVE_ARG(FUNCNAME, 8); \
-        SAVE_ARG(FUNCNAME, 9); \
-        SAVE_ARG(FUNCNAME, 10); \
-        SAVE_ARG(FUNCNAME, 11); \
-        SAVE_ARG(FUNCNAME, 12); \
-        SAVE_ARG(FUNCNAME, 13); \
-        SAVE_ARG(FUNCNAME, 14); \
-        SAVE_ARG(FUNCNAME, 15); \
-        SAVE_ARG(FUNCNAME, 16); \
-        SAVE_ARG(FUNCNAME, 17); \
-        SAVE_ARG(FUNCNAME, 18); \
-        if(ROOM_FOR_MORE_HISTORY(FUNCNAME)){ \
-            SAVE_ARG_HISTORY(FUNCNAME, 0); \
-            SAVE_ARG_HISTORY(FUNCNAME, 1); \
-            SAVE_ARG_HISTORY(FUNCNAME, 2); \
-            SAVE_ARG_HISTORY(FUNCNAME, 3); \
-            SAVE_ARG_HISTORY(FUNCNAME, 4); \
-            SAVE_ARG_HISTORY(FUNCNAME, 5); \
-            SAVE_ARG_HISTORY(FUNCNAME, 6); \
-            SAVE_ARG_HISTORY(FUNCNAME, 7); \
-            SAVE_ARG_HISTORY(FUNCNAME, 8); \
-            SAVE_ARG_HISTORY(FUNCNAME, 9); \
-            SAVE_ARG_HISTORY(FUNCNAME, 10); \
-            SAVE_ARG_HISTORY(FUNCNAME, 11); \
-            SAVE_ARG_HISTORY(FUNCNAME, 12); \
-            SAVE_ARG_HISTORY(FUNCNAME, 13); \
-            SAVE_ARG_HISTORY(FUNCNAME, 14); \
-            SAVE_ARG_HISTORY(FUNCNAME, 15); \
-            SAVE_ARG_HISTORY(FUNCNAME, 16); \
-            SAVE_ARG_HISTORY(FUNCNAME, 17); \
-            SAVE_ARG_HISTORY(FUNCNAME, 18); \
-        } \
-        else{ \
-            HISTORY_DROPPED(FUNCNAME); \
-        } \
-        INCREMENT_CALL_COUNT(FUNCNAME); \
-        REGISTER_CALL(FUNCNAME); \
-        if (FUNCNAME##_fake.custom_fake_seq_len){ /* a sequence of custom fakes */ \
-            if (FUNCNAME##_fake.custom_fake_seq_idx < FUNCNAME##_fake.custom_fake_seq_len){ \
-                va_list ap; \
-                va_start(ap, arg18); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-            } \
-            else{ \
-                va_list ap; \
-                va_start(ap, arg18); \
-                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); \
-                SAVE_RET_HISTORY(FUNCNAME, ret); \
-                va_end(ap); \
-                return ret; \
-                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); \
-            } \
-        } \
-        if(FUNCNAME##_fake.custom_fake){ \
-            RETURN_TYPE ret; \
-            va_list ap; \
-            va_start(ap, arg18); \
-            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); \
-            va_end(ap); \
-            SAVE_RET_HISTORY(FUNCNAME, ret); \
-            return ret; \
-        } \
-        RETURN_FAKE_RESULT(FUNCNAME) \
-    } \
-    DEFINE_RESET_FUNCTION(FUNCNAME) \
-
-#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, ...) \
-    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, ...) \
-    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, ...) \
-
-/* MSVC expand macro fix */
-#define EXPAND(x) x
-
-#define PP_NARG_MINUS2(...)   EXPAND(PP_NARG_MINUS2_(__VA_ARGS__, PP_RSEQ_N_MINUS2()))
-
-#define PP_NARG_MINUS2_(...)   EXPAND(PP_ARG_MINUS2_N(__VA_ARGS__))
-
-#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
-
-#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
-
-#define PP_NARG_MINUS1(...)   EXPAND(PP_NARG_MINUS1_(__VA_ARGS__, PP_RSEQ_N_MINUS1()))
-
-#define PP_NARG_MINUS1_(...)   EXPAND(PP_ARG_MINUS1_N(__VA_ARGS__))
-
-#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
-
-#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
-
-
-
-/* DECLARE AND DEFINE FAKE FUNCTIONS - PLACE IN TEST FILES */
-
-#define FAKE_VALUE_FUNC(...)     EXPAND(FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VALUE_(N,...)     EXPAND(FUNC_VALUE_N(N,__VA_ARGS__))
-
-#define FUNC_VALUE_N(N,...)     EXPAND(FAKE_VALUE_FUNC ## N(__VA_ARGS__))
-
-
-#define FAKE_VOID_FUNC(...)     EXPAND(FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VOID_(N,...)     EXPAND(FUNC_VOID_N(N,__VA_ARGS__))
-
-#define FUNC_VOID_N(N,...)     EXPAND(FAKE_VOID_FUNC ## N(__VA_ARGS__))
-
-
-#define FAKE_VALUE_FUNC_VARARG(...)     EXPAND(FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VALUE_VARARG_(N,...)     EXPAND(FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
-
-#define FUNC_VALUE_VARARG_N(N,...)     EXPAND(FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-#define FAKE_VOID_FUNC_VARARG(...)     EXPAND(FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define FUNC_VOID_VARARG_(N,...)     EXPAND(FUNC_VOID_VARARG_N(N,__VA_ARGS__))
-
-#define FUNC_VOID_VARARG_N(N,...)     EXPAND(FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-
-/* DECLARE FAKE FUNCTIONS - PLACE IN HEADER FILES */
-
-#define DECLARE_FAKE_VALUE_FUNC(...)     EXPAND(DECLARE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_(N,...)     EXPAND(DECLARE_FUNC_VALUE_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_N(N,...)     EXPAND(DECLARE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
-
-
-#define DECLARE_FAKE_VOID_FUNC(...)     EXPAND(DECLARE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_(N,...)     EXPAND(DECLARE_FUNC_VOID_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_N(N,...)     EXPAND(DECLARE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
-
-
-#define DECLARE_FAKE_VALUE_FUNC_VARARG(...)     EXPAND(DECLARE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_VARARG_(N,...)     EXPAND(DECLARE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VALUE_VARARG_N(N,...)     EXPAND(DECLARE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-#define DECLARE_FAKE_VOID_FUNC_VARARG(...)     EXPAND(DECLARE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_VARARG_(N,...)     EXPAND(DECLARE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
-
-#define DECLARE_FUNC_VOID_VARARG_N(N,...)     EXPAND(DECLARE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-
-/* DEFINE FAKE FUNCTIONS - PLACE IN SOURCE FILES */
-
-#define DEFINE_FAKE_VALUE_FUNC(...)     EXPAND(DEFINE_FUNC_VALUE_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_(N,...)     EXPAND(DEFINE_FUNC_VALUE_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_N(N,...)     EXPAND(DEFINE_FAKE_VALUE_FUNC ## N(__VA_ARGS__))
-
-
-#define DEFINE_FAKE_VOID_FUNC(...)     EXPAND(DEFINE_FUNC_VOID_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_(N,...)     EXPAND(DEFINE_FUNC_VOID_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_N(N,...)     EXPAND(DEFINE_FAKE_VOID_FUNC ## N(__VA_ARGS__))
-
-
-#define DEFINE_FAKE_VALUE_FUNC_VARARG(...)     EXPAND(DEFINE_FUNC_VALUE_VARARG_(PP_NARG_MINUS2(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_VARARG_(N,...)     EXPAND(DEFINE_FUNC_VALUE_VARARG_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VALUE_VARARG_N(N,...)     EXPAND(DEFINE_FAKE_VALUE_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-#define DEFINE_FAKE_VOID_FUNC_VARARG(...)     EXPAND(DEFINE_FUNC_VOID_VARARG_(PP_NARG_MINUS1(__VA_ARGS__), __VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_VARARG_(N,...)     EXPAND(DEFINE_FUNC_VOID_VARARG_N(N,__VA_ARGS__))
-
-#define DEFINE_FUNC_VOID_VARARG_N(N,...)     EXPAND(DEFINE_FAKE_VOID_FUNC ## N ## _VARARG(__VA_ARGS__))
-
-
-
-
-#endif /* FAKE_FUNCTIONS */
diff --git a/mock/gio/gio.h b/mock/gio/gio.h
deleted file mode 100644 (file)
index 85e70e3..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_GDBUS_H_
-#define MOCK_GDBUS_H_
-
-#include "mock.h"
-#include <glib.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef void GDBusConnection;
-typedef void GCancellable;
-typedef enum
-{
-       G_BUS_TYPE_STARTER = -1,
-       G_BUS_TYPE_NONE = 0,
-       G_BUS_TYPE_SYSTEM  = 1,
-       G_BUS_TYPE_SESSION = 2
-} GBusType;
-typedef struct _GError GError;
-typedef char gchar;
-typedef short gshort;
-typedef long glong;
-typedef int gint;
-typedef gint gboolean;
-typedef unsigned char guchar;
-typedef unsigned short gushort;
-typedef unsigned long gulong;
-typedef unsigned int guint;
-
-typedef unsigned short guint16;
-typedef unsigned int guint32;
-
-typedef void* gpointer;
-typedef const void *gconstpointer;
-typedef guint32 GQuark;
-typedef int GDBusMessage;
-
-
-/**
- * GBusNameOwnerFlags:
- * @G_BUS_NAME_OWNER_FLAGS_NONE: No flags set.
- * @G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT: Allow another message bus connection to claim the name.
- * @G_BUS_NAME_OWNER_FLAGS_REPLACE: If another message bus connection owns the name and have
- * specified #G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT, then take the name from the other connection.
- * @G_BUS_NAME_OWNER_FLAGS_DO_NOT_QUEUE: Do not place message bus connection in a queue to own the name.
- *
- * Flags used in g_bus_own_name().
- *
- * Since: 2.26
- */
-typedef enum
-{
-       G_BUS_NAME_OWNER_FLAGS_NONE = 0,                    /*< nick=none >*/
-       G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT = (1<<0),  /*< nick=allow-replacement >*/
-       G_BUS_NAME_OWNER_FLAGS_REPLACE = (1<<1),            /*< nick=replace >*/
-       G_BUS_NAME_OWNER_FLAGS_DO_NOT_QUEUE = (1<<2)        /*< nick=do-not-queue >*/
-} GBusNameOwnerFlags;
-typedef enum
-{
-       G_BUS_NAME_WATCHER_FLAGS_NONE = 0,
-       G_BUS_NAME_WATCHER_FLAGS_AUTO_START = (1<<0)
-} GBusNameWatcherFlags;
-
-typedef enum
-{
-       G_DBUS_SEND_MESSAGE_FLAGS_NONE = 0,
-       G_DBUS_SEND_MESSAGE_FLAGS_PRESERVE_SERIAL = (1<<0)
-} GDBusSendMessageFlags;
-
-typedef enum /*< flags >*/
-{
-       G_DBUS_SIGNAL_FLAGS_NONE = 0,
-       G_DBUS_SIGNAL_FLAGS_NO_MATCH_RULE = (1<<0),
-       G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_NAMESPACE = (1<<1),
-       G_DBUS_SIGNAL_FLAGS_MATCH_ARG0_PATH = (1<<2)
-} GDBusSignalFlags;
-
-typedef void (*GBusNameAcquiredCallback) (GDBusConnection *connection,
-               const gchar     *name,
-               gpointer         user_data);
-
-typedef void (*GBusNameLostCallback) (GDBusConnection *connection,
-               const gchar     *name,
-               gpointer         user_data);
-
-typedef void (*GBusNameAppearedCallback) (GDBusConnection *connection,
-               const gchar     *name,
-               const gchar     *name_owner,
-               gpointer         user_data);
-
-typedef void (*GBusNameVanishedCallback) (GDBusConnection *connection,
-               const gchar     *name,
-               gpointer         user_data);
-typedef void            (*GDestroyNotify)       (gpointer       data);
-typedef void (*GDBusSignalCallback) (GDBusConnection  *connection,
-               const gchar      *sender_name,
-               const gchar      *object_path,
-               const gchar      *interface_name,
-               const gchar      *signal_name,
-               GVariant         *parameters,
-               gpointer          user_data);
-
-DECLARE_FAKE_VALUE_FUNC(GDBusConnection *, g_bus_get_sync, GBusType,
-               GCancellable *, GError **);
-DECLARE_FAKE_VALUE_FUNC(guint, g_bus_own_name_on_connection,
-               GDBusConnection *, const gchar *, GBusNameOwnerFlags,
-               GBusNameAcquiredCallback, GBusNameLostCallback, gpointer,
-               GDestroyNotify);
-DECLARE_FAKE_VALUE_FUNC(gboolean, g_dbus_connection_emit_signal,
-               GDBusConnection *, const gchar *, const gchar *,
-               const gchar *, const gchar *, GVariant *, GError **);
-DECLARE_FAKE_VALUE_FUNC(guint, g_bus_watch_name,
-               GBusType, const gchar *, GBusNameWatcherFlags,
-               GBusNameAppearedCallback, GBusNameVanishedCallback, gpointer,
-               GDestroyNotify);
-
-DECLARE_FAKE_VALUE_FUNC(guint, g_bus_watch_name_on_connection,
-               GDBusConnection *, const gchar *, GBusNameWatcherFlags,
-               GBusNameAppearedCallback, GBusNameVanishedCallback, gpointer,
-               GDestroyNotify);
-
-DECLARE_FAKE_VALUE_FUNC(GDBusMessage *, g_dbus_message_new_method_call,
-               const gchar *, const gchar *, const gchar *, const gchar *);
-
-DECLARE_FAKE_VOID_FUNC(g_dbus_message_set_body, GDBusMessage  *,
-               GVariant *);
-
-DECLARE_FAKE_VALUE_FUNC(GDBusMessage *, g_dbus_connection_send_message_with_reply_sync,
-               GDBusConnection *, GDBusMessage *, GDBusSendMessageFlags, gint,
-               volatile guint32 *, GCancellable *, GError **);
-DECLARE_FAKE_VOID_FUNC(g_object_unref, gpointer);
-DECLARE_FAKE_VALUE_FUNC(GVariant *, g_dbus_message_get_body, GDBusMessage *);
-DECLARE_FAKE_VOID_FUNC(g_dbus_connection_signal_unsubscribe, GDBusConnection *,
-               guint);
-
-DECLARE_FAKE_VOID_FUNC(g_bus_unwatch_name, guint);
-
-DECLARE_FAKE_VALUE_FUNC(guint, g_dbus_connection_signal_subscribe,
-               GDBusConnection *, const gchar *, const gchar *,
-               const gchar *, const gchar *, const gchar *,
-               GDBusSignalFlags, GDBusSignalCallback,
-               gpointer, GDestroyNotify);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_GDBUS_H_ */
diff --git a/mock/mock.cc b/mock/mock.cc
deleted file mode 100644 (file)
index 331f5c6..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-// Copyright (c) 2019 Samsung Electronics Co., Ltd All Rights Reserved
-// Use of this source code is governed by a apache 2.0 license that can be
-// found in the LICENSE file.
-
-#include "app_common.h"
-#include "mock.h"
-#include "gio/gio.h"
-#include "system_info_mock.h"
-#include "cynara_mock.h"
-#include "evas_mock.h"
-#include "aul_mock.h"
-#include "appsvc_mock.h"
-#include "widget_service_mock.h"
-#include "vconf_mock.h"
-
-DEFINE_FFF_GLOBALS;
-
-DEFINE_FAKE_VALUE_FUNC(int, app_get_name, char**);
-DEFINE_FAKE_VALUE_FUNC(int, app_get_id, char**);
-DEFINE_FAKE_VALUE_FUNC(char*, app_get_data_path);
-
-/* system */
-DEFINE_FAKE_VALUE_FUNC(int, system_info_get_platform_bool,
-    const char*, bool*);
-
-/* cynara */
-DEFINE_FAKE_VALUE_FUNC(int, cynara_initialize, cynara**,
-    const cynara_configuration*);
-DEFINE_FAKE_VALUE_FUNC(int, cynara_finish, cynara*);
-DEFINE_FAKE_VALUE_FUNC(int, cynara_check, cynara*,
-    const char*, const char*, const char*, const char*);
-DEFINE_FAKE_VALUE_FUNC(int, cynara_creds_gdbus_get_client, GDBusConnection*,
-    const gchar*, enum cynara_client_creds, gchar**);
-DEFINE_FAKE_VALUE_FUNC(int, cynara_creds_gdbus_get_user, GDBusConnection*,
-    const gchar*, enum cynara_user_creds, gchar**);
-
-/* evas */
-DEFINE_FAKE_VALUE_FUNC(Evas_Object *, elm_win_add, Evas_Object *,
-               const char *, Elm_Win_Type);
-DEFINE_FAKE_VALUE_FUNC(int, elm_win_aux_hint_add, Evas_Object *, const char *,
-               const char *);
-DEFINE_FAKE_VALUE_FUNC(Evas *, evas_object_evas_get, const Eo *);
-DEFINE_FAKE_VALUE_FUNC(Evas_Object *, elm_layout_add, Evas_Object *);
-DEFINE_FAKE_VALUE_FUNC(Eina_Bool, elm_layout_file_set, Eo *, const char *,
-               const char *);
-DEFINE_FAKE_VOID_FUNC(evas_object_data_set, Evas_Object *, const char *,
-               const void *);
-DEFINE_FAKE_VALUE_FUNC(void *, evas_object_data_get, const Evas_Object *,
-               const char *);
-DEFINE_FAKE_VOID_FUNC(evas_object_event_callback_add, Evas_Object *,
-               Evas_Callback_Type, Evas_Object_Event_Cb, const void *);
-DEFINE_FAKE_VOID_FUNC(elm_object_signal_callback_add, Evas_Object *,
-               const char *, const char *, Edje_Signal_Cb, void *);
-DEFINE_FAKE_VOID_FUNC(evas_object_smart_callback_add, Evas_Object *,
-               const char *, Evas_Smart_Cb, const void *);
-DEFINE_FAKE_VALUE_FUNC(void *, evas_object_smart_callback_del, Evas_Object *,
-               const char *, Evas_Smart_Cb);
-DEFINE_FAKE_VOID_FUNC(elm_object_part_content_set, Evas_Object *, const char *,
-               Evas_Object *);
-DEFINE_FAKE_VALUE_FUNC(Evas_Object *, elm_object_part_content_get,
-               const Evas_Object *, const char *);
-DEFINE_FAKE_VOID_FUNC(elm_object_signal_emit, Evas_Object *, const char  *,
-        const char  *);
-DEFINE_FAKE_VOID_FUNC(evas_object_geometry_get, const Evas_Object *,
-    Evas_Coord *, Evas_Coord *, Evas_Coord *, Evas_Coord *);
-DEFINE_FAKE_VALUE_FUNC(Evas_Native_Surface *,
-    evas_object_image_native_surface_get, const Evas_Object *);
-DEFINE_FAKE_VALUE_FUNC(int, tbm_surface_map, tbm_surface_h,
-    int, tbm_surface_info_s *);
-DEFINE_FAKE_VALUE_FUNC(int, tbm_surface_unmap, tbm_surface_h);
-DEFINE_FAKE_VALUE_FUNC(Ecore_Evas*, ecore_evas_ecore_evas_get, const Evas*);
-DEFINE_FAKE_VALUE_FUNC(Ecore_Wl2_Window*, ecore_evas_wayland2_window_get,
-                        const Ecore_Evas*);
-DEFINE_FAKE_VALUE_FUNC(const char*, elm_win_aux_msg_key_get,
-                        Evas_Object*, Elm_Win_Aux_Message*);
-DEFINE_FAKE_VALUE_FUNC(const char*, elm_win_aux_msg_val_get,
-                        Evas_Object*, Elm_Win_Aux_Message*);
-
-/* aul */
-DEFINE_FAKE_VALUE_FUNC(int, aul_app_get_appid_bypid, int, char *, int);
-DEFINE_FAKE_VALUE_FUNC_VARARG(int, aul_widget_write_log, const char *, const char *, ...);
-
-DEFINE_FAKE_VALUE_FUNC(int, aul_app_com_create, const char *,
-    aul_app_com_permission_h, app_com_cb, void *, aul_app_com_connection_h *);
-DEFINE_FAKE_VALUE_FUNC(int, aul_app_com_leave, aul_app_com_connection_h);
-DEFINE_FAKE_VALUE_FUNC(int, aul_app_com_send, const char *, bundle *);
-
-/* appsvc */
-DEFINE_FAKE_VALUE_FUNC(int, appsvc_run_service, bundle*, int, appsvc_res_fn, void*);
-
-/* widget_service */
-DEFINE_FAKE_VALUE_FUNC(int, widget_service_get_widget_max_count, const char *);
-DEFINE_FAKE_VALUE_FUNC(int, widget_instance_create, const char *, char **);
-
-/* vconf */
-DEFINE_FAKE_VALUE_FUNC(char *, vconf_get_str, const char *);
-DEFINE_FAKE_VALUE_FUNC(int, vconf_notify_key_changed, const char *,
-    vconf_callback_fn, void *);
-DEFINE_FAKE_VALUE_FUNC(int, vconf_ignore_key_changed,
-    const char *, vconf_callback_fn);
-DEFINE_FAKE_VALUE_FUNC(int, vconf_set_str,
-    const char *, const char *);
diff --git a/mock/mock.h b/mock/mock.h
deleted file mode 100644 (file)
index 23adbd0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_MOCK_H__
-#define MOCK_MOCK_H__
-
-#include "fff.h"
-
-#endif // MOCK_MOCK_H__
diff --git a/mock/system_info_mock.h b/mock/system_info_mock.h
deleted file mode 100644 (file)
index cd5e0a4..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_SYSTEM_INFO_H_
-#define MOCK_SYSTEM_INFO_H_
-
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-DECLARE_FAKE_VALUE_FUNC(int, system_info_get_platform_bool,
-                const char *, bool *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_SYSTEM_INFO_H_ */
\ No newline at end of file
diff --git a/mock/tzplatform_config_mock.h b/mock/tzplatform_config_mock.h
deleted file mode 100644 (file)
index 848ae05..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_TZPLATFORM_CONFIG_H_
-#define MOCK_TZPLATFORM_CONFIG_H_
-
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-enum tzplatform_variable {
-       USER = 0,
-       SYSTEM = 1,
-};
-
-DECLARE_FAKE_VALUE_FUNC(const char *, tzplatform_mkpath,
-               enum tzplatform_variable, const char *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_TZPLATFORM_CONFIG_H_ */
diff --git a/mock/vconf_mock.h b/mock/vconf_mock.h
deleted file mode 100644 (file)
index 5acbbd9..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_VCONF_H_
-#define MOCK_VCONF_H_
-
-#include <vconf.h>
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-DECLARE_FAKE_VALUE_FUNC(char *, vconf_get_str, const char *);
-DECLARE_FAKE_VALUE_FUNC(int, vconf_notify_key_changed, const char *,
-    vconf_callback_fn, void *);
-DECLARE_FAKE_VALUE_FUNC(int, vconf_ignore_key_changed,
-    const char *, vconf_callback_fn);
-DECLARE_FAKE_VALUE_FUNC(int, vconf_set_str,
-    const char *, const char *);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_VCONF_H_ */
diff --git a/mock/widget_service_mock.h b/mock/widget_service_mock.h
deleted file mode 100644 (file)
index d5db7f6..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_WIDGET_SERVICE_H_
-#define MOCK_WIDGET_SERVICE_H_
-
-#include <widget_service.h>
-#include "mock.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-DECLARE_FAKE_VALUE_FUNC(int, widget_service_get_widget_max_count, const char *);
-DECLARE_FAKE_VALUE_FUNC(int, widget_instance_create, const char *, char **);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_WIDGET_SERVICE_H_ */
index 64e1244ed82f10dcfebfd83a3206ecd1ec85818c..0a623d9117734a46e6a71000482eb59cfd6b283b 100644 (file)
@@ -40,12 +40,13 @@ BuildRequires: pkgconfig(ecore-wl2)
 BuildRequires: pkgconfig(wayland-tbm-client)
 BuildRequires: pkgconfig(screen_connector_watcher_evas)
 BuildRequires: pkgconfig(capi-system-device)
-BuildRequires: pkgconfig(gmock)
 BuildRequires: pkgconfig(screen_connector_launcher_service)
 BuildRequires: pkgconfig(screen_connector_shared_widget_launch)
 BuildRequires: pkgconfig(libsmack)
 BuildRequires: pkgconfig(screen_connector_remote_surface_evas_mock)
 BuildRequires: pkgconfig(uuid)
+BuildRequires:  pkgconfig(gmock)
+
 %if 0%{?gcov:1}
 BuildRequires:  lcov
 BuildRequires:  zip
@@ -95,14 +96,6 @@ install -m 0644 widget-viewer.zip %{buildroot}%{_datadir}/gcov/obj/
 %install
 rm -rf %{buildroot}
 %make_install
-
-%if 0%{?gcov:1}
-builddir=$(basename $PWD)
-gcno_obj_dir=%{buildroot}%{_datadir}/gcov/obj/%{name}/"$builddir"
-mkdir -p "$gcno_obj_dir"
-find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';'
-%endif
-
 cat << EOF > run-unittest.sh
 #!/bin/sh
 setup() {
@@ -111,7 +104,7 @@ setup() {
 
 test_main() {
     echo "test_main start"
-    /usr/bin/widget-viewer_unittests
+    /usr/bin/widget_viewer-unittests
 }
 
 teardown() {
@@ -130,6 +123,14 @@ EOF
 mkdir -p %{buildroot}%{_bindir}/tizen-unittests/%{name}
 install -m 0755 run-unittest.sh %{buildroot}%{_bindir}/tizen-unittests/%{name}/
 
+%if 0%{?gcov:1}
+builddir=$(basename $PWD)
+gcno_obj_dir=%{buildroot}%{_datadir}/gcov/obj/%{name}/"$builddir"
+mkdir -p "$gcno_obj_dir"
+find . -name '*.gcno' -exec cp --parents '{}' "$gcno_obj_dir" ';'
+%endif
+
+
 %post -n %{name} -p /sbin/ldconfig
 %postun -n %{name} -p /sbin/ldconfig
 
@@ -170,17 +171,17 @@ While developing the widget applications, this viewer will load it and execute i
 %postun -n org.tizen.widget_viewer_sdk -p /sbin/ldconfig
 
 #################################################
-# widget-viewer_unittests
+# widget_viewer-unittests
 #################################################
-%package -n widget-viewer_unittests
+%package -n widget_viewer-unittests
 Summary:    GTest for widget-viewer
 Group:      Development/Libraries
 
-%description -n widget-viewer_unittests
+%description -n widget_viewer-unittests
 GTest for widget-viewer
 
-%files -n widget-viewer_unittests
-%{_bindir}/widget-viewer_unittests
+%files -n widget_viewer-unittests
+%{_bindir}/widget_viewer-unittests
 %{_bindir}/tizen-unittests/%{name}/run-unittest.sh
 
 #################################################
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c90fac8
--- /dev/null
@@ -0,0 +1 @@
+ADD_SUBDIRECTORY(unit_tests)
diff --git a/tests/mock/appsvc_mock.cc b/tests/mock/appsvc_mock.cc
new file mode 100644 (file)
index 0000000..0c8c081
--- /dev/null
@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "appsvc_mock.h"
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" int appsvc_run_service(bundle *arg0, int arg1, appsvc_res_fn arg2,
+    void *arg3) {
+  return MOCK_HOOK_P4(AppSvcMock, appsvc_run_service, arg0, arg1, arg2, arg3);
+}
\ No newline at end of file
diff --git a/tests/mock/appsvc_mock.h b/tests/mock/appsvc_mock.h
new file mode 100644 (file)
index 0000000..5153733
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_APPSVC_MOCK_H_
+#define MOCK_APPSVC_MOCK_H_
+
+#include <appsvc.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class AppSvcMock : public virtual ModuleMock {
+ public:
+  virtual ~AppSvcMock() {}
+
+  MOCK_METHOD4(appsvc_run_service, int (bundle*, int, appsvc_res_fn, void*));
+};
+
+#endif  // MOCK_APPSVC_MOCK_H_
\ No newline at end of file
diff --git a/tests/mock/aul_mock.cc b/tests/mock/aul_mock.cc
new file mode 100644 (file)
index 0000000..9165647
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "aul_mock.h"
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" int aul_app_get_appid_bypid(int arg0, char* arg1, int arg2) {
+  return MOCK_HOOK_P3(AulMock, aul_app_get_appid_bypid, arg0, arg1, arg2);
+}
+extern "C" int aul_app_com_create(const char* arg0,
+    aul_app_com_permission_h arg1, app_com_cb arg2, void* arg3,
+    aul_app_com_connection_h* arg4) {
+  return MOCK_HOOK_P5(AulMock, aul_app_com_create, arg0, arg1, arg2, arg3, arg4);
+}
+extern "C" int aul_app_com_leave(aul_app_com_connection_h arg0) {
+  return MOCK_HOOK_P1(AulMock, aul_app_com_leave, arg0);
+}
+
+extern "C" int aul_app_com_send(const char* arg0, bundle* arg1) {
+  return MOCK_HOOK_P2(AulMock, aul_app_com_send, arg0, arg1);
+}
+
+extern "C" int aul_svc_set_appid(bundle* arg0, const char* arg1) {
+  return MOCK_HOOK_P2(AulMock, aul_svc_set_appid, arg0, arg1);
+}
\ No newline at end of file
diff --git a/tests/mock/aul_mock.h b/tests/mock/aul_mock.h
new file mode 100644 (file)
index 0000000..56c1d00
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_AUL_MOCK_H_
+#define MOCK_AUL_MOCK_H_
+
+#include <aul.h>
+#include <aul_rsc_mgr.h>
+#include <aul_rpc_port.h>
+#include <aul_app_com.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class AulMock : public virtual ModuleMock {
+ public:
+  virtual ~AulMock() {}
+
+  MOCK_METHOD3(aul_app_get_appid_bypid, int (int, char*, int));
+  MOCK_METHOD1(aul_app_com_leave, int (aul_app_com_connection_h));
+
+  MOCK_METHOD5(aul_app_com_create, int (const char *, aul_app_com_permission_h,
+      app_com_cb, void *, aul_app_com_connection_h *));
+  MOCK_METHOD2(aul_app_com_send, int (const char*, bundle*));
+  MOCK_METHOD2(aul_svc_set_appid, int (bundle*, const char*));
+};
+
+#endif  // MOCK_AUL_MOCK_H_
\ No newline at end of file
diff --git a/tests/mock/evas_mock.cc b/tests/mock/evas_mock.cc
new file mode 100644 (file)
index 0000000..ffc5b38
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "evas_mock.h"
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" void evas_object_geometry_get(const Evas_Object* arg0,
+    Evas_Coord* arg1, Evas_Coord* arg2, Evas_Coord* arg3, Evas_Coord* arg4) {
+  return MOCK_HOOK_P5(EvasMock, evas_object_geometry_get, arg0, arg1, arg2, arg3, arg4);
+}
+
+extern "C" Evas_Object* elm_win_add(Evas_Object* arg0,
+        const char* arg1, Elm_Win_Type arg2) {
+  return MOCK_HOOK_P3(EvasMock, elm_win_add, arg0, arg1, arg2);
+}
+
+extern "C" int tbm_surface_map(tbm_surface_h arg0,
+        int arg1, tbm_surface_info_s* arg2) {
+  return MOCK_HOOK_P3(EvasMock, tbm_surface_map, arg0, arg1, arg2);
+}
+
+extern "C" int tbm_surface_unmap(tbm_surface_h arg0) {
+  return MOCK_HOOK_P1(EvasMock, tbm_surface_unmap, arg0);
+}
+
+extern "C" Evas_Native_Surface* evas_object_image_native_surface_get(
+    const Evas_Object* arg0) {
+  return MOCK_HOOK_P1(EvasMock, evas_object_image_native_surface_get, arg0);
+}
+
+extern "C" Evas* evas_object_evas_get(const Eo* arg0) {
+  return MOCK_HOOK_P1(EvasMock, evas_object_evas_get, arg0);
+}
+
+extern "C" Ecore_Evas* ecore_evas_ecore_evas_get(const Evas* arg0) {
+  return MOCK_HOOK_P1(EvasMock, ecore_evas_ecore_evas_get, arg0);
+}
+
+extern "C" Ecore_Wl2_Window* ecore_evas_wayland2_window_get(
+    const Ecore_Evas* arg0) {
+  return MOCK_HOOK_P1(EvasMock, ecore_evas_wayland2_window_get, arg0);
+}
diff --git a/tests/mock/evas_mock.h b/tests/mock/evas_mock.h
new file mode 100644 (file)
index 0000000..e0274ae
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_EVAS_MOCK_H_
+#define MOCK_EVAS_MOCK_H_
+
+#include <Evas.h>
+#include <Elementary.h>
+#include <tbm_surface.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class EvasMock : public virtual ModuleMock {
+ public:
+  virtual ~EvasMock() {}
+
+  MOCK_METHOD5(evas_object_geometry_get, void (const Evas_Object*,
+      Evas_Coord*, Evas_Coord*, Evas_Coord*, Evas_Coord*));
+  MOCK_METHOD3(elm_win_add,
+      Evas_Object *(Evas_Object *, const char *, Elm_Win_Type));
+
+  MOCK_METHOD3(tbm_surface_map, int (tbm_surface_h,
+      int, tbm_surface_info_s*));
+  MOCK_METHOD1(tbm_surface_unmap, int(tbm_surface_h));
+  MOCK_METHOD1(evas_object_image_native_surface_get, Evas_Native_Surface* (
+      const Evas_Object *eo_obj));
+
+  MOCK_METHOD1(evas_object_evas_get, Evas* (const Eo *));
+  MOCK_METHOD1(ecore_evas_ecore_evas_get, Ecore_Evas* (const Evas*));
+  MOCK_METHOD1(ecore_evas_wayland2_window_get,
+      Ecore_Wl2_Window* (const Ecore_Evas*));
+
+};
+
+#endif  // MOCK_EVAS_MOCK_H_
\ No newline at end of file
diff --git a/tests/mock/mock_hook.h b/tests/mock/mock_hook.h
new file mode 100644 (file)
index 0000000..42f06f5
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_MOCK_HOOK_H_
+#define MOCK_MOCK_HOOK_H_
+
+#define MOCK_HOOK_P0(MOCK_CLASS, f)                                            \
+    TestFixture::GetMock<MOCK_CLASS>().f()
+#define MOCK_HOOK_P1(MOCK_CLASS, f, p1)                                        \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1)
+#define MOCK_HOOK_P2(MOCK_CLASS, f, p1, p2)                                    \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2)
+#define MOCK_HOOK_P3(MOCK_CLASS, f, p1, p2, p3)                                \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3)
+#define MOCK_HOOK_P4(MOCK_CLASS, f, p1, p2, p3, p4)                            \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4)
+#define MOCK_HOOK_P5(MOCK_CLASS, f, p1, p2, p3, p4, p5)                        \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5)
+#define MOCK_HOOK_P6(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6)                    \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6)
+#define MOCK_HOOK_P7(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7)                \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6, p7)
+#define MOCK_HOOK_P8(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8)            \
+    TestFixture::GetMock<MOCK_CLASS>().f(p1, p2, p3, p4, p5, p6, p7, p8)
+#define MOCK_HOOK_P10(MOCK_CLASS, f, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)  \
+    TestFixture::GetMock<MOCK_CLASS>().f(                                      \
+        p1, p2, p3, p4, p5, p6, p7, p8, p9, p10)
+
+#endif  // MOCK_MOCK_HOOK_H_
diff --git a/tests/mock/module_mock.h b/tests/mock/module_mock.h
new file mode 100644 (file)
index 0000000..bfc64f7
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_MODULE_MOCK_H_
+#define MOCK_MODULE_MOCK_H_
+
+class ModuleMock {
+ public:
+  virtual ~ModuleMock() {}
+};
+
+#endif  // MOCK_MODULE_MOCK_H_
diff --git a/tests/mock/system_info_mock.cc b/tests/mock/system_info_mock.cc
new file mode 100644 (file)
index 0000000..2c53fbe
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "system_info_mock.h"
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" int system_info_get_platform_bool(const char* arg0, bool* arg1) {
+  return MOCK_HOOK_P2(SystemInfoMock, system_info_get_platform_bool, arg0, arg1);
+}
diff --git a/tests/mock/system_info_mock.h b/tests/mock/system_info_mock.h
new file mode 100644 (file)
index 0000000..77f1fea
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_SYSTEM_INFO_MOCK_H_
+#define MOCK_SYSTEM_INFO_MOCK_H_
+
+#include <system_info.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class SystemInfoMock : public virtual ModuleMock {
+ public:
+  virtual ~SystemInfoMock() {}
+
+  MOCK_METHOD2(system_info_get_platform_bool, int (const char *, bool *));
+
+};
+
+#endif  // MOCK_SYSTEM_INFO_MOCK_H_
\ No newline at end of file
diff --git a/tests/mock/test_fixture.cc b/tests/mock/test_fixture.cc
new file mode 100644 (file)
index 0000000..e9e0e93
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "test_fixture.h"
+
+#include <memory>
+
+std::unique_ptr<ModuleMock> TestFixture::mock_;
diff --git a/tests/mock/test_fixture.h b/tests/mock/test_fixture.h
new file mode 100644 (file)
index 0000000..4383654
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_TEST_FIXTURE_H_
+#define MOCK_TEST_FIXTURE_H_
+
+#include <gtest/gtest.h>
+
+#include <memory>
+#include <stdexcept>
+#include <string>
+#include <utility>
+
+#include "module_mock.h"
+
+class TestFixture : public ::testing::Test {
+ public:
+  explicit TestFixture(std::unique_ptr<ModuleMock>&& mock) {
+    mock_ = std::move(mock);
+  }
+  virtual ~TestFixture() {
+    mock_.reset();
+  }
+
+  virtual void SetUp() {}
+  virtual void TearDown() {}
+
+  template <typename T>
+  static T& GetMock() {
+    auto ptr = dynamic_cast<T*>(mock_.get());
+    if (ptr == nullptr) {
+      throw std::invalid_argument("The test does not provide mock of \"" +
+          std::string(typeid(T).name()) + "\"");
+    }
+    return *ptr;
+  }
+
+  static std::unique_ptr<ModuleMock> mock_;
+};
+
+#endif  // MOCK_TEST_FIXTURE_H_
diff --git a/tests/mock/vconf_mock.cc b/tests/mock/vconf_mock.cc
new file mode 100644 (file)
index 0000000..c7e1899
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "vconf_mock.h"
+#include "mock_hook.h"
+#include "test_fixture.h"
+
+extern "C" char* vconf_get_str(const char* arg0) {
+  return MOCK_HOOK_P1(VconfMock, vconf_get_str, arg0);
+}
+
+extern "C" int vconf_set_str(const char* arg0, const char* arg1) {
+  return MOCK_HOOK_P2(VconfMock, vconf_set_str, arg0, arg1);
+}
+
+extern "C" int vconf_ignore_key_changed(const char* arg0,
+    vconf_callback_fn arg1) {
+  return MOCK_HOOK_P2(VconfMock, vconf_ignore_key_changed, arg0, arg1);
+}
+
+extern "C" int vconf_notify_key_changed(const char* arg0,
+    vconf_callback_fn arg1, void* arg2) {
+  return MOCK_HOOK_P3(VconfMock, vconf_notify_key_changed, arg0, arg1, arg2);
+}
+
diff --git a/tests/mock/vconf_mock.h b/tests/mock/vconf_mock.h
new file mode 100644 (file)
index 0000000..d7f74c9
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef MOCK_VCONF_MOCK_H_
+#define MOCK_VCONF_MOCK_H_
+
+#include <vconf.h>
+#include <gmock/gmock.h>
+
+#include "module_mock.h"
+
+class VconfMock : public virtual ModuleMock {
+ public:
+  virtual ~VconfMock() {}
+
+  MOCK_METHOD1(vconf_get_str, char* (const char*));
+  MOCK_METHOD2(vconf_set_str, int (const char*, const char*));
+  MOCK_METHOD2(vconf_ignore_key_changed, int (const char*,
+    vconf_callback_fn));
+  MOCK_METHOD3(vconf_notify_key_changed, int (const char*,
+    vconf_callback_fn, void*));
+};
+
+#endif  // MOCK_VCONF_MOCK_H_
\ No newline at end of file
diff --git a/tests/unit_tests/CMakeLists.txt b/tests/unit_tests/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1ea1c2d
--- /dev/null
@@ -0,0 +1,75 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)\r
+PROJECT(widget_viewer-unittests C CXX)\r
+\r
+INCLUDE(FindPkgConfig)\r
+PKG_CHECK_MODULES(${PROJECT_NAME}-unittests REQUIRED\r
+    dlog\r
+    aul\r
+    glib-2.0\r
+    gio-2.0\r
+    sqlite3\r
+    db-util\r
+    widget_service\r
+    vconf\r
+    elementary\r
+    pkgmgr-info\r
+    capi-appfw-application\r
+    appcore-efl\r
+    capi-system-info\r
+    efl-extension\r
+    wayland-client\r
+    libtbm\r
+    libtzplatform-config\r
+    cynara-client\r
+    appsvc\r
+    ecore-wl2\r
+    wayland-tbm-client\r
+    screen_connector_watcher_evas\r
+    capi-system-device\r
+    screen_connector_launcher_service\r
+    screen_connector_shared_widget_launch\r
+    libsmack\r
+    screen_connector_remote_surface_evas_mock\r
+    uuid\r
+    gmock\r
+)\r
+\r
+FOREACH(flag ${${PROJECT_NAME}-unittests_CFLAGS})\r
+    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")\r
+ENDFOREACH(flag)\r
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror")\r
+\r
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++14")\r
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")\r
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2")\r
+\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../ambient-viewer/src)\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../ambient-viewer/include)\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../watch-holder/src)\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../../watch-holder-base/src)\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../mock)\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../)\r
+\r
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/src TEST_SOURCES)\r
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../mock MOCK_SOURCES)\r
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../../ambient-viewer/src AMBIENT_VIEWER_SOURCES)\r
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../../watch-holder-base/src WATCH_HOLDER_BASE_SOURCES)\r
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../../watch-holder/src WATCH_HOLDER_SOURCES)\r
+\r
+ADD_EXECUTABLE(${PROJECT_NAME}\r
+    ${TEST_SOURCES}\r
+    ${MOCK_SOURCES}\r
+    ${AMBIENT_VIEWER_SOURCES}\r
+    ${WATCH_HOLDER_BASE_SOURCES}\r
+    ${WATCH_HOLDER_SOURCES}\r
+)\r
+\r
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}")\r
+TARGET_LINK_LIBRARIES(${PROJECT_NAME}\r
+    ${${PROJECT_NAME}-unittests_LDFLAGS}\r
+    gmock\r
+    ambient-viewer\r
+    watch-holder\r
+)\r
+\r
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/)\r
diff --git a/tests/unit_tests/src/main.cc b/tests/unit_tests/src/main.cc
new file mode 100644 (file)
index 0000000..d473442
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+int main(int argc, char** argv) {
+  int ret = -1;
+
+  try {
+    testing::InitGoogleTest(&argc, argv);
+  } catch(...) {
+    std::cout << "Exception occurred" << std::endl;
+  }
+
+  try {
+    ret = RUN_ALL_TESTS();
+  } catch (const ::testing::internal::GoogleTestFailureException& e) {
+    ret = -1;
+    std::cout << "GoogleTestFailureException was thrown:" << e.what() << std::endl;
+  }
+
+  return ret;
+}
diff --git a/tests/unit_tests/src/test_ambient_viewer.cc b/tests/unit_tests/src/test_ambient_viewer.cc
new file mode 100644 (file)
index 0000000..31a9286
--- /dev/null
@@ -0,0 +1,438 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include <ambient-viewer.hh>
+#include <watch-surface.hh>
+#include <top-app-surface.hh>
+
+#include "mock/test_fixture.h"
+#include "mock/vconf_mock.h"
+#include "mock/aul_mock.h"
+#include "mock/evas_mock.h"
+#include "mock/system_info_mock.h"
+#include "ambient_viewer.h"
+#include "ambient_viewer_common.h"
+
+#define NOTIFY_CHANGED_EVENT_APPID_KEY "__NOTIFY_CHANGED_EVENT_APPID_KEY__"
+#define NOTIFY_CHANGED_EVENT_RID_KEY "__NOTIFY_CHANGED_EVENT_RID_KEY__"
+
+using namespace std;
+using namespace ambient_viewer;
+using namespace tizen_base;
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::Return;
+
+namespace {
+
+
+gchar __not_null;
+app_com_cb __app_com_callback;
+void* __app_com_user_data;
+Evas_Native_Surface __fake_ns;
+tbm_surface_info_s __fake_surf_info;
+int __fake_buf[100][100];
+
+int __system_info_get_platform_bool(const char* key, bool* value) {
+  *value = true;
+  return 0;
+}
+
+void __evas_object_geometry_get(const Evas_Object *eo_obj, Evas_Coord *x,
+    Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) {
+  *w = 100;
+  *h = 100;
+}
+
+Evas_Native_Surface* __evas_object_image_native_surface_get(
+    const Evas_Object *eo_obj) {
+  __fake_ns.data.tbm.buffer = &__not_null;
+  return &__fake_ns;
+}
+
+int __tbm_surface_map(tbm_surface_h surface, int opt,
+    tbm_surface_info_s *info) {
+  __fake_surf_info.planes[0].ptr = reinterpret_cast<unsigned char*>(
+      &__fake_buf[0][0]);
+  *info = __fake_surf_info;
+  return TBM_SURFACE_ERROR_NONE;
+}
+
+int __tbm_surface_unmap(tbm_surface_h surface) {
+  return TBM_SURFACE_ERROR_NONE;
+}
+
+void __receive_fake_message() {
+  Bundle b;
+  b.Add("__APP_AMBIENT_EVENT__", "1");
+  b.Add("__APP_AMBIENT_SENDER__", "test");
+  __app_com_callback("", AUL_APP_COM_R_OK, b.GetHandle(), __app_com_user_data);
+}
+
+int __aul_app_com_create(const char *endpoint,
+    aul_app_com_permission_h permission, app_com_cb callback, void *user_data,
+    aul_app_com_connection_h *connection) {
+  if(strcmp(endpoint, "aod.ambientevent") == 0) {
+    __app_com_callback = callback;
+    __app_com_user_data = user_data;
+  }
+  return 0;
+}
+
+char* __vconf_get_str(const char* key) {
+  if (!key)
+    return nullptr;
+
+  if (strcmp(key, VCONFKEY_WATCH_CURRENT_WATCH_INFO) == 0) {
+    Bundle data;
+    data.Add(NOTIFY_CHANGED_EVENT_APPID_KEY, "TestAppId");
+    data.Add(NOTIFY_CHANGED_EVENT_RID_KEY, "1");
+    return strdup(reinterpret_cast<char*>(data.ToRaw().first.get()));
+  }
+
+  return nullptr;
+}
+
+int __vconf_notify_key_changed(const char* key, vconf_callback_fn cb,
+    void* user_data) {
+  return 0;
+}
+
+int __vconf_ignore_key_changed(const char* key, vconf_callback_fn cb) {
+  return 0;
+}
+
+class WatchSurfaceMock : public WatchSurface {
+ public:
+  WatchSurfaceMock(int rid, std::string id,
+      std::string appid, Evas_Object* viewer_win, IAmbientViewer* listener)
+    : WatchSurface(rid, id, std::move(appid), viewer_win, listener, true) {}
+
+  void InvokeEvasAdded() {
+    screen_connector::EvasObject eo(reinterpret_cast<Evas_Object*>(&__not_null),
+        false);
+    OnEvasAdded("TestAppId", "TestInstId", 99, eo);
+  }
+
+  void InvokeEvasRemoved() {
+    screen_connector::EvasObject eo(reinterpret_cast<Evas_Object*>(&__not_null),
+        false);
+    OnEvasRemoved("TestAppId", "TestInstId", 99, eo);
+  }
+
+  void InvokeEvasChanged() {
+    screen_connector::EvasObject eo(reinterpret_cast<Evas_Object*>(&__not_null),
+        false);
+    OnEvasChanged("TestAppId", "TestInstId", 99, eo);
+  }
+};
+
+class TopAppSurfaceMock : public TopAppSurface {
+ public:
+  TopAppSurfaceMock(std::shared_ptr<screen_connector::EvasObject> surface,
+    IAmbientViewer* listener) : TopAppSurface(surface, listener, true) {}
+
+  void InvokeWatcherAdded() {
+    OnWatcherAdded("TestAppId", "TestInstId", 99);
+  }
+
+  void InvokeWatcherChanged() {
+    screen_connector::EvasObject image(reinterpret_cast<Evas_Object*>(
+      &__not_null), false);
+    OnWatcherChanged("TestAppId", "TestInstId", 99, image);
+  }
+
+  void InvokeWatcherRemoved() {
+    OnWatcherRemoved("TestAppId", "TestInstId", 99);
+  }
+
+  void InvokeWatcherFocusChanged() {
+    OnWatcherFocusChanged("TestAppId", "TestInstId", 99);
+  }
+};
+
+class AmbientViewerStub : public AmbientViewer {
+ public:
+  AmbientViewerStub(Evas_Object* win)
+    : AmbientViewer(win) {
+  }
+  void OnAdded(const ISurface& surface) override {
+    added_ = true;
+  }
+  void OnUpdated(const ISurface& surface) override {
+    updated_ = true;
+  }
+  void OnRemoved(const ISurface& surface) override {
+    removed_ = true;
+  }
+  void OnReceived(EventType ev, string sender, Bundle extra) override {
+    AmbientViewer::OnReceived(ev, sender, extra);
+    received_ = true;
+  }
+
+ public:
+  bool added_ = false;
+  bool updated_ = false;
+  bool removed_ = false;
+  bool received_ = false;
+
+ protected:
+  std::shared_ptr<ISurface> CreateWatchSurface(int rid, std::string id,
+      std::string appid, Evas_Object* viewer_win, IAmbientViewer* listener,
+      bool mock = false) override {
+    auto suf = AmbientViewer::CreateWatchSurface(rid, id, appid,
+        viewer_win, listener, true);
+    if (suf.get() == nullptr)
+      return nullptr;
+    return make_shared<WatchSurfaceMock>(rid, id, std::move(appid),
+      viewer_win, listener);
+ }
+
+  std::shared_ptr<ISurface> CreateTopAppSurface(
+      std::shared_ptr<screen_connector::EvasObject> surface,
+      IAmbientViewer* listener, bool mock = false) override {
+    auto suf = AmbientViewer::CreateTopAppSurface(surface, listener, true);
+    if (suf.get() == nullptr)
+      return nullptr;
+    return make_shared<TopAppSurfaceMock>(surface, listener);
+  }
+};
+
+class Mocks : public ::testing::NiceMock<AulMock>,
+    virtual public ::testing::NiceMock<VconfMock>,
+    virtual public ::testing::NiceMock<EvasMock>,
+    virtual public ::testing::NiceMock<SystemInfoMock> {};
+
+} // namespace
+
+
+class AmbientViewerTest : public TestFixture {
+ public:
+  AmbientViewerTest() : TestFixture(std::make_unique<Mocks>()) {}
+  AmbientViewerStub* stub;
+
+  virtual void SetUp() {
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_get_str(_))
+        .WillRepeatedly(Invoke(__vconf_get_str));
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_notify_key_changed(_, _, _))
+        .WillRepeatedly(Invoke(__vconf_notify_key_changed));
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_ignore_key_changed(_, _))
+        .WillRepeatedly(Invoke(__vconf_ignore_key_changed));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_create(_, _, _, _, _))
+        .WillRepeatedly(Invoke(__aul_app_com_create));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_leave(_))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_send(_, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<EvasMock>(), evas_object_geometry_get(_, _, _, _, _))
+      .WillRepeatedly(Invoke(__evas_object_geometry_get));
+    EXPECT_CALL(GetMock<EvasMock>(), evas_object_image_native_surface_get(_))
+      .WillRepeatedly(Invoke(__evas_object_image_native_surface_get));
+    EXPECT_CALL(GetMock<EvasMock>(), tbm_surface_map(_, _, _))
+      .WillRepeatedly(Invoke(__tbm_surface_map));
+    EXPECT_CALL(GetMock<EvasMock>(), tbm_surface_unmap(_))
+      .WillRepeatedly(Invoke(__tbm_surface_unmap));
+    EXPECT_CALL(GetMock<SystemInfoMock>(), system_info_get_platform_bool(_, _))
+      .WillRepeatedly(Invoke(__system_info_get_platform_bool));
+
+
+    stub = new AmbientViewerStub(reinterpret_cast<Evas_Object*>(&__not_null));
+  }
+  virtual void TearDown() {
+    delete stub;
+  }
+};
+
+TEST_F(AmbientViewerTest, create) {
+  EXPECT_NE(AmbientViewerTest::stub, nullptr);
+}
+
+TEST_F(AmbientViewerTest, NotifyAmbientEvent) {
+  Bundle b;
+  EXPECT_EQ(AmbientViewerTest::stub->NotifyAmbientEvent(AmbientViewer::AMBIENT_ENTER,
+    AmbientViewer::DIRECTION_ALL, b), 0);
+}
+
+TEST_F(AmbientViewerTest, NotifyAmbientEvent2) {
+  Bundle b;
+  EXPECT_EQ(AmbientViewerTest::stub->NotifyAmbientEvent(AmbientViewer::AMBIENT_ENTER,
+    AmbientViewer::DIRECTION_VIEWER_AND_WATCH, b), 0);
+}
+
+TEST_F(AmbientViewerTest, NotifyAmbientEvent3) {
+  Bundle b;
+  EXPECT_EQ(AmbientViewerTest::stub->NotifyAmbientEvent(AmbientViewer::AMBIENT_ENTER,
+    AmbientViewer::DIRECTION_VIEWER_AND_TOP_APP, b), 0);
+}
+
+TEST_F(AmbientViewerTest, BlockUpdate) {
+  AmbientViewerTest::stub->BlockUpdate(true);
+}
+
+TEST_F(AmbientViewerTest, MonitorUnmonitor) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+
+  EXPECT_NE(&ws, nullptr);
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, WatchSurface_GetAppId) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+
+  EXPECT_EQ(ws.GetAppId(), "TestAppId");
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, WatchSurface_GetInstId) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+  WatchSurfaceMock* mock = const_cast<WatchSurfaceMock*>(
+      static_cast<const WatchSurfaceMock*>(&ws));
+  mock->InvokeEvasAdded();
+
+  EXPECT_TRUE(stub->added_);
+  EXPECT_EQ(ws.GetInstId(), "TestInstId");
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, WatchSurface_GetOpr) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+  WatchSurfaceMock* mock = const_cast<WatchSurfaceMock*>(
+      static_cast<const WatchSurfaceMock*>(&ws));
+  mock->InvokeEvasAdded();
+  EXPECT_TRUE(stub->added_);
+
+  EXPECT_EQ(ws.GetOpr(), 0);
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, AmbientViewer_Events) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+  WatchSurfaceMock* mock = const_cast<WatchSurfaceMock*>(
+      static_cast<const WatchSurfaceMock*>(&ws));
+
+  mock->InvokeEvasAdded();
+  EXPECT_TRUE(stub->added_);
+  mock->InvokeEvasChanged();
+  EXPECT_TRUE(stub->updated_);
+  mock->InvokeEvasRemoved();
+  EXPECT_TRUE(stub->removed_);
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, WatchSurface_IsWatch) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+
+  EXPECT_TRUE(ws.IsWatch());
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, AmbientViewer_OnReceived) {
+  stub->Monitor();
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+
+  EXPECT_TRUE(stub->received_);
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, TopAppSurface_IsWatch) {
+  stub->Monitor(true);
+  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
+  ASSERT_NE(&ws, nullptr);
+
+  EXPECT_FALSE(ws.IsWatch());
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, TopAppSurface_GetAppId) {
+  stub->Monitor(true);
+  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
+  ASSERT_NE(&ws, nullptr);
+  TopAppSurfaceMock* mock = const_cast<TopAppSurfaceMock*>(
+      static_cast<const TopAppSurfaceMock*>(&ws));
+  mock->InvokeWatcherAdded();
+
+  EXPECT_EQ(ws.GetAppId(), "TestAppId");
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, TopAppSurface_GetInstId) {
+  stub->Monitor(true);
+  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
+  ASSERT_NE(&ws, nullptr);
+  TopAppSurfaceMock* mock = const_cast<TopAppSurfaceMock*>(
+      static_cast<const TopAppSurfaceMock*>(&ws));
+  mock->InvokeWatcherAdded();
+  mock->InvokeWatcherChanged();
+  mock->InvokeWatcherFocusChanged();
+
+  EXPECT_EQ(ws.GetInstId(), "TestInstId");
+
+  mock->InvokeWatcherRemoved();
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, TopAppSurface_GetOpr) {
+  stub->Monitor(true);
+  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
+  ASSERT_NE(&ws, nullptr);
+  TopAppSurfaceMock* mock = const_cast<TopAppSurfaceMock*>(
+      static_cast<const TopAppSurfaceMock*>(&ws));
+  mock->InvokeWatcherAdded();
+  mock->InvokeWatcherChanged();
+  mock->InvokeWatcherFocusChanged();
+
+  EXPECT_EQ(ws.GetOpr(), 0);
+
+  stub->Unmonitor();
+}
+
+TEST_F(AmbientViewerTest, AmbientViewer_OnReceived2) {
+  stub->Monitor(true);
+  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
+  ASSERT_NE(&ws, nullptr);
+  stub->received_ = false;
+  __receive_fake_message();
+
+  EXPECT_TRUE(stub->received_);
+
+  stub->Unmonitor();
+}
diff --git a/tests/unit_tests/src/test_ambient_viewer_stub.cc b/tests/unit_tests/src/test_ambient_viewer_stub.cc
new file mode 100644 (file)
index 0000000..3005216
--- /dev/null
@@ -0,0 +1,353 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include "ambient_viewer.h"
+#include "ambient_viewer_common.h"
+#include "mock/aul_mock.h"
+#include "mock/vconf_mock.h"
+#include "mock/evas_mock.h"
+#include "mock/test_fixture.h"
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::Return;
+
+extern "C" int ambient_viewer_monitor_full(ambient_viewer_h handle,
+    ambient_viewer_lifecycle_s lifecycle, void *user_data);
+
+namespace {
+
+gchar __not_null;
+Evas_Native_Surface __fake_ns;
+tbm_surface_info_s __fake_surf_info;
+int __fake_buf[100][100];
+
+void __evas_object_geometry_get(const Evas_Object *eo_obj, Evas_Coord *x,
+    Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) {
+  *w = 100;
+  *h = 100;
+}
+
+Evas_Native_Surface* __evas_object_image_native_surface_get(
+    const Evas_Object *eo_obj) {
+  __fake_ns.data.tbm.buffer = &__not_null;
+  return &__fake_ns;
+}
+
+int __tbm_surface_map(tbm_surface_h surface, int opt,
+    tbm_surface_info_s *info) {
+  __fake_surf_info.planes[0].ptr = reinterpret_cast<unsigned char*>(
+      &__fake_buf[0][0]);
+  *info = __fake_surf_info;
+  return TBM_SURFACE_ERROR_NONE;
+}
+
+int __tbm_surface_unmap(tbm_surface_h surface) {
+  return TBM_SURFACE_ERROR_NONE;
+}
+
+void __ambient_viewer_event_cb(ambient_event_type_e event,
+    const char *sender, bundle *extra, void *user_data) {
+}
+
+class Mocks :
+    public ::testing::NiceMock<AulMock>,
+    public ::testing::NiceMock<VconfMock>,
+    public ::testing::NiceMock<EvasMock> {};
+
+} // namespace
+
+class AmbientViewerStubTest : public TestFixture {
+ public:
+  AmbientViewerStubTest() : TestFixture(std::make_unique<Mocks>()) {}
+  virtual void SetUp() {
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_create(_, _, _, _, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_leave(_))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_send(_, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_notify_key_changed(_, _, _))
+        .WillRepeatedly(Return(0));
+  }
+  virtual void TearDown() {}
+};
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_create_n) {
+  EXPECT_EQ(ambient_viewer_create(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_create) {
+  ambient_viewer_h handle = nullptr;
+
+  EXPECT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  EXPECT_NE(handle, nullptr);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_destroy_n) {
+  EXPECT_EQ(ambient_viewer_destroy(nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_destroy) {
+  ambient_viewer_h handle = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+
+  EXPECT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_notify_ambient_event_n) {
+  EXPECT_EQ(ambient_viewer_notify_ambient_event(nullptr, AMBIENT_VIEWER_AMBIENT_STATE_ENTER,
+      AMBIENT_VIEWER_DIRECTION_ALL, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_block_update_n) {
+  EXPECT_EQ(ambient_viewer_block_update(nullptr, true),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_block_update1) {
+  ambient_viewer_h handle = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+
+  EXPECT_EQ(ambient_viewer_block_update(handle, true),
+      AMBIENT_VIEWER_ERROR_NONE);
+
+  ASSERT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_block_update2) {
+  ambient_viewer_h handle = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+
+  EXPECT_EQ(ambient_viewer_block_update(handle, false),
+      AMBIENT_VIEWER_ERROR_NONE);
+
+  ASSERT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_monitor_n) {
+  ambient_viewer_lifecycle_s lifecycle;
+  EXPECT_EQ(ambient_viewer_monitor(nullptr, lifecycle, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_unmonitor_n) {
+  EXPECT_EQ(ambient_viewer_unmonitor(nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_set_event_listener_n) {
+  EXPECT_EQ(ambient_viewer_set_event_listener(nullptr, nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_set_event_listener) {
+  ambient_viewer_h handle = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+
+  EXPECT_EQ(ambient_viewer_set_event_listener(handle, __ambient_viewer_event_cb,
+      nullptr), AMBIENT_VIEWER_ERROR_NONE);
+
+  ASSERT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_unset_event_listener_n) {
+  EXPECT_EQ(ambient_viewer_unset_event_listener(nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_unset_event_listener) {
+  ambient_viewer_h handle = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+  ASSERT_EQ(ambient_viewer_set_event_listener(handle, __ambient_viewer_event_cb,
+      nullptr), AMBIENT_VIEWER_ERROR_NONE);
+
+  EXPECT_EQ(ambient_viewer_unset_event_listener(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+
+  ASSERT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_get_watch_surface_n) {
+  EXPECT_EQ(ambient_viewer_get_watch_surface(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_get_watch_surface_n2) {
+  ambient_viewer_h handle = nullptr;
+  ambient_viewer_surface_h surface = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+
+  EXPECT_EQ(ambient_viewer_get_watch_surface(handle, &surface),
+      AMBIENT_VIEWER_ERROR_INVALID_OPERATION);
+
+  ASSERT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_get_top_app_surface_n) {
+  EXPECT_EQ(ambient_viewer_get_top_app_surface(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubTest, ambient_viewer_get_top_app_surface) {
+  ambient_viewer_h handle = nullptr;
+  ambient_viewer_surface_h surface = nullptr;
+  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
+    &handle), AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_NE(handle, nullptr);
+  ambient_viewer_lifecycle_s lifecycle = { 0, };
+  ASSERT_EQ(ambient_viewer_monitor_full(handle, lifecycle, nullptr),
+      AMBIENT_VIEWER_ERROR_NONE);
+
+  EXPECT_EQ(ambient_viewer_get_top_app_surface(handle, &surface),
+      AMBIENT_VIEWER_ERROR_NONE);
+  EXPECT_NE(surface, nullptr);
+
+  ASSERT_EQ(ambient_viewer_unmonitor(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+  ASSERT_EQ(ambient_viewer_destroy(handle),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+class AmbientViewerStubSurfaceTest : public TestFixture {
+ public:
+  AmbientViewerStubSurfaceTest() : TestFixture(std::make_unique<Mocks>()) {}
+  virtual void SetUp() {
+
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_create(_, _, _, _, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_leave(_))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_send(_, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_notify_key_changed(_, _, _))
+        .WillRepeatedly(Return(0));
+
+    EXPECT_CALL(GetMock<EvasMock>(), evas_object_geometry_get(_, _, _, _, _))
+      .WillRepeatedly(Invoke(__evas_object_geometry_get));
+    EXPECT_CALL(GetMock<EvasMock>(), evas_object_image_native_surface_get(_))
+      .WillRepeatedly(Invoke(__evas_object_image_native_surface_get));
+    EXPECT_CALL(GetMock<EvasMock>(), tbm_surface_map(_, _, _))
+      .WillRepeatedly(Invoke(__tbm_surface_map));
+    EXPECT_CALL(GetMock<EvasMock>(), tbm_surface_unmap(_))
+      .WillRepeatedly(Invoke(__tbm_surface_unmap));
+
+    ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(
+      &__not_null), &handle_), AMBIENT_VIEWER_ERROR_NONE);
+    ASSERT_NE(handle_, nullptr);
+    ambient_viewer_lifecycle_s lifecycle = { 0, };
+    ASSERT_EQ(ambient_viewer_monitor_full(handle_, lifecycle, nullptr),
+        AMBIENT_VIEWER_ERROR_NONE);
+
+    ASSERT_EQ(ambient_viewer_get_top_app_surface(handle_, &surface_),
+        AMBIENT_VIEWER_ERROR_NONE);
+    ASSERT_NE(surface_, nullptr);
+  }
+
+  virtual void TearDown() {
+    ASSERT_EQ(ambient_viewer_unmonitor(handle_),
+      AMBIENT_VIEWER_ERROR_NONE);
+    ASSERT_EQ(ambient_viewer_destroy(handle_),
+      AMBIENT_VIEWER_ERROR_NONE);
+  }
+
+  ambient_viewer_h handle_ = nullptr;
+  ambient_viewer_surface_h surface_ = nullptr;
+};
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_cur_image_n) {
+  EXPECT_EQ(ambient_viewer_surface_get_cur_image(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_cur_image) {
+  Evas_Object* obj = nullptr;
+  EXPECT_EQ(ambient_viewer_surface_get_cur_image(surface_, &obj),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_is_watch_n) {
+  EXPECT_EQ(ambient_viewer_surface_is_watch(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_is_watch) {
+  bool watch = false;
+  EXPECT_EQ(ambient_viewer_surface_is_watch(surface_, &watch),
+      AMBIENT_VIEWER_ERROR_NONE);
+  EXPECT_FALSE(watch);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_app_id_n) {
+  EXPECT_EQ(ambient_viewer_surface_get_app_id(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_app_id) {
+  char* id = nullptr;
+  EXPECT_EQ(ambient_viewer_surface_get_app_id(surface_, &id),
+      AMBIENT_VIEWER_ERROR_NONE);
+  EXPECT_EQ(id, nullptr);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_inst_id_n) {
+  EXPECT_EQ(ambient_viewer_surface_get_inst_id(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_inst_id) {
+  char* id = nullptr;
+  EXPECT_EQ(ambient_viewer_surface_get_inst_id(surface_, &id),
+      AMBIENT_VIEWER_ERROR_NONE);
+  EXPECT_EQ(id, nullptr);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_opr_n) {
+  EXPECT_EQ(ambient_viewer_surface_get_opr(nullptr, nullptr),
+      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
+}
+
+TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_opr) {
+  float opr;
+  EXPECT_EQ(ambient_viewer_surface_get_opr(surface_, &opr),
+      AMBIENT_VIEWER_ERROR_NONE);
+}
diff --git a/tests/unit_tests/src/test_watch_holder.cc b/tests/unit_tests/src/test_watch_holder.cc
new file mode 100644 (file)
index 0000000..5841797
--- /dev/null
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+#include "mock/test_fixture.h"
+
+#include <watch_holder.hh>
+#include <watch.hh>
+#include <mock/aul_mock.h>
+#include <mock/appsvc_mock.h>
+#include <mock/evas_mock.h>
+#include <mock/vconf_mock.h>
+
+#include <memory>
+
+using namespace std;
+using namespace tizen_base;
+using namespace watch_holder;
+
+using ::testing::_;
+using ::testing::Return;
+using ::testing::Invoke;
+
+class WatchHolderStub : public WatchHolder {
+ public:
+  WatchHolderStub(Evas_Object* win)
+    : WatchHolder(win) {
+  }
+
+  void InvokeAmbientChanged(bool enter, Bundle& extra) {
+    OnAmbientChanged(enter, extra);
+  }
+  void InvokeAmbientEvent(EventType ev, string sender,
+      Bundle extra) {
+    OnAmbientEvent(ev, sender, extra);
+  }
+  void OnAdded(const WatchBase& watch) override {}
+  void OnUpdated(const WatchBase& watch) override {}
+  void OnRemoved(const WatchBase& watch) override {}
+  void OnLaunched(const WatchBase& watch) override {}
+  void OnDead(const WatchBase& watch) override {}
+  void OnBound(const WatchBase& watch) override {}
+
+  std::shared_ptr<WatchBase> CreateWatch(int rid, std::string id,
+      std::string appid, bool mock) override {
+    return WatchHolder::CreateWatch(rid, id, appid, true);
+  }
+
+  std::shared_ptr<WatchBase> CreateWatch(int rid, std::string id,
+      std::string appid, tizen_base::Bundle extra, bool mock) override {
+    return WatchHolder::CreateWatch(rid, id, appid, extra, true);
+  }
+};
+
+namespace {
+
+static int (*__app_com_cb)(const char *endpoint, aul_app_com_result_e result, bundle *envelope, void *user_data);
+static Bundle b;
+static string global_end;
+aul_app_com_connection_h *global_conn;
+
+static int __aul_app_get_appid_bypid_fake(int pid, char* appid, int len) {
+  snprintf(appid, len, "%s", "org.tizen.watch");
+  return 0;
+}
+
+int __aul_app_com_create_fake(const char* end, aul_app_com_permission_h permission,
+    app_com_cb cb, void* user_data, aul_app_com_connection_h* conn) {
+  *conn = *global_conn;
+  b = Bundle();
+  b.Add("__AUL_APPID__", "org.tizen.watch");
+  b.Add("__AUL_PID__", "111");
+  b.Add("__AUL_IS_FAULT__", "is_fault");
+  b.Add("__AUL_WIDGET_VIEWER__", "org.tizen.watch");
+  b.Add("__AMBIENT_MODE__", "100");
+  b.Add("__APP_AMBIENT_EVENT__", "0");
+  b.Add("__APP_AMBIENT_SENDER__", "sender");
+
+  if(strcmp(end, global_end.c_str()) == 0)
+     __app_com_cb = cb;
+  return 0;
+}
+
+static int __aul_app_com_leave_fake(aul_app_com_connection_h conn) {
+  return 0;
+}
+
+void __evas_object_geometry_get(const Evas_Object *eo_obj, Evas_Coord *x,
+    Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) {
+  *w = 100;
+  *h = 100;
+}
+
+class Mocks :
+    public ::testing::NiceMock<AulMock>,
+    public ::testing::NiceMock<AppSvcMock>,
+    public ::testing::NiceMock<VconfMock>,
+    public ::testing::NiceMock<EvasMock> {};
+
+}  // namespace
+
+class WatchHolderTest : public TestFixture {
+ public:
+  WatchHolderTest() : TestFixture(std::make_unique<Mocks>()) {}
+  virtual ~WatchHolderTest() {}
+  WatchHolderStub* stub;
+
+  virtual void SetUp() {
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_create(_, _, _, _, _))
+      .WillRepeatedly(Invoke(__aul_app_com_create_fake));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_leave(_))
+      .WillRepeatedly(Invoke(__aul_app_com_leave_fake));
+    EXPECT_CALL(GetMock<AulMock>(),
+      aul_app_get_appid_bypid(_, _, _))
+        .WillRepeatedly(Invoke(__aul_app_get_appid_bypid_fake));
+    EXPECT_CALL(GetMock<AulMock>(),
+      aul_svc_set_appid(_, _)).WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AppSvcMock>(),
+      appsvc_run_service(_, _, _, _)).WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<EvasMock>(), evas_object_geometry_get(_, _, _, _, _))
+      .WillRepeatedly(Invoke(__evas_object_geometry_get));
+    EXPECT_CALL(GetMock<EvasMock>(), elm_win_add(_, _, _))
+        .WillRepeatedly(Return(reinterpret_cast<Evas_Object*>(
+                    calloc(1, sizeof(char)))));
+
+    global_conn = (aul_app_com_connection_h*)malloc(sizeof(aul_app_com_connection_h));
+
+    Evas_Object* win = elm_win_add(NULL, "Watch Holder", ELM_WIN_BASIC);
+    stub = new WatchHolderStub(win);
+  }
+  virtual void TearDown() {
+    free(global_conn);
+    delete stub;
+  }
+};
+
+TEST_F(WatchHolderTest, CreateInstance) {
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+}
+
+TEST_F(WatchHolderTest, CreateWatch) {
+  std::shared_ptr<WatchBase> w =
+    WatchHolderTest::stub->CreateWatch(1, string("id"), string("appid"), true);
+  EXPECT_NE(w, nullptr);
+
+  Bundle b;
+  b.Add("__APP_AMBIENT_EVENT__", "1");
+  std::shared_ptr<WatchBase> w2 =
+    WatchHolderTest::stub->CreateWatch(1, string("id"),
+        string("appid"), b, true);
+  EXPECT_NE(w2, nullptr);
+}
+
+TEST_F(WatchHolderTest, LaunchWatch) {
+  EXPECT_CALL(GetMock<AppSvcMock>(), appsvc_run_service(_, _, _, _))
+        .WillRepeatedly(Return(0));
+  string appid("org.tizen.watch");
+  int ret;
+
+  ret = WatchHolderTest::stub->Launch(appid, false, nullptr);
+  EXPECT_NE(ret, -1);
+}
+
+TEST_F(WatchHolderTest, GetStack) {
+  std::list<std::shared_ptr<WatchBase>> list;
+  list = WatchHolderTest::stub->GetStack();
+  EXPECT_EQ(list.size(), 0);
+}
+
+TEST_F(WatchHolderTest, GetCurrent_N) {
+  EXPECT_EQ(WatchHolderTest::stub->GetCurrent(), nullptr);
+  global_end = "watch.launch";
+}
+
+TEST_F(WatchHolderTest, OnLaunchSignal) {
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+  int ret;
+  string appid("org.tizen.watch");
+  ret = WatchHolderTest::stub->Launch(appid, false, b.GetHandle());
+  EXPECT_NE(ret, -1);
+  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
+
+  ret = WatchHolderTest::stub->Launch(appid, false, nullptr);
+  EXPECT_NE(ret, -1);
+  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
+  global_end = "watch.dead";
+}
+
+TEST_F(WatchHolderTest, OnDeadSignal) {
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
+  global_end = "watch.ambientchange";
+}
+
+TEST_F(WatchHolderTest, OnAmbientChangedSignal) {
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
+  global_end = "aod.ambientevent";
+}
+
+TEST_F(WatchHolderTest, OnReceiveSignal) {
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
+}
+
+TEST_F(WatchHolderTest, OnAmbientChanged) {
+  Bundle *b = nullptr;
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+  WatchHolderTest::stub->InvokeAmbientChanged(true, *b);
+}
+
+TEST_F(WatchHolderTest, OnAmbientEvent) {
+  Bundle b;
+  b.Add("__APP_AMBIENT_EVENT__", "1");
+  EXPECT_NE(WatchHolderTest::stub, nullptr);
+  WatchHolderTest::stub->InvokeAmbientEvent(AmbientListener::EVENT_AOD_READY, string("sender"), b);
+}
\ No newline at end of file
diff --git a/tests/unit_tests/src/test_watch_mirror.cc b/tests/unit_tests/src/test_watch_mirror.cc
new file mode 100644 (file)
index 0000000..8bb8ac5
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <gtest/gtest.h>
+#include <gmock/gmock.h>
+
+#include <watch_mirror.hh>
+#include <watch.hh>
+#include <aul_mock.h>
+#include <vconf_mock.h>
+#include <evas_mock.h>
+
+#include "test_fixture.h"
+
+#include <memory>
+
+using namespace std;
+using namespace tizen_base;
+using namespace watch_holder;
+
+using ::testing::_;
+using ::testing::Invoke;
+using ::testing::Return;
+
+class WatchMirrorStub : public WatchMirror {
+ public:
+  WatchMirrorStub(Evas_Object* win)
+    : WatchMirror(win) {
+  }
+
+  void OnChanged(const ISharableWatchBase& watch) override {}
+  void OnAdded(const ISharableWatchBase& watch) override {}
+  void OnUpdated(const ISharableWatchBase& watch) override {}
+  void OnRemoved(const ISharableWatchBase& watch) override {}
+};
+
+class SharableWatchStub : public ISharableWatchBase {
+ public:
+
+  void Resume() override;
+  void Pause() override;
+  std::shared_ptr<screen_connector::WlBuffer> GetCurrentImage() const override;
+  bool IsBound() const override;
+  std::string GetAppId() const override;
+  int GetPid() const override;
+  virtual tizen_base::Bundle GetExtra() const override;
+  bool IsFaulted() const override;
+  void BlockUpdate(bool enable) override;
+};
+
+static char* __vconf_get_str_fake(const char* key) {
+  bundle_raw* raw;
+  int len;
+  bundle* b = bundle_create();
+  bundle_add_str(b, NOTIFY_CHANGED_EVENT_APPID_KEY, "appid");
+  bundle_add_str(b, NOTIFY_CHANGED_EVENT_RID_KEY, "rid");
+
+  bundle_encode(b, &raw, &len);
+  bundle_free(b);
+  return (char*)raw;
+}
+
+namespace {
+
+class Mocks : public ::testing::NiceMock<VconfMock>,
+    public ::testing::NiceMock<AulMock>,
+    public ::testing::NiceMock<EvasMock> {};
+
+}  // namespace
+
+class WatchMirrorTest : public TestFixture {
+ public:
+  WatchMirrorTest() : TestFixture(std::make_unique<Mocks>()) {}
+  WatchMirrorStub* mirrorstub;
+
+  virtual void SetUp() {
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_create(_, _, _, _, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<AulMock>(), aul_app_com_leave(_))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_notify_key_changed(_, _, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<VconfMock>(), vconf_ignore_key_changed(_, _))
+        .WillRepeatedly(Return(0));
+    EXPECT_CALL(GetMock<EvasMock>(), elm_win_add(_, _, _))
+        .WillRepeatedly(Return(reinterpret_cast<Evas_Object*>(
+                    calloc(1, sizeof(char)))));
+    Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC);
+    mirrorstub = new WatchMirrorStub(mirwin);
+  }
+  virtual void TearDown() {
+    delete mirrorstub;
+  }
+};
+
+ TEST_F(WatchMirrorTest, CreateMirrorInstance) {
+   EXPECT_NE(WatchMirrorTest::mirrorstub, nullptr);
+ }
+
+TEST_F(WatchMirrorTest, MirrorListen) {
+  EXPECT_CALL(GetMock<VconfMock>(), vconf_get_str(_))
+      .WillRepeatedly(Invoke(__vconf_get_str_fake));
+
+  int ret = WatchMirrorTest::mirrorstub->Listen();
+  EXPECT_EQ(ret, 0);
+}
+
+TEST_F(WatchMirrorTest, MirrorListen_N) {
+  EXPECT_CALL(GetMock<VconfMock>(), vconf_notify_key_changed(_, _, _))
+      .WillRepeatedly(Return(-1));
+
+  int ret = WatchMirrorTest::mirrorstub->Listen();
+  EXPECT_NE(ret, 0);
+}
+
+TEST_F(WatchMirrorTest, MirrorGetCurrent_N) {
+  shared_ptr<ISharableWatchBase> sw;
+  sw = WatchMirrorTest::mirrorstub->GetCurrent();
+  EXPECT_EQ(sw, nullptr);
+}
+
+TEST_F(WatchMirrorTest, OnChanged) {
+  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
+  Watch *w = new Watch(string("test"), watchwin, WatchMirrorTest::mirrorstub, true);
+  EXPECT_NE(w, nullptr);
+  WatchMirror *mr = new WatchMirror(watchwin);
+  EXPECT_NE(mr, nullptr);
+  mr->OnChanged(*w);
+  delete w;
+  delete mr;
+}
+
+TEST_F(WatchMirrorTest, OnAdded) {
+  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
+  SharableWatchStub *w = nullptr;
+
+  WatchMirror *mr = new WatchMirror(watchwin);
+  EXPECT_NE(mr, nullptr);
+  mr->OnAdded(*w);
+
+  delete mr;
+}
+
+TEST_F(WatchMirrorTest, OnUpdated) {
+  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
+  SharableWatchStub *w = nullptr;
+
+  WatchMirror *mr = new WatchMirror(watchwin);
+  EXPECT_NE(mr, nullptr);
+  mr->OnUpdated(*w);
+
+  delete mr;
+}
+
+TEST_F(WatchMirrorTest, OnRemoved) {
+  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
+  SharableWatchStub *w = nullptr;
+
+  WatchMirror *mr = new WatchMirror(watchwin);
+  EXPECT_NE(mr, nullptr);
+  mr->OnRemoved(*w);
+
+  delete mr;
+}
+
+TEST_F(WatchMirrorTest, OnAmbientChanged) {
+  Bundle *b = nullptr;
+  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
+  WatchMirror *mr = new WatchMirror(watchwin);
+  EXPECT_NE(mr, nullptr);
+  mr->OnAmbientChanged(true, *b);
+  delete mr;
+}
+
+TEST_F(WatchMirrorTest, OnAmbientEvent) {
+  Bundle b;
+  b.Add("__APP_AMBIENT_EVENT__", "1");
+  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
+  WatchMirror *mr = new WatchMirror(watchwin);
+  EXPECT_NE(mr, nullptr);
+  mr->OnAmbientEvent(AmbientListener::EVENT_AOD_READY, string("sender"), b);
+  delete mr;
+}
\ No newline at end of file
diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt
deleted file mode 100644 (file)
index 494748d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
-PROJECT(widget-viewer_unittests)
-
-INCLUDE(FindPkgConfig)
-pkg_check_modules(widget-viewer_unittests REQUIRED
-    dlog
-    evas
-    gmock
-    capi-appfw-app-control
-    widget_service
-    glib-2.0
-    gio-2.0
-    aul
-    elementary
-    pkgmgr-info
-    capi-system-info
-    capi-appfw-application
-    cynara-client
-    appcore-efl
-    ecore
-    edje
-    vconf
-    bundle
-    efl-extension
-    appsvc
-    ecore-wl2
-    screen_connector_remote_surface_evas_mock
-    uuid
-)
-
-FOREACH(flag ${widget-viewer_unittests_CFLAGS})
-    SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
-ENDFOREACH(flag)
-SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -Wall -Werror -Winline")
-
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++11")
-SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
-SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
-
-ADD_DEFINITIONS("-DPKGNAME=\"org.tizen.widget_unittest\"")
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
-SET(CMAKE_C_FLAGS_DEBUG "-O0 -g")
-SET(CMAKE_C_FLAGS_RELEASE "-O2")
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../ambient-viewer/src)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../ambient-viewer/include)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../watch-holder/src)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../watch-holder-base/src)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../mock)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../)
-
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../mock UNIT_TEST_SOURCES)
-AUX_SOURCE_DIRECTORY(src SOURCES)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../ambient-viewer/src AMBIENT_VIEWER_SOURCES)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../watch-holder-base/src WATCH_HOLDER_BASE_SOURCES)
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/../watch-holder/src WATCH_HOLDER_SOURCES)
-ADD_EXECUTABLE(${PROJECT_NAME}
-    ${SOURCES}
-    ${UNIT_TEST_SOURCES}
-    ${AMBIENT_VIEWER_SOURCES}
-    ${WATCH_HOLDER_BASE_SOURCES}
-    ${WATCH_HOLDER_SOURCES}
-)
-
-TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${widget-viewer_unittests_LDFLAGS}
-    gmock
-    watch-holder
-)
-
-INSTALL(TARGETS ${PROJECT_NAME} DESTINATION /usr/bin/)
diff --git a/unittest/src/appsvc_mock.h b/unittest/src/appsvc_mock.h
deleted file mode 100644 (file)
index b9b2bb6..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef MOCK_APPSVC_H_
-#define MOCK_APPSVC_H_
-
-#include "mock.h"
-#include "appsvc.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-DECLARE_FAKE_VALUE_FUNC(int, appsvc_run_service, bundle*, int, appsvc_res_fn, void*);
-
-#ifdef __cplusplus
-}
-#endif
-#endif  /* MOCK_APPSVC_H_ */
diff --git a/unittest/src/test_ambient_viewer.cc b/unittest/src/test_ambient_viewer.cc
deleted file mode 100644 (file)
index dbbe254..0000000
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-#include <ambient-viewer.hh>
-#include <watch-surface.hh>
-#include <top-app-surface.hh>
-
-#include "mock/vconf_mock.h"
-#include "mock/aul_mock.h"
-#include "mock/system_info_mock.h"
-#include "mock/evas_mock.h"
-#include "ambient-viewer/include/ambient_viewer.h"
-#include "ambient-viewer/include/ambient_viewer_common.h"
-
-#define NOTIFY_CHANGED_EVENT_APPID_KEY "__NOTIFY_CHANGED_EVENT_APPID_KEY__"
-#define NOTIFY_CHANGED_EVENT_RID_KEY "__NOTIFY_CHANGED_EVENT_RID_KEY__"
-
-using namespace std;
-using namespace ambient_viewer;
-using namespace tizen_base;
-
-namespace {
-
-gchar __not_null;
-app_com_cb __app_com_callback;
-void* __app_com_user_data;
-Evas_Native_Surface __fake_ns;
-tbm_surface_info_s __fake_surf_info;
-int __fake_buf[100][100];
-
-int __system_info_get_platform_bool(const char* key, bool* value) {
-  *value = true;
-  return 0;
-}
-
-void __evas_object_geometry_get(const Evas_Object *eo_obj, Evas_Coord *x,
-    Evas_Coord *y, Evas_Coord *w, Evas_Coord *h) {
-  *w = 100;
-  *h = 100;
-}
-
-Evas_Native_Surface* __evas_object_image_native_surface_get(
-    const Evas_Object *eo_obj) {
-  __fake_ns.data.tbm.buffer = &__not_null;
-  return &__fake_ns;
-}
-
-int __tbm_surface_map(tbm_surface_h surface, int opt,
-    tbm_surface_info_s *info) {
-  __fake_surf_info.planes[0].ptr = reinterpret_cast<unsigned char*>(
-      &__fake_buf[0][0]);
-  *info = __fake_surf_info;
-  return TBM_SURFACE_ERROR_NONE;
-}
-
-int __tbm_surface_unmap(tbm_surface_h surface) {
-  return TBM_SURFACE_ERROR_NONE;
-}
-
-void __receive_fake_message() {
-  Bundle b;
-  b.Add("__APP_AMBIENT_EVENT__", "1");
-  b.Add("__APP_AMBIENT_SENDER__", "test");
-  __app_com_callback("", AUL_APP_COM_R_OK, b.GetHandle(), __app_com_user_data);
-}
-
-int __aul_app_com_create(const char *endpoint,
-    aul_app_com_permission_h permission, app_com_cb callback, void *user_data,
-    aul_app_com_connection_h *connection) {
-  if(strcmp(endpoint, "aod.ambientevent") == 0) {
-    __app_com_callback = callback;
-    __app_com_user_data = user_data;
-  }
-  return 0;
-}
-
-int __aul_app_com_leave(aul_app_com_connection_h connection) {
-  return 0;
-}
-
-int __aul_app_com_send(const char *endpoint, bundle *envelope) {
-  return 0;
-}
-
-char* __vconf_get_str(const char* key) {
-  if (!key)
-    return nullptr;
-
-  if (strcmp(key, VCONFKEY_WATCH_CURRENT_WATCH_INFO) == 0) {
-    Bundle data;
-    data.Add(NOTIFY_CHANGED_EVENT_APPID_KEY, "TestAppId");
-    data.Add(NOTIFY_CHANGED_EVENT_RID_KEY, "1");
-    return strdup(reinterpret_cast<char*>(data.ToRaw().first.get()));
-  }
-
-  return nullptr;
-}
-
-int __vconf_notify_key_changed(const char* key, vconf_callback_fn cb,
-    void* user_data) {
-  return 0;
-}
-
-int __vconf_ignore_key_changed(const char* key, vconf_callback_fn cb) {
-  return 0;
-}
-
-class WatchSurfaceMock : public WatchSurface {
- public:
-  WatchSurfaceMock(int rid, std::string id,
-      std::string appid, Evas_Object* viewer_win, IAmbientViewer* listener)
-    : WatchSurface(rid, id, std::move(appid), viewer_win, listener, true) {}
-
-  void InvokeEvasAdded() {
-    screen_connector::EvasObject eo(reinterpret_cast<Evas_Object*>(&__not_null),
-        false);
-    OnEvasAdded("TestAppId", "TestInstId", 99, eo);
-  }
-
-  void InvokeEvasRemoved() {
-    screen_connector::EvasObject eo(reinterpret_cast<Evas_Object*>(&__not_null),
-        false);
-    OnEvasRemoved("TestAppId", "TestInstId", 99, eo);
-  }
-
-  void InvokeEvasChanged() {
-    screen_connector::EvasObject eo(reinterpret_cast<Evas_Object*>(&__not_null),
-        false);
-    OnEvasChanged("TestAppId", "TestInstId", 99, eo);
-  }
-};
-
-class TopAppSurfaceMock : public TopAppSurface {
- public:
-  TopAppSurfaceMock(std::shared_ptr<screen_connector::EvasObject> surface,
-    IAmbientViewer* listener) : TopAppSurface(surface, listener, true) {}
-
-  void InvokeWatcherAdded() {
-    OnWatcherAdded("TestAppId", "TestInstId", 99);
-  }
-
-  void InvokeWatcherChanged() {
-    screen_connector::EvasObject image(reinterpret_cast<Evas_Object*>(
-      &__not_null), false);
-    OnWatcherChanged("TestAppId", "TestInstId", 99, image);
-  }
-
-  void InvokeWatcherRemoved() {
-    OnWatcherRemoved("TestAppId", "TestInstId", 99);
-  }
-
-  void InvokeWatcherFocusChanged() {
-    OnWatcherFocusChanged("TestAppId", "TestInstId", 99);
-  }
-};
-
-class AmbientViewerStub : public AmbientViewer {
- public:
-  AmbientViewerStub(Evas_Object* win)
-    : AmbientViewer(win) {
-  }
-  void OnAdded(const ISurface& surface) override {
-    added_ = true;
-  }
-  void OnUpdated(const ISurface& surface) override {
-    updated_ = true;
-  }
-  void OnRemoved(const ISurface& surface) override {
-    removed_ = true;
-  }
-  void OnReceived(EventType ev, string sender, Bundle extra) override {
-    AmbientViewer::OnReceived(ev, sender, extra);
-    received_ = true;
-  }
-
- public:
-  bool added_ = false;
-  bool updated_ = false;
-  bool removed_ = false;
-  bool received_ = false;
-
- protected:
-  std::shared_ptr<ISurface> CreateWatchSurface(int rid, std::string id,
-      std::string appid, Evas_Object* viewer_win, IAmbientViewer* listener,
-      bool mock = false) override {
-    auto suf = AmbientViewer::CreateWatchSurface(rid, id, appid,
-        viewer_win, listener, true);
-    if (suf.get() == nullptr)
-      return nullptr;
-    return make_shared<WatchSurfaceMock>(rid, id, std::move(appid),
-      viewer_win, listener);
- }
-
-  std::shared_ptr<ISurface> CreateTopAppSurface(
-      std::shared_ptr<screen_connector::EvasObject> surface,
-      IAmbientViewer* listener, bool mock = false) override {
-    auto suf = AmbientViewer::CreateTopAppSurface(surface, listener, true);
-    if (suf.get() == nullptr)
-      return nullptr;
-    return make_shared<TopAppSurfaceMock>(surface, listener);
-  }
-};
-
-class AmbientViewerTest : public ::testing::Test {
- public:
-  AmbientViewerStub* stub;
-
-  virtual void SetUp() {
-    vconf_get_str_fake.custom_fake = __vconf_get_str;
-    vconf_notify_key_changed_fake.custom_fake = __vconf_notify_key_changed;
-    vconf_ignore_key_changed_fake.custom_fake = __vconf_ignore_key_changed;
-    aul_app_com_create_fake.custom_fake = __aul_app_com_create;
-    aul_app_com_leave_fake.custom_fake = __aul_app_com_leave;
-    aul_app_com_send_fake.custom_fake = __aul_app_com_send;
-    system_info_get_platform_bool_fake.custom_fake =
-        __system_info_get_platform_bool;
-    evas_object_geometry_get_fake.custom_fake =
-        __evas_object_geometry_get;
-    evas_object_image_native_surface_get_fake.custom_fake =
-        __evas_object_image_native_surface_get;
-    tbm_surface_map_fake.custom_fake = __tbm_surface_map;
-    tbm_surface_unmap_fake.custom_fake = __tbm_surface_unmap;
-
-    stub = new AmbientViewerStub(reinterpret_cast<Evas_Object*>(&__not_null));
-  }
-  virtual void TearDown() {
-    delete stub;
-  }
-};
-
-} // namespace
-
-TEST_F(AmbientViewerTest, create) {
-  EXPECT_NE(AmbientViewerTest::stub, nullptr);
-}
-
-TEST_F(AmbientViewerTest, NotifyAmbientEvent) {
-  Bundle b;
-  EXPECT_EQ(AmbientViewerTest::stub->NotifyAmbientEvent(AmbientViewer::AMBIENT_ENTER,
-    AmbientViewer::DIRECTION_ALL, b), 0);
-}
-
-TEST_F(AmbientViewerTest, NotifyAmbientEvent2) {
-  Bundle b;
-  EXPECT_EQ(AmbientViewerTest::stub->NotifyAmbientEvent(AmbientViewer::AMBIENT_ENTER,
-    AmbientViewer::DIRECTION_VIEWER_AND_WATCH, b), 0);
-}
-
-TEST_F(AmbientViewerTest, NotifyAmbientEvent3) {
-  Bundle b;
-  EXPECT_EQ(AmbientViewerTest::stub->NotifyAmbientEvent(AmbientViewer::AMBIENT_ENTER,
-    AmbientViewer::DIRECTION_VIEWER_AND_TOP_APP, b), 0);
-}
-
-TEST_F(AmbientViewerTest, BlockUpdate) {
-  AmbientViewerTest::stub->BlockUpdate(true);
-}
-
-TEST_F(AmbientViewerTest, MonitorUnmonitor) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-
-  EXPECT_NE(&ws, nullptr);
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, WatchSurface_GetAppId) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-
-  EXPECT_EQ(ws.GetAppId(), "TestAppId");
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, WatchSurface_GetInstId) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-  WatchSurfaceMock* mock = const_cast<WatchSurfaceMock*>(
-      static_cast<const WatchSurfaceMock*>(&ws));
-  mock->InvokeEvasAdded();
-
-  EXPECT_TRUE(stub->added_);
-  EXPECT_EQ(ws.GetInstId(), "TestInstId");
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, WatchSurface_GetOpr) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-  WatchSurfaceMock* mock = const_cast<WatchSurfaceMock*>(
-      static_cast<const WatchSurfaceMock*>(&ws));
-  mock->InvokeEvasAdded();
-  EXPECT_TRUE(stub->added_);
-
-  EXPECT_EQ(ws.GetOpr(), 0);
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, AmbientViewer_Events) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-  WatchSurfaceMock* mock = const_cast<WatchSurfaceMock*>(
-      static_cast<const WatchSurfaceMock*>(&ws));
-
-  mock->InvokeEvasAdded();
-  EXPECT_TRUE(stub->added_);
-  mock->InvokeEvasChanged();
-  EXPECT_TRUE(stub->updated_);
-  mock->InvokeEvasRemoved();
-  EXPECT_TRUE(stub->removed_);
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, WatchSurface_IsWatch) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-
-  EXPECT_TRUE(ws.IsWatch());
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, AmbientViewer_OnReceived) {
-  stub->Monitor();
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-
-  EXPECT_TRUE(stub->received_);
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, TopAppSurface_IsWatch) {
-  stub->Monitor(true);
-  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
-  ASSERT_NE(&ws, nullptr);
-
-  EXPECT_FALSE(ws.IsWatch());
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, TopAppSurface_GetAppId) {
-  stub->Monitor(true);
-  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
-  ASSERT_NE(&ws, nullptr);
-  TopAppSurfaceMock* mock = const_cast<TopAppSurfaceMock*>(
-      static_cast<const TopAppSurfaceMock*>(&ws));
-  mock->InvokeWatcherAdded();
-
-  EXPECT_EQ(ws.GetAppId(), "TestAppId");
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, TopAppSurface_GetInstId) {
-  stub->Monitor(true);
-  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
-  ASSERT_NE(&ws, nullptr);
-  TopAppSurfaceMock* mock = const_cast<TopAppSurfaceMock*>(
-      static_cast<const TopAppSurfaceMock*>(&ws));
-  mock->InvokeWatcherAdded();
-  mock->InvokeWatcherChanged();
-  mock->InvokeWatcherFocusChanged();
-
-  EXPECT_EQ(ws.GetInstId(), "TestInstId");
-
-  mock->InvokeWatcherRemoved();
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, TopAppSurface_GetOpr) {
-  stub->Monitor(true);
-  const auto& ws = AmbientViewerTest::stub->GetTopAppSurface();
-  ASSERT_NE(&ws, nullptr);
-  TopAppSurfaceMock* mock = const_cast<TopAppSurfaceMock*>(
-      static_cast<const TopAppSurfaceMock*>(&ws));
-  mock->InvokeWatcherAdded();
-  mock->InvokeWatcherChanged();
-  mock->InvokeWatcherFocusChanged();
-
-  EXPECT_EQ(ws.GetOpr(), 0);
-
-  stub->Unmonitor();
-}
-
-TEST_F(AmbientViewerTest, AmbientViewer_OnReceived2) {
-  stub->Monitor(true);
-  const auto& ws = AmbientViewerTest::stub->GetWatchSurface();
-  ASSERT_NE(&ws, nullptr);
-  stub->received_ = false;
-  __receive_fake_message();
-
-  EXPECT_TRUE(stub->received_);
-
-  stub->Unmonitor();
-}
diff --git a/unittest/src/test_ambient_viewer_stub.cc b/unittest/src/test_ambient_viewer_stub.cc
deleted file mode 100644 (file)
index 8e1bff7..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-#include "ambient-viewer/include/ambient_viewer.h"
-#include "ambient-viewer/include/ambient_viewer_common.h"
-
-extern "C" int ambient_viewer_monitor_full(ambient_viewer_h handle,
-    ambient_viewer_lifecycle_s lifecycle, void *user_data);
-
-namespace {
-
-gchar __not_null;
-
-void __ambient_viewer_event_cb(ambient_event_type_e event,
-    const char *sender, bundle *extra, void *user_data) {
-}
-
-} // namespace
-
-class AmbientViewerStubTest : public ::testing::Test {
- public:
-  virtual void SetUp() {}
-  virtual void TearDown() {}
-};
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_create_n) {
-  EXPECT_EQ(ambient_viewer_create(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_create) {
-  ambient_viewer_h handle = nullptr;
-
-  EXPECT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  EXPECT_NE(handle, nullptr);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_destroy_n) {
-  EXPECT_EQ(ambient_viewer_destroy(nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_destroy) {
-  ambient_viewer_h handle = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-
-  EXPECT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_notify_ambient_event_n) {
-  EXPECT_EQ(ambient_viewer_notify_ambient_event(nullptr, AMBIENT_VIEWER_AMBIENT_STATE_ENTER,
-      AMBIENT_VIEWER_DIRECTION_ALL, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_block_update_n) {
-  EXPECT_EQ(ambient_viewer_block_update(nullptr, true),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_block_update1) {
-  ambient_viewer_h handle = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-
-  EXPECT_EQ(ambient_viewer_block_update(handle, true),
-      AMBIENT_VIEWER_ERROR_NONE);
-
-  ASSERT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_block_update2) {
-  ambient_viewer_h handle = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-
-  EXPECT_EQ(ambient_viewer_block_update(handle, false),
-      AMBIENT_VIEWER_ERROR_NONE);
-
-  ASSERT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_monitor_n) {
-  ambient_viewer_lifecycle_s lifecycle;
-  EXPECT_EQ(ambient_viewer_monitor(nullptr, lifecycle, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_unmonitor_n) {
-  EXPECT_EQ(ambient_viewer_unmonitor(nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_set_event_listener_n) {
-  EXPECT_EQ(ambient_viewer_set_event_listener(nullptr, nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_set_event_listener) {
-  ambient_viewer_h handle = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-
-  EXPECT_EQ(ambient_viewer_set_event_listener(handle, __ambient_viewer_event_cb,
-      nullptr), AMBIENT_VIEWER_ERROR_NONE);
-
-  ASSERT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_unset_event_listener_n) {
-  EXPECT_EQ(ambient_viewer_unset_event_listener(nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_unset_event_listener) {
-  ambient_viewer_h handle = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-  ASSERT_EQ(ambient_viewer_set_event_listener(handle, __ambient_viewer_event_cb,
-      nullptr), AMBIENT_VIEWER_ERROR_NONE);
-
-  EXPECT_EQ(ambient_viewer_unset_event_listener(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-
-  ASSERT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_get_watch_surface_n) {
-  EXPECT_EQ(ambient_viewer_get_watch_surface(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_get_watch_surface_n2) {
-  ambient_viewer_h handle = nullptr;
-  ambient_viewer_surface_h surface = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-
-  EXPECT_EQ(ambient_viewer_get_watch_surface(handle, &surface),
-      AMBIENT_VIEWER_ERROR_INVALID_OPERATION);
-
-  ASSERT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_get_top_app_surface_n) {
-  EXPECT_EQ(ambient_viewer_get_top_app_surface(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubTest, ambient_viewer_get_top_app_surface) {
-  ambient_viewer_h handle = nullptr;
-  ambient_viewer_surface_h surface = nullptr;
-  ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(&__not_null),
-    &handle), AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_NE(handle, nullptr);
-  ambient_viewer_lifecycle_s lifecycle = { 0, };
-  ASSERT_EQ(ambient_viewer_monitor_full(handle, lifecycle, nullptr),
-      AMBIENT_VIEWER_ERROR_NONE);
-
-  EXPECT_EQ(ambient_viewer_get_top_app_surface(handle, &surface),
-      AMBIENT_VIEWER_ERROR_NONE);
-  EXPECT_NE(surface, nullptr);
-
-  ASSERT_EQ(ambient_viewer_unmonitor(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-  ASSERT_EQ(ambient_viewer_destroy(handle),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-class AmbientViewerStubSurfaceTest : public ::testing::Test {
- public:
-  virtual void SetUp() {
-    ASSERT_EQ(ambient_viewer_create(reinterpret_cast<Evas_Object*>(
-      &__not_null), &handle_), AMBIENT_VIEWER_ERROR_NONE);
-    ASSERT_NE(handle_, nullptr);
-    ambient_viewer_lifecycle_s lifecycle = { 0, };
-    ASSERT_EQ(ambient_viewer_monitor_full(handle_, lifecycle, nullptr),
-        AMBIENT_VIEWER_ERROR_NONE);
-
-    ASSERT_EQ(ambient_viewer_get_top_app_surface(handle_, &surface_),
-        AMBIENT_VIEWER_ERROR_NONE);
-    ASSERT_NE(surface_, nullptr);
-  }
-
-  virtual void TearDown() {
-    ASSERT_EQ(ambient_viewer_unmonitor(handle_),
-      AMBIENT_VIEWER_ERROR_NONE);
-    ASSERT_EQ(ambient_viewer_destroy(handle_),
-      AMBIENT_VIEWER_ERROR_NONE);
-  }
-
-  ambient_viewer_h handle_ = nullptr;
-  ambient_viewer_surface_h surface_ = nullptr;
-};
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_cur_image_n) {
-  EXPECT_EQ(ambient_viewer_surface_get_cur_image(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_cur_image) {
-  Evas_Object* obj = nullptr;
-  EXPECT_EQ(ambient_viewer_surface_get_cur_image(surface_, &obj),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_is_watch_n) {
-  EXPECT_EQ(ambient_viewer_surface_is_watch(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_is_watch) {
-  bool watch = false;
-  EXPECT_EQ(ambient_viewer_surface_is_watch(surface_, &watch),
-      AMBIENT_VIEWER_ERROR_NONE);
-  EXPECT_FALSE(watch);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_app_id_n) {
-  EXPECT_EQ(ambient_viewer_surface_get_app_id(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_app_id) {
-  char* id = nullptr;
-  EXPECT_EQ(ambient_viewer_surface_get_app_id(surface_, &id),
-      AMBIENT_VIEWER_ERROR_NONE);
-  EXPECT_EQ(id, nullptr);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_inst_id_n) {
-  EXPECT_EQ(ambient_viewer_surface_get_inst_id(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_inst_id) {
-  char* id = nullptr;
-  EXPECT_EQ(ambient_viewer_surface_get_inst_id(surface_, &id),
-      AMBIENT_VIEWER_ERROR_NONE);
-  EXPECT_EQ(id, nullptr);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_opr_n) {
-  EXPECT_EQ(ambient_viewer_surface_get_opr(nullptr, nullptr),
-      AMBIENT_VIEWER_ERROR_INVALID_PARAMETER);
-}
-
-TEST_F(AmbientViewerStubSurfaceTest, ambient_viewer_surface_get_opr) {
-  float opr;
-  EXPECT_EQ(ambient_viewer_surface_get_opr(surface_, &opr),
-      AMBIENT_VIEWER_ERROR_NONE);
-}
diff --git a/unittest/src/test_main.cc b/unittest/src/test_main.cc
deleted file mode 100644 (file)
index cb8a9c8..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (c) 2019 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-int main(int argc, char** argv){
-  int ret = -1;
-  try {
-    testing::InitGoogleTest(&argc, argv);
-  } catch(...) {
-    std::cout << "Exception occurred" << std::endl;
-  }
-
-  try {
-    ret = RUN_ALL_TESTS();
-  } catch (const ::testing::internal::GoogleTestFailureException& e) {
-    ret = -1;
-    std::cout << "GoogleTestFailureException was thrown:" << e.what() << std::endl;
-  }
-
-  return ret;
-}
diff --git a/unittest/src/test_watch.cc b/unittest/src/test_watch.cc
deleted file mode 100644 (file)
index 9bca20d..0000000
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-#include <watch.hh>
-#include <watch_mirror.hh>
-
-#include <evas_mock.h>
-#include <vconf_mock.h>
-
-using namespace std;
-using namespace tizen_base;
-using namespace watch_holder;
-
-gchar __not_null;
-
-Ecore_Evas* __ecore_evas_ecore_evas_get_fake(const Evas* obj) {
-  return nullptr;
-}
-
-Ecore_Wl2_Window* __ecore_evas_wayland2_window_get_fake(const Ecore_Evas* obj) {
-  return nullptr;
-}
-
-int __elm_win_aux_hint_add_fake(Evas_Object* obj, const char* h, const char* v) {
-  return 0;
-}
-
-void __evas_object_smart_callback_add_fake(Evas_Object* obj, const char* event,
-  Evas_Smart_Cb func, const void* data) {
-  func((void*)data, nullptr, nullptr);
-}
-
-void* __evas_object_smart_callback_del_fake(Evas_Object* obj, const char* event,
-  Evas_Smart_Cb func) {
-  return nullptr;
-}
-
-Evas* __evas_object_evas_get_fake(const Eo *obj) {
-  return nullptr;
-}
-
-const char* __elm_win_aux_msg_key_get_fake(Evas_Object* obj, Elm_Win_Aux_Message *msg) {
-  return "tz_remote_surface_mng";
-}
-
-const char* __elm_win_aux_msg_val_get_fake(Evas_Object* obj, Elm_Win_Aux_Message *msg) {
-  return "prebind";
-}
-
-int __vconf_set_str_fake(const char *in_key, const char *strval) {
-  return 0;
-}
-
-class WatchMirrorStub : public WatchMirror {
- public:
-  WatchMirrorStub(Evas_Object* win)
-    : WatchMirror(win) {
-  }
-
-  void OnChanged(const ISharableWatchBase& watch) override {}
-  void OnAdded(const ISharableWatchBase& watch) override {}
-  void OnUpdated(const ISharableWatchBase& watch) override {}
-  void OnRemoved(const ISharableWatchBase& watch) override {}
-};
-
-class WatchStub : public Watch {
- public:
-  WatchStub(string appid, Evas_Object* win, WatchMirrorStub* listener)
-    : Watch(appid, win, listener, true) {
-  }
-  WatchStub(int rid, std::string id, string appid, Evas_Object* win,
-      WatchMirrorStub* listener)
-    : Watch(rid, id, appid, win, listener, true) {
-  }
-  WatchStub(string appid, Evas_Object* win,
-      tizen_base::Bundle extra,
-      WatchMirrorStub* listener)
-    : Watch(appid, win, extra, listener, true) {
-  }
-  WatchStub(int rid, std::string id, string appid, Evas_Object* win,
-      tizen_base::Bundle extra,
-      WatchMirrorStub* listener)
-    : Watch(rid, id, appid, win, extra, listener, true) {
-  }
-
-  void InvokeEvasAdded() {
-  }
-
-  void InvokeEvasRemoved() {
-    OnRemoved("TestAppId", "TestInstId", 99, nullptr);
-  }
-
-  void InvokeEvasChanged() {
-  }
-
-  void InvokeSetFaulted(bool faulted) {
-    SetFaulted(faulted);
-  }
-};
-
-class WatchTest : public ::testing::Test {
- public:
-  WatchStub* stub;
-  WatchMirrorStub* mirrorstub;
-
-  virtual void SetUp() {
-    Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC);
-    mirrorstub = new WatchMirrorStub(mirwin);
-    Evas_Object* win = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-    stub = new WatchStub(string("test"), win, mirrorstub);
-  }
-  virtual void TearDown() {
-    delete stub;
-    delete mirrorstub;
-  }
-};
-
-TEST_F(WatchTest, CreateInstance) {
-  EXPECT_NE(WatchTest::stub, nullptr);
-}
-
-TEST_F(WatchTest, CreateInstance2) {
-  Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC);
-  WatchMirrorStub* mirrorstub = new WatchMirrorStub(mirwin);
-  EXPECT_NE(mirrorstub, nullptr);
-  Evas_Object* win = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  WatchStub* stub = new WatchStub(0, string("id"), string("test"), win, mirrorstub);
-  EXPECT_NE(stub, nullptr);
-  delete stub;
-  delete mirrorstub;
-}
-
-TEST_F(WatchTest, CreateInstance3) {
-  Bundle b;
-  b.Add("__APP_AMBIENT_EVENT__", "1");
-  b.Add("__APP_AMBIENT_SENDER__", "test");
-  Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC);
-  WatchMirrorStub* mirrorstub = new WatchMirrorStub(mirwin);
-  EXPECT_NE(mirrorstub, nullptr);
-  Evas_Object* win = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  WatchStub* stub = new WatchStub(string("test"), win, b, mirrorstub);
-  EXPECT_NE(stub, nullptr);
-  delete stub;
-  delete mirrorstub;
-}
-
-TEST_F(WatchTest, CreateInstance4) {
-  Bundle b;
-  b.Add("__APP_AMBIENT_EVENT__", "1");
-  b.Add("__APP_AMBIENT_SENDER__", "test");
-  Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC);
-  WatchMirrorStub* mirrorstub = new WatchMirrorStub(mirwin);
-  EXPECT_NE(mirrorstub, nullptr);
-  Evas_Object* win = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  WatchStub* stub = new WatchStub(0, string("id"),
-      string("test"), win, b, mirrorstub);
-  EXPECT_NE(stub, nullptr);
-  delete stub;
-  delete mirrorstub;
-}
-
-TEST_F(WatchTest, Terminate_N) {
-  int ret;
-  ret = WatchTest::stub->Terminate();
-  EXPECT_NE(ret, 0);
-}
-
-TEST_F(WatchTest, GetPid) {
-  int ret;
-  ret = WatchTest::stub->GetPid();
-  EXPECT_EQ(ret, 0);
-}
-
-TEST_F(WatchTest, IsBound) {
-  bool is_bound;
-  is_bound = WatchTest::stub->IsBound();
-  EXPECT_EQ(is_bound, false);
-}
-
-TEST_F(WatchTest, GetAppId) {
-  string appid;
-  appid = WatchTest::stub->GetAppId();
-  EXPECT_EQ(appid, "test");
-}
-
-TEST_F(WatchTest, GetExtra) {
-  Bundle b;
-  b = WatchTest::stub->GetExtra();
-  EXPECT_EQ(b.GetCount(), 0);
-}
-
-TEST_F(WatchTest, IsFaulted) {
-  bool is_faulted;
-  is_faulted = WatchTest::stub->IsFaulted();
-  EXPECT_EQ(is_faulted, false);
-}
-
-TEST_F(WatchTest, SetFaulted) {
-  bool is_faulted;
-  WatchTest::stub->InvokeSetFaulted(true);
-  is_faulted = WatchTest::stub->IsFaulted();
-  EXPECT_EQ(is_faulted, true);
-}
-
-TEST_F(WatchTest, BlockUpdate) {
-  EXPECT_NE(WatchTest::stub, nullptr);
-  WatchTest::stub->BlockUpdate(true);
-}
-
-TEST_F(WatchTest, NotifyChangedEvent) {
-  EXPECT_EQ(0, WatchTest::stub->NotifyChangedEvent());
-}
-
-TEST_F(WatchTest, Bind) {
-  ecore_evas_ecore_evas_get_fake.custom_fake = __ecore_evas_ecore_evas_get_fake;
-  ecore_evas_wayland2_window_get_fake.custom_fake = __ecore_evas_wayland2_window_get_fake;
-  elm_win_aux_hint_add_fake.custom_fake = __elm_win_aux_hint_add_fake;
-  evas_object_smart_callback_add_fake.custom_fake = __evas_object_smart_callback_add_fake;
-  evas_object_smart_callback_del_fake.custom_fake = __evas_object_smart_callback_del_fake;
-  evas_object_evas_get_fake.custom_fake = __evas_object_evas_get_fake;
-  elm_win_aux_msg_key_get_fake.custom_fake = __elm_win_aux_msg_key_get_fake;
-  elm_win_aux_msg_val_get_fake.custom_fake = __elm_win_aux_msg_val_get_fake;
-  vconf_set_str_fake.custom_fake = __vconf_set_str_fake;
-
-  Evas_Object* bindwin = elm_win_add(NULL, "Bind Window", ELM_WIN_BASIC);
-  EXPECT_NE(WatchTest::stub, nullptr);
-  WatchTest::stub->Bind(bindwin);
-}
-
-TEST_F(WatchTest, OnEvasAdded) {
-  EXPECT_NE(WatchTest::stub, nullptr);
-  WatchTest::stub->InvokeEvasAdded();
-}
-
-TEST_F(WatchTest, OnEvasRemoved) {
-  EXPECT_NE(WatchTest::stub, nullptr);
-  WatchTest::stub->InvokeEvasRemoved();
-}
-
-TEST_F(WatchTest, OnEvasChanged) {
-  EXPECT_NE(WatchTest::stub, nullptr);
-  WatchTest::stub->InvokeEvasChanged();
-}
\ No newline at end of file
diff --git a/unittest/src/test_watch_holder.cc b/unittest/src/test_watch_holder.cc
deleted file mode 100644 (file)
index 085d260..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-#include <watch_holder.hh>
-#include <watch.hh>
-#include <aul_mock.h>
-#include <appsvc_mock.h>
-#include <vconf_mock.h>
-
-using namespace std;
-using namespace tizen_base;
-using namespace watch_holder;
-
-class WatchHolderStub : public WatchHolder {
- public:
-  WatchHolderStub(Evas_Object* win)
-    : WatchHolder(win) {
-  }
-
-  void InvokeAmbientChanged(bool enter, Bundle& extra) {
-    OnAmbientChanged(enter, extra);
-  }
-  void InvokeAmbientEvent(EventType ev, string sender,
-      Bundle extra) {
-    OnAmbientEvent(ev, sender, extra);
-  }
-  void OnAdded(const WatchBase& watch) override {}
-  void OnUpdated(const WatchBase& watch) override {}
-  void OnRemoved(const WatchBase& watch) override {}
-  void OnLaunched(const WatchBase& watch) override {}
-  void OnDead(const WatchBase& watch) override {}
-  void OnBound(const WatchBase& watch) override {}
-
-  std::shared_ptr<WatchBase> CreateWatch(int rid, std::string id,
-      std::string appid, bool mock) override {
-    return WatchHolder::CreateWatch(rid, id, appid, true);
-  }
-
-  std::shared_ptr<WatchBase> CreateWatch(int rid, std::string id,
-      std::string appid, tizen_base::Bundle extra, bool mock) override {
-    return WatchHolder::CreateWatch(rid, id, appid, extra, true);
-  }
-};
-
-static int (*__app_com_cb)(const char *endpoint, aul_app_com_result_e result, bundle *envelope, void *user_data);
-static Bundle b;
-static string global_end;
-aul_app_com_connection_h *global_conn;
-
-static int __aul_app_get_appid_bypid_fake(int pid, char* appid, int len) {
-  snprintf(appid, len, "%s", "org.tizen.watch");
-  return 0;
-}
-
-static int __aul_app_com_create_fake(const char* end, aul_app_com_permission_h permission,
-    app_com_cb cb, void* user_data, aul_app_com_connection_h* conn) {
-  *conn = *global_conn;
-  b = Bundle();
-  b.Add("__AUL_APPID__", "org.tizen.watch");
-  b.Add("__AUL_PID__", "111");
-  b.Add("__AUL_IS_FAULT__", "is_fault");
-  b.Add("__AUL_WIDGET_VIEWER__", "org.tizen.watch");
-  b.Add("__AMBIENT_MODE__", "100");
-  b.Add("__APP_AMBIENT_EVENT__", "0");
-  b.Add("__APP_AMBIENT_SENDER__", "sender");
-
-  if(strcmp(end, global_end.c_str()) == 0)
-     __app_com_cb = cb;
-  return 0;
-}
-
-static int __aul_app_com_leave_fake(aul_app_com_connection_h conn) {
-  return 0;
-}
-
-static int __appsvc_run_service_fake(bundle* b, int r, appsvc_res_fn cb, void* data) {
-  return 0;
-}
-
-class WatchHolderTest : public ::testing::Test {
- public:
-  WatchHolderStub* stub;
-
-  virtual void SetUp() {
-    aul_app_com_create_fake.custom_fake = __aul_app_com_create_fake;
-    aul_app_com_leave_fake.custom_fake = __aul_app_com_leave_fake;
-    aul_app_get_appid_bypid_fake.custom_fake = __aul_app_get_appid_bypid_fake;
-    global_conn = (aul_app_com_connection_h*)malloc(sizeof(aul_app_com_connection_h));
-
-    Evas_Object* win = elm_win_add(NULL, "Watch Holder", ELM_WIN_BASIC);
-    stub = new WatchHolderStub(win);
-  }
-  virtual void TearDown() {
-    free(global_conn);
-    delete stub;
-  }
-};
-
-TEST_F(WatchHolderTest, CreateInstance) {
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-}
-
-TEST_F(WatchHolderTest, CreateWatch) {
-  std::shared_ptr<WatchBase> w =
-    WatchHolderTest::stub->CreateWatch(1, string("id"), string("appid"), true);
-  EXPECT_NE(w, nullptr);
-
-  Bundle b;
-  b.Add("__APP_AMBIENT_EVENT__", "1");
-  std::shared_ptr<WatchBase> w2 =
-    WatchHolderTest::stub->CreateWatch(1, string("id"),
-        string("appid"), b, true);
-  EXPECT_NE(w2, nullptr);
-}
-
-TEST_F(WatchHolderTest, LaunchWatch) {
-  appsvc_run_service_fake.custom_fake = __appsvc_run_service_fake;
-  string appid("org.tizen.watch");
-  int ret;
-
-  ret = WatchHolderTest::stub->Launch(appid, false, nullptr);
-  EXPECT_NE(ret, -1);
-}
-
-TEST_F(WatchHolderTest, GetStack) {
-  std::list<std::shared_ptr<WatchBase>> list;
-  list = WatchHolderTest::stub->GetStack();
-  EXPECT_EQ(list.size(), 0);
-}
-
-TEST_F(WatchHolderTest, GetCurrent_N) {
-  EXPECT_EQ(WatchHolderTest::stub->GetCurrent(), nullptr);
-  global_end = "watch.launch";
-}
-
-TEST_F(WatchHolderTest, OnLaunchSignal) {
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-  int ret;
-  string appid("org.tizen.watch");
-  ret = WatchHolderTest::stub->Launch(appid, false, b.GetHandle());
-  EXPECT_NE(ret, -1);
-  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
-
-  ret = WatchHolderTest::stub->Launch(appid, false, nullptr);
-  EXPECT_NE(ret, -1);
-  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
-  global_end = "watch.dead";
-}
-
-TEST_F(WatchHolderTest, OnDeadSignal) {
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
-  global_end = "watch.ambientchange";
-}
-
-TEST_F(WatchHolderTest, OnAmbientChangedSignal) {
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
-  global_end = "aod.ambientevent";
-}
-
-TEST_F(WatchHolderTest, OnReceiveSignal) {
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-  __app_com_cb("end", AUL_APP_COM_R_OK, b.GetHandle(), stub);
-}
-
-TEST_F(WatchHolderTest, OnAmbientChanged) {
-  Bundle *b = nullptr;
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-  WatchHolderTest::stub->InvokeAmbientChanged(true, *b);
-}
-
-TEST_F(WatchHolderTest, OnAmbientEvent) {
-  Bundle b;
-  b.Add("__APP_AMBIENT_EVENT__", "1");
-  EXPECT_NE(WatchHolderTest::stub, nullptr);
-  WatchHolderTest::stub->InvokeAmbientEvent(AmbientListener::EVENT_AOD_READY, string("sender"), b);
-}
\ No newline at end of file
diff --git a/unittest/src/test_watch_mirror.cc b/unittest/src/test_watch_mirror.cc
deleted file mode 100644 (file)
index aa6d765..0000000
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <glib.h>
-#include <gtest/gtest.h>
-#include <gmock/gmock.h>
-
-#include <watch_mirror.hh>
-#include <watch.hh>
-#include <vconf_mock.h>
-
-using namespace std;
-using namespace tizen_base;
-using namespace watch_holder;
-
-class WatchMirrorStub : public WatchMirror {
- public:
-  WatchMirrorStub(Evas_Object* win)
-    : WatchMirror(win) {
-  }
-
-  void OnChanged(const ISharableWatchBase& watch) override {}
-  void OnAdded(const ISharableWatchBase& watch) override {}
-  void OnUpdated(const ISharableWatchBase& watch) override {}
-  void OnRemoved(const ISharableWatchBase& watch) override {}
-};
-
-class SharableWatchStub : public ISharableWatchBase {
- public:
-
-  void Resume() override;
-  void Pause() override;
-  std::shared_ptr<screen_connector::WlBuffer> GetCurrentImage() const override;
-  bool IsBound() const override;
-  std::string GetAppId() const override;
-  int GetPid() const override;
-  virtual tizen_base::Bundle GetExtra() const override;
-  bool IsFaulted() const override;
-  void BlockUpdate(bool enable) override;
-};
-
-static int __vconf_notify_key_changed_fake(const char* key, vconf_callback_fn cb,
-  void* data) {
-  return 0;
-}
-
-static int __vconf_notify_key_changed_fake2(const char* key, vconf_callback_fn cb,
-  void* data) {
-  return -1;
-}
-
-static char* __vconf_get_str_fake(const char* key) {
-  bundle_raw* raw;
-  int len;
-  bundle* b = bundle_create();
-  bundle_add_str(b, NOTIFY_CHANGED_EVENT_APPID_KEY, "appid");
-  bundle_add_str(b, NOTIFY_CHANGED_EVENT_RID_KEY, "rid");
-
-  bundle_encode(b, &raw, &len);
-  bundle_free(b);
-  return (char*)raw;
-}
-
-
-class WatchMirrorTest : public ::testing::Test {
- public:
-  WatchMirrorStub* mirrorstub;
-
-  virtual void SetUp() {
-    Evas_Object* mirwin = elm_win_add(NULL, "Watch Mirror", ELM_WIN_BASIC);
-    mirrorstub = new WatchMirrorStub(mirwin);
-  }
-  virtual void TearDown() {
-    delete mirrorstub;
-  }
-};
-
- TEST_F(WatchMirrorTest, CreateMirrorInstance) {
-   EXPECT_NE(WatchMirrorTest::mirrorstub, nullptr);
- }
-
-TEST_F(WatchMirrorTest, MirrorListen) {
-  int ret;
-
-  vconf_notify_key_changed_fake.custom_fake = __vconf_notify_key_changed_fake;
-  vconf_get_str_fake.custom_fake = __vconf_get_str_fake;
-
-  ret = WatchMirrorTest::mirrorstub->Listen();
-  EXPECT_EQ(ret, 0);
-}
-
-TEST_F(WatchMirrorTest, MirrorListen_N) {
-  int ret;
-
-  vconf_notify_key_changed_fake.custom_fake = __vconf_notify_key_changed_fake2;
-
-  ret = WatchMirrorTest::mirrorstub->Listen();
-  EXPECT_NE(ret, 0);
-}
-
-TEST_F(WatchMirrorTest, MirrorGetCurrent_N) {
-  shared_ptr<ISharableWatchBase> sw;
-  sw = WatchMirrorTest::mirrorstub->GetCurrent();
-  EXPECT_EQ(sw, nullptr);
-}
-
-TEST_F(WatchMirrorTest, OnChanged) {
-  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  Watch *w = new Watch(string("test"), watchwin, nullptr, WatchMirrorTest::mirrorstub);
-  EXPECT_NE(w, nullptr);
-  WatchMirror *mr = new WatchMirror(watchwin);
-  EXPECT_NE(mr, nullptr);
-  mr->OnChanged(*w);
-  delete w;
-  delete mr;
-}
-
-TEST_F(WatchMirrorTest, OnAdded) {
-  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  SharableWatchStub *w = nullptr;
-
-  WatchMirror *mr = new WatchMirror(watchwin);
-  EXPECT_NE(mr, nullptr);
-  mr->OnAdded(*w);
-
-  delete mr;
-}
-
-TEST_F(WatchMirrorTest, OnUpdated) {
-  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  SharableWatchStub *w = nullptr;
-
-  WatchMirror *mr = new WatchMirror(watchwin);
-  EXPECT_NE(mr, nullptr);
-  mr->OnUpdated(*w);
-
-  delete mr;
-}
-
-TEST_F(WatchMirrorTest, OnRemoved) {
-  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  SharableWatchStub *w = nullptr;
-
-  WatchMirror *mr = new WatchMirror(watchwin);
-  EXPECT_NE(mr, nullptr);
-  mr->OnRemoved(*w);
-
-  delete mr;
-}
-
-TEST_F(WatchMirrorTest, OnAmbientChanged) {
-  Bundle *b = nullptr;
-  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  WatchMirror *mr = new WatchMirror(watchwin);
-  EXPECT_NE(mr, nullptr);
-  mr->OnAmbientChanged(true, *b);
-  delete mr;
-}
-
-TEST_F(WatchMirrorTest, OnAmbientEvent) {
-  Bundle b;
-  b.Add("__APP_AMBIENT_EVENT__", "1");
-  Evas_Object* watchwin = elm_win_add(NULL, "Watch", ELM_WIN_BASIC);
-  WatchMirror *mr = new WatchMirror(watchwin);
-  EXPECT_NE(mr, nullptr);
-  mr->OnAmbientEvent(AmbientListener::EVENT_AOD_READY, string("sender"), b);
-  delete mr;
-}
\ No newline at end of file