summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-01-30 14:16:45 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2015-01-30 14:16:45 -0500
commitf83c19c87d6f484b72c24125aaac98bdc365c4b5 (patch)
treeeb906d7daa7b98bbef7b26b7eeea83cc3a17d6ad
parent6e5a397ca6433c4ef5a0988b2ea78108d6c6e69c (diff)
parent7c48508b287d1477089db0400ee8f8165f34b054 (diff)
downloadlibgit2-f83c19c87d6f484b72c24125aaac98bdc365c4b5.tar.gz
Merge pull request #2832 from ethomson/appveyor_badge
64-bit Appveyor Builds
-rw-r--r--appveyor.yml8
-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, \