diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-01-30 14:16:45 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-01-30 14:16:45 -0500 |
commit | f83c19c87d6f484b72c24125aaac98bdc365c4b5 (patch) | |
tree | eb906d7daa7b98bbef7b26b7eeea83cc3a17d6ad | |
parent | 6e5a397ca6433c4ef5a0988b2ea78108d6c6e69c (diff) | |
parent | 7c48508b287d1477089db0400ee8f8165f34b054 (diff) | |
download | libgit2-f83c19c87d6f484b72c24125aaac98bdc365c4b5.tar.gz |
Merge pull request #2832 from ethomson/appveyor_badge
64-bit Appveyor Builds
-rw-r--r-- | appveyor.yml | 8 | ||||
-rw-r--r-- | tests/core/structinit.c (renamed from tests/structinit/structinit.c) | 42 |
2 files changed, 43 insertions, 7 deletions
diff --git a/appveyor.yml b/appveyor.yml index 5c3538556..0dcfd4dc0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -2,6 +2,12 @@ version: '{build}' branches: only: - master +environment: + matrix: + - GENERATOR: "Visual Studio 11" + ARCH: 32 + - GENERATOR: "Visual Studio 11 Win64" + ARCH: 64 build_script: - ps: >- choco install cmake @@ -12,7 +18,7 @@ build_script: cd build - cmake -D ENABLE_TRACE=ON -D BUILD_CLAR=ON -D STDCALL=ON .. -G"Visual Studio 11" + cmake -D ENABLE_TRACE=ON -D BUILD_CLAR=ON .. -G"$env:GENERATOR" cmake --build . --config RelWithDebInfo test_script: diff --git a/tests/structinit/structinit.c b/tests/core/structinit.c index 0e00ab5a0..d064f348e 100644 --- a/tests/structinit/structinit.c +++ b/tests/core/structinit.c @@ -24,12 +24,10 @@ do { \ structname structname##_macro_latest = macroinit; \ structname structname##_func_latest; \ int structname##_curr_ver = structver - 1; \ + memset(&structname##_func_latest, 0, sizeof(structname##_func_latest)); \ 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."); \ + options_cmp(&structname##_macro_latest, &structname##_func_latest, \ + sizeof(structname), STRINGIFY(structname)); \ \ while (structname##_curr_ver > 0) \ { \ @@ -39,8 +37,40 @@ do { \ }\ } while(0) -void test_structinit_structinit__compare(void) +static void options_cmp(void *one, void *two, size_t size, const char *name) { + size_t i; + + for (i = 0; i < size; i++) { + if (((char *)one)[i] != ((char *)two)[i]) { + char desc[1024]; + + p_snprintf(desc, 1024, "Difference in %s at byte %d: macro=%u / func=%u", + name, i, ((char *)one)[i], ((char *)two)[i]); + clar__fail(__FILE__, __LINE__, + "Difference between macro and function options initializer", + desc, 0); + return; + } + } +} + +void test_core_structinit__compare(void) +{ + /* These tests assume that they can memcmp() two structures that were + * initialized with the same static initializer. Eg, + * git_blame_options = GIT_BLAME_OPTIONS_INIT; + * + * This assumption fails when there is padding between structure members, + * which is not guaranteed to be initialized to anything sane at all. + * + * Assume most compilers, in a debug build, will clear that memory for + * us or set it to sentinal markers. Etc. + */ +#if !defined(DEBUG) && !defined(_DEBUG) + clar__skip(); +#endif + /* blame */ CHECK_MACRO_FUNC_INIT_EQUAL( \ git_blame_options, GIT_BLAME_OPTIONS_VERSION, \ |