blob: 38bedada73846372f242ecddc2ac8f10e7c24781 [file] [log] [blame]
#include "clar_libgit2.h"
#include <git2/sys/config.h>
#include <git2/sys/odb_backend.h>
#include <git2/sys/refdb_backend.h>
#define STRINGIFY(s) #s
/* Checks two conditions for the specified structure:
* 1. That the initializers for the latest version produces the same
* in-memory representation.
* 2. That the function-based initializer supports all versions from 1...n,
* where n is the latest version (often represented by GIT_*_VERSION).
*
* Parameters:
* structname: The name of the structure to test, e.g. git_blame_options.
* structver: The latest version of the specified structure.
* macroinit: The macro that initializes the latest version of the structure.
* funcinitname: The function that initializes the structure. Must have the
* signature "int (structname* instance, int version)".
*/
#define CHECK_MACRO_FUNC_INIT_EQUAL(structname, structver, macroinit, funcinitname) \
do { \
structname structname##_macro_latest = macroinit; \
structname structname##_func_latest; \
int structname##_curr_ver = structver - 1; \
cl_git_pass(funcinitname(&structname##_func_latest, structver)); \
cl_check_( \
memcmp(&structname##_macro_latest, &structname##_func_latest, \
sizeof(structname)) == 0, \
"Macro-based and function-based initializer for " STRINGIFY(structname) \
" are not equivalent."); \
\
while (structname##_curr_ver > 0) \
{ \
structname macro; \
cl_git_pass(funcinitname(&macro, structname##_curr_ver)); \
structname##_curr_ver--; \
}\
} while(0)
void test_structinit_structinit__compare(void)
{
/* blame */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_blame_options, GIT_BLAME_OPTIONS_VERSION, \
GIT_BLAME_OPTIONS_INIT, git_blame_init_options);
/* checkout */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_checkout_options, GIT_CHECKOUT_OPTIONS_VERSION, \
GIT_CHECKOUT_OPTIONS_INIT, git_checkout_init_options);
/* clone */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_clone_options, GIT_CLONE_OPTIONS_VERSION, \
GIT_CLONE_OPTIONS_INIT, git_clone_init_options);
/* diff */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_diff_options, GIT_DIFF_OPTIONS_VERSION, \
GIT_DIFF_OPTIONS_INIT, git_diff_init_options);
/* diff_find */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_diff_find_options, GIT_DIFF_FIND_OPTIONS_VERSION, \
GIT_DIFF_FIND_OPTIONS_INIT, git_diff_find_init_options);
/* merge_file_input */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_merge_file_input, GIT_MERGE_FILE_INPUT_VERSION, \
GIT_MERGE_FILE_INPUT_INIT, git_merge_file_init_input);
/* merge_file */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_merge_file_options, GIT_MERGE_FILE_OPTIONS_VERSION, \
GIT_MERGE_FILE_OPTIONS_INIT, git_merge_file_init_options);
/* merge_tree */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_merge_options, GIT_MERGE_OPTIONS_VERSION, \
GIT_MERGE_OPTIONS_INIT, git_merge_init_options);
/* push */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_push_options, GIT_PUSH_OPTIONS_VERSION, \
GIT_PUSH_OPTIONS_INIT, git_push_init_options);
/* remote */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_remote_callbacks, GIT_REMOTE_CALLBACKS_VERSION, \
GIT_REMOTE_CALLBACKS_INIT, git_remote_init_callbacks);
/* repository_init */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_repository_init_options, GIT_REPOSITORY_INIT_OPTIONS_VERSION, \
GIT_REPOSITORY_INIT_OPTIONS_INIT, git_repository_init_init_options);
/* revert */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_revert_options, GIT_REVERT_OPTIONS_VERSION, \
GIT_REVERT_OPTIONS_INIT, git_revert_init_options);
/* status */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_status_options, GIT_STATUS_OPTIONS_VERSION, \
GIT_STATUS_OPTIONS_INIT, git_status_init_options);
/* transport */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_transport, GIT_TRANSPORT_VERSION, \
GIT_TRANSPORT_INIT, git_transport_init);
/* config_backend */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_config_backend, GIT_CONFIG_BACKEND_VERSION, \
GIT_CONFIG_BACKEND_INIT, git_config_init_backend);
/* odb_backend */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_odb_backend, GIT_ODB_BACKEND_VERSION, \
GIT_ODB_BACKEND_INIT, git_odb_init_backend);
/* refdb_backend */
CHECK_MACRO_FUNC_INIT_EQUAL( \
git_refdb_backend, GIT_REFDB_BACKEND_VERSION, \
GIT_REFDB_BACKEND_INIT, git_refdb_init_backend);
}