Make 64bit fnv optional.
authorBrian Aker <brian@tangent.org>
Wed, 21 Sep 2011 17:19:46 +0000 (10:19 -0700)
committerBrian Aker <brian@tangent.org>
Wed, 21 Sep 2011 17:19:46 +0000 (10:19 -0700)
19 files changed:
configure.ac
libhashkit/algorithm.cc
libhashkit/algorithm.h
libhashkit/fnv_64.cc
libhashkit/function.cc
libhashkit/has.cc [new file with mode: 0644]
libhashkit/has.h [new file with mode: 0644]
libhashkit/hashkit.h
libhashkit/hsieh.cc
libhashkit/include.am
libhashkit/murmur.cc
libhashkit/types.h
libmemcached/behavior.cc
m4/fnv.m4 [new file with mode: 0644]
support/libmemcached.spec.in
tests/hash_plus.cc
tests/hashkit_functions.cc
tests/mem_functions.cc
tests/parser.cc

index 5b71b30254f4ffb3d5c570100c525648e23a0aaf..fc349ae02d33c5b0d0ef20ce416fcc8dc7c31014 100644 (file)
@@ -92,6 +92,7 @@ ENABLE_UTILLIB
 SETSOCKOPT_SANITY
 ENABLE_HSIEH_HASH
 ENABLE_MURMUR_HASH
+ENABLE_FNV64_HASH
 ENABLE_MEMASLAP
 PROTOCOL_BINARY_TEST
 ENABLE_DEPRECATED
index de00081da56c648246fdb2a7f99a72ef93b6a514..37d1cb4347886f8b1ef3f086106aa64e879f81cc 100644 (file)
@@ -38,19 +38,15 @@ uint32_t libhashkit_crc32(const char *key, size_t key_length)
   return hashkit_crc32(key, key_length, NULL);
 }
 
-#ifdef HAVE_HSIEH_HASH
 uint32_t libhashkit_hsieh(const char *key, size_t key_length)
 {
   return hashkit_hsieh(key, key_length, NULL);
 }
-#endif
 
-#ifdef HAVE_MURMUR_HASH
 uint32_t libhashkit_murmur(const char *key, size_t key_length)
 {
   return hashkit_murmur(key, key_length, NULL);
 }
-#endif
 
 uint32_t libhashkit_jenkins(const char *key, size_t key_length)
 {
index 58b40bc3cbeef2344b85b0dcfc910adf68d549f1..fa5f3ae5dacc61c4255a7d0af328d807b2af8175 100644 (file)
@@ -35,15 +35,11 @@ uint32_t libhashkit_fnv1a_32(const char *key, size_t key_length);
 HASHKIT_API
 uint32_t libhashkit_crc32(const char *key, size_t key_length);
 
-#ifdef HAVE_HSIEH_HASH
 HASHKIT_API
 uint32_t libhashkit_hsieh(const char *key, size_t key_length);
-#endif
 
-#ifdef HAVE_MURMUR_HASH
 HASHKIT_API
 uint32_t libhashkit_murmur(const char *key, size_t key_length);
-#endif
 
 HASHKIT_API
 uint32_t libhashkit_jenkins(const char *key, size_t key_length);
@@ -69,15 +65,11 @@ uint32_t hashkit_fnv1a_32(const char *key, size_t key_length, void *context);
 HASHKIT_LOCAL
 uint32_t hashkit_crc32(const char *key, size_t key_length, void *context);
 
-#ifdef HAVE_HSIEH_HASH
 HASHKIT_LOCAL
 uint32_t hashkit_hsieh(const char *key, size_t key_length, void *context);
-#endif
 
-#ifdef HAVE_MURMUR_HASH
 HASHKIT_LOCAL
 uint32_t hashkit_murmur(const char *key, size_t key_length, void *context);
-#endif
 
 HASHKIT_LOCAL
 uint32_t hashkit_jenkins(const char *key, size_t key_length, void *context);
index 0cfce633047991a83047b529eece2a86281f06af..302215a083ec6ee532945ea58def72e732ef947e 100644 (file)
@@ -38,6 +38,8 @@
 
 #include <libhashkit/common.h>
 
+#if __WORDSIZE == 64 && defined(HAVE_FNV64_HASH)
+
 /* FNV hash'es lifted from Dustin Sallings work */
 static uint64_t FNV_64_INIT= 0xcbf29ce484222325;
 static uint64_t FNV_64_PRIME= 0x100000001b3;
@@ -69,3 +71,15 @@ uint32_t hashkit_fnv1a_64(const char *key, size_t key_length, void *)
 
   return hash;
 }
+
+#else
+uint32_t hashkit_fnv1_64(const char *, size_t, void *)
+{
+  return 0;
+}
+
+uint32_t hashkit_fnv1a_64(const char *, size_t, void *)
+{
+  return 0;
+}
+#endif
index 7ac910071ef89792fa340ff4eff59a3dc4605c05..044ca07dd8202f7069972a2ff102bff9b66b250d 100644 (file)
 
 static hashkit_return_t _set_function(struct hashkit_st::hashkit_function_st *self, hashkit_hash_algorithm_t hash_algorithm)
 {
+  if (self == NULL)
+  {
+    return HASHKIT_INVALID_ARGUMENT;
+  }
+
   switch (hash_algorithm)
   {
-  case HASHKIT_HASH_DEFAULT:
-    self->function= hashkit_one_at_a_time;
-    break;
   case HASHKIT_HASH_MD5:
     self->function= hashkit_md5;
     break;
+
   case HASHKIT_HASH_CRC:
     self->function= hashkit_crc32;
     break;
+
   case HASHKIT_HASH_FNV1_64:
-    self->function= hashkit_fnv1_64;
-    break;
+    if (libhashkit_has_algorithm(HASHKIT_HASH_FNV1_64))
+    {
+      self->function= hashkit_fnv1_64;
+      break;
+    }
+    return HASHKIT_INVALID_ARGUMENT;
+
   case HASHKIT_HASH_FNV1A_64:
-    self->function= hashkit_fnv1a_64;
-    break;
+    if (libhashkit_has_algorithm(HASHKIT_HASH_FNV1_64))
+    {
+      self->function= hashkit_fnv1a_64;
+      break;
+    }
+    return HASHKIT_INVALID_ARGUMENT;
+
   case HASHKIT_HASH_FNV1_32:
     self->function= hashkit_fnv1_32;
     break;
+
   case HASHKIT_HASH_FNV1A_32:
     self->function= hashkit_fnv1a_32;
     break;
+
   case HASHKIT_HASH_HSIEH:
-#ifdef HAVE_HSIEH_HASH
-    self->function= hashkit_hsieh;
-    break;    
-#else
-    return HASHKIT_FAILURE;
-#endif
+    if (libhashkit_has_algorithm(HASHKIT_HASH_HSIEH))
+    {
+      self->function= hashkit_hsieh;
+      break;    
+    }
+    return HASHKIT_INVALID_ARGUMENT;
+
   case HASHKIT_HASH_MURMUR:
-#ifdef HAVE_MURMUR_HASH
-    self->function= hashkit_murmur;
-    break;    
-#else
-    return HASHKIT_FAILURE;
-#endif
+    if (libhashkit_has_algorithm(HASHKIT_HASH_MURMUR))
+    {
+      self->function= hashkit_murmur;
+      break;    
+    }
+    return HASHKIT_INVALID_ARGUMENT;
+
   case HASHKIT_HASH_JENKINS:
     self->function= hashkit_jenkins;
     break;    
+
   case HASHKIT_HASH_CUSTOM:
     return HASHKIT_INVALID_ARGUMENT;
+
+  case HASHKIT_HASH_DEFAULT:
+    self->function= hashkit_one_at_a_time;
+    break;
+
   case HASHKIT_HASH_MAX:
-  default:
+    self->function= hashkit_one_at_a_time;
     return HASHKIT_INVALID_HASH;
   }
 
@@ -74,6 +98,11 @@ hashkit_return_t hashkit_set_distribution_function(hashkit_st *self, hashkit_has
 
 static hashkit_return_t _set_custom_function(struct hashkit_st::hashkit_function_st *self, hashkit_hash_fn function, void *context)
 {
+  if (self == NULL)
+  {
+    return HASHKIT_INVALID_ARGUMENT;
+  }
+
   if (function)
   {
     self->function= function;
@@ -87,11 +116,22 @@ static hashkit_return_t _set_custom_function(struct hashkit_st::hashkit_function
 
 hashkit_return_t hashkit_set_custom_function(hashkit_st *self, hashkit_hash_fn function, void *context)
 {
+  if (self == NULL)
+  {
+    return HASHKIT_INVALID_ARGUMENT;
+  }
+
+
   return _set_custom_function(&self->base_hash, function, context);
 }
 
 hashkit_return_t hashkit_set_custom_distribution_function(hashkit_st *self, hashkit_hash_fn function, void *context)
 {
+  if (self == NULL)
+  {
+    return HASHKIT_INVALID_ARGUMENT;
+  }
+
   return _set_custom_function(&self->distribution_hash, function, context);
 }
 
@@ -125,18 +165,14 @@ static hashkit_hash_algorithm_t get_function_type(const hashkit_hash_fn function
   {
     return HASHKIT_HASH_FNV1A_32;
   }
-#ifdef HAVE_HSIEH_HASH
   else if (function == hashkit_hsieh)
   {
     return HASHKIT_HASH_HSIEH;
   }
-#endif
-#ifdef HAVE_MURMUR_HASH
   else if (function == hashkit_murmur)
   {
     return HASHKIT_HASH_MURMUR;
   }
-#endif
   else if (function == hashkit_jenkins)
   {
     return HASHKIT_HASH_JENKINS;
@@ -147,10 +183,20 @@ static hashkit_hash_algorithm_t get_function_type(const hashkit_hash_fn function
 
 hashkit_hash_algorithm_t hashkit_get_function(const hashkit_st *self)
 {
+  if (self == NULL)
+  {
+    return HASHKIT_HASH_DEFAULT;
+  }
+
   return get_function_type(self->base_hash.function);
 }
 
 hashkit_hash_algorithm_t hashkit_get_distribution_function(const hashkit_st *self)
 {
+  if (self == NULL)
+  {
+    return HASHKIT_HASH_DEFAULT;
+  }
+
   return get_function_type(self->distribution_hash.function);
 }
diff --git a/libhashkit/has.cc b/libhashkit/has.cc
new file mode 100644 (file)
index 0000000..111e715
--- /dev/null
@@ -0,0 +1,79 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Libmemcached library
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#include <libhashkit/common.h>
+
+bool libhashkit_has_algorithm(const hashkit_hash_algorithm_t algo)
+{
+  switch (algo)
+  {
+  case HASHKIT_HASH_FNV1_64:
+  case HASHKIT_HASH_FNV1A_64:
+#if __WORDSIZE == 64 && defined(HAVE_FNV64_HASH)
+    return true;
+#else
+    return false;
+#endif
+
+  case HASHKIT_HASH_HSIEH:
+#ifdef HAVE_HSIEH_HASH
+    return true;
+#else
+    return false;
+#endif
+
+  case HASHKIT_HASH_MURMUR:
+#ifdef HAVE_MURMUR_HASH
+    return true;
+#else
+    return false;
+#endif
+
+  case HASHKIT_HASH_FNV1_32:
+  case HASHKIT_HASH_FNV1A_32:
+  case HASHKIT_HASH_DEFAULT:
+  case HASHKIT_HASH_MD5:
+  case HASHKIT_HASH_CRC:
+  case HASHKIT_HASH_JENKINS:
+  case HASHKIT_HASH_CUSTOM:
+    return true;
+
+  case HASHKIT_HASH_MAX:
+    break;
+  }
+
+  return false;
+}
diff --git a/libhashkit/has.h b/libhashkit/has.h
new file mode 100644 (file)
index 0000000..8975c7a
--- /dev/null
@@ -0,0 +1,48 @@
+/*  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
+ * 
+ *  Libmemcached library
+ *
+ *  Copyright (C) 2011 Data Differential, http://datadifferential.com/
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ *
+ *      * Redistributions of source code must retain the above copyright
+ *  notice, this list of conditions and the following disclaimer.
+ *
+ *      * Redistributions in binary form must reproduce the above
+ *  copyright notice, this list of conditions and the following disclaimer
+ *  in the documentation and/or other materials provided with the
+ *  distribution.
+ *
+ *      * The names of its contributors may not be used to endorse or
+ *  promote products derived from this software without specific prior
+ *  written permission.
+ *
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+#pragma once
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+HASHKIT_API
+bool libhashkit_has_algorithm(const hashkit_hash_algorithm_t);
+
+#ifdef __cplusplus
+}
+#endif
index 9b8761f1c32a53777c882d82a6de16a3f59e304b..ad13ec51914aecad76e256f215053696c4eb8cc1 100644 (file)
@@ -48,6 +48,7 @@
 #include <libhashkit/visibility.h>
 #include <libhashkit/configure.h>
 #include <libhashkit/types.h>
+#include <libhashkit/has.h>
 #include <libhashkit/algorithm.h>
 #include <libhashkit/behavior.h>
 #include <libhashkit/digest.h>
index 35a2e2096c23d5c2f300a9ca877b095cc45aaabd..f70679098630f41e2def14898f5377c0bc684fd5 100644 (file)
@@ -17,7 +17,8 @@
                       +(uint32_t)(((const uint8_t *)(d))[0]) )
 #endif
 
-uint32_t hashkit_hsieh(const char *key, size_t key_length, void *context __attribute__((unused)))
+#ifdef HAVE_HSIEH_HASH
+uint32_t hashkit_hsieh(const char *key, size_t key_length, void *)
 {
   uint32_t hash = 0, tmp;
   int rem;
@@ -67,4 +68,9 @@ uint32_t hashkit_hsieh(const char *key, size_t key_length, void *context __attri
 
   return hash;
 }
-
+#else
+uint32_t hashkit_hsieh(const char *, size_t , void *)
+{
+  return 0;
+}
+#endif
index 90d623a17c12940f152d0129e9c0eb84985c22db..9a556e3551e0d015eca359e76596a8c2e0f2398a 100644 (file)
@@ -21,6 +21,7 @@ nobase_include_HEADERS+= \
                         libhashkit/configure.h \
                         libhashkit/digest.h \
                         libhashkit/function.h \
+                        libhashkit/has.h \
                         libhashkit/hashkit.h \
                         libhashkit/hashkit.hpp \
                         libhashkit/strerror.h \
@@ -39,21 +40,18 @@ libhashkit_libhashkit_la_SOURCES= \
                                  libhashkit/fnv_32.cc \
                                  libhashkit/fnv_64.cc \
                                  libhashkit/function.cc \
+                                 libhashkit/has.cc \
                                  libhashkit/hashkit.cc \
+                                 libhashkit/hsieh.cc \
                                  libhashkit/jenkins.cc \
                                  libhashkit/ketama.cc \
                                  libhashkit/md5.cc \
+                                 libhashkit/murmur.cc \
                                  libhashkit/one_at_a_time.cc \
                                  libhashkit/str_algorithm.cc \
                                  libhashkit/strerror.cc
 
-if INCLUDE_HSIEH_SRC
-libhashkit_libhashkit_la_SOURCES+= libhashkit/hsieh.cc
-endif
 
-if INCLUDE_MURMUR_SRC
-libhashkit_libhashkit_la_SOURCES+= libhashkit/murmur.cc
-endif
 
 libhashkit_libhashkit_la_CPPFLAGS= -DBUILDING_HASHKIT
 
index a40b11b744d819fae62d6697b27caace7d1ff578..d30e850d6207b008f44896ce4646076a502b3f62 100644 (file)
@@ -17,6 +17,8 @@
 
 #include <libhashkit/common.h>
 
+#ifdef HAVE_MURMUR_HASH
+
 uint32_t hashkit_murmur(const char *key, size_t length, void *context)
 {
   /*
@@ -75,3 +77,10 @@ uint32_t hashkit_murmur(const char *key, size_t length, void *context)
 
   return h;
 }
+
+#else
+uint32_t hashkit_murmur(const char *, size_t , void *)
+{
+  return 0;
+}
+#endif
index 66e4cd9c7785ec490665e26c0bb67261c49cdcea..e0f1f1387ffc2097723c58e1a438ca4e61ad68b6 100644 (file)
@@ -47,8 +47,15 @@ typedef enum {
   HASHKIT_MAXIMUM_RETURN /* Always add new error code before */
 } hashkit_return_t;
 
-#define hashkit_success(X) ((X) == HASHKIT_SUCCESS)
-#define hashkit_failed(X) ((X) != HASHKIT_SUCCESS)
+static inline bool hashkit_success(const hashkit_return_t rc)
+{
+  return (rc == HASHKIT_SUCCESS);
+}
+
+static inline bool hashkit_failed(const hashkit_return_t rc)
+{
+  return (rc != HASHKIT_SUCCESS);
+}
 
 typedef enum {
   HASHKIT_HASH_DEFAULT= 0, // hashkit_one_at_a_time()
index 6036aebd95a0dc485a335dd4c22e76ac33ea34ce..2b3b389ce709d6cddb52a174d6e8dfa75f0cad94 100644 (file)
@@ -493,7 +493,9 @@ memcached_server_distribution_t memcached_behavior_get_distribution(memcached_st
 memcached_return_t memcached_behavior_set_key_hash(memcached_st *ptr, memcached_hash_t type)
 {
   if (hashkit_success(hashkit_set_function(&ptr->hashkit, (hashkit_hash_algorithm_t)type)))
+  {
     return MEMCACHED_SUCCESS;
+  }
 
   return memcached_set_error(*ptr, MEMCACHED_INVALID_ARGUMENTS, MEMCACHED_AT,
                              memcached_literal_param("Invalid memcached_hash_t()"));
diff --git a/m4/fnv.m4 b/m4/fnv.m4
new file mode 100644 (file)
index 0000000..0045585
--- /dev/null
+++ b/m4/fnv.m4
@@ -0,0 +1,16 @@
+dnl ---------------------------------------------------------------------------
+dnl Macro: ENABLE_FNV64_HASH
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([ENABLE_FNV64_HASH],
+  [AC_ARG_ENABLE([fnv64_hash],
+    [AS_HELP_STRING([--disable-fnv64_hash],
+      [build with support for fnv64 hashing. @<:@default=on@:>@])],
+    [ac_cv_enable_fnv64_hash=no],
+    [ac_cv_enable_fnv64_hash=yes])
+
+  AS_IF([test "$ac_cv_enable_fnv64_hash" = "yes"],
+        [AC_DEFINE([HAVE_FNV64_HASH], [1], [Enables fnv64 hashing support])])
+])
+dnl ---------------------------------------------------------------------------
+dnl End Macro: ENABLE_FNV64_HASH
+dnl ---------------------------------------------------------------------------
index 02f2c4363c9ecea924f0b53cbe614558e9e1bb2d..c031b7b36592d1da2d5133175ebba162bad81bc3 100644 (file)
@@ -114,6 +114,7 @@ you will need to install %{name}-devel.
 %{_includedir}/libhashkit/configure.h
 %{_includedir}/libhashkit/digest.h
 %{_includedir}/libhashkit/function.h
+%{_includedir}/libhashkit/has.h
 %{_includedir}/libhashkit/hashkit.h
 %{_includedir}/libhashkit/hashkit.hpp
 %{_includedir}/libhashkit/str_algorithm.h
index b355fe57af7608989f24dd0e472f8955883d1961..3d2545ab66e9987dcad260ddc74468459b57bc8b 100644 (file)
@@ -16,19 +16,17 @@ using namespace libtest;
 
 #include "hash_results.h"
 
-static test_return_t exists_test(void *obj)
+static test_return_t exists_test(void *)
 {
   Hashkit hashk;
-  (void)obj;
   (void)hashk;
 
   return TEST_SUCCESS;
 }
 
-static test_return_t new_test(void *obj)
+static test_return_t new_test(void *)
 {
   Hashkit *hashk= new Hashkit;
-  (void)obj;
 
   (void)hashk;
 
@@ -37,11 +35,10 @@ static test_return_t new_test(void *obj)
   return TEST_SUCCESS;
 }
 
-static test_return_t copy_test(void *obj)
+static test_return_t copy_test(void *)
 {
   Hashkit *hashk= new Hashkit;
   Hashkit *copy(hashk);
-  (void)obj;
 
   (void)copy;
 
@@ -50,11 +47,10 @@ static test_return_t copy_test(void *obj)
   return TEST_SUCCESS;
 }
 
-static test_return_t assign_test(void *obj)
+static test_return_t assign_test(void *)
 {
   Hashkit hashk;
   Hashkit copy;
-  (void)obj;
 
   copy= hashk;
 
@@ -92,6 +88,11 @@ static test_return_t set_function_test(void *)
   {
     hashkit_return_t rc= hashk.set_function(*algo);
 
+    if (rc == HASHKIT_INVALID_ARGUMENT)
+    {
+      continue;
+    }
+
     test_compare(HASHKIT_SUCCESS, rc);
 
     uint32_t *list;
@@ -126,18 +127,12 @@ static test_return_t set_function_test(void *)
       break;
 
     case HASHKIT_HASH_HSIEH:
-#ifndef HAVE_HSIEH_HASH
-      continue;
-#endif
       list= hsieh_values;
       break;
 
     case HASHKIT_HASH_MURMUR:
 #ifdef WORDS_BIGENDIAN
       continue;
-#endif
-#ifndef HAVE_MURMUR_HASH
-      continue;
 #endif
       list= murmur_values;
       break;
@@ -170,25 +165,23 @@ static test_return_t set_function_test(void *)
   return TEST_SUCCESS;
 }
 
-static test_return_t set_distribution_function_test(void *obj)
+static test_return_t set_distribution_function_test(void *)
 {
   Hashkit hashk;
   hashkit_return_t rc;
-  (void)obj;
 
   rc= hashk.set_distribution_function(HASHKIT_HASH_CUSTOM);
   test_true_got(rc == HASHKIT_FAILURE or rc == HASHKIT_INVALID_ARGUMENT, hashkit_strerror(NULL, rc));
 
-  rc= hashk.set_distribution_function(HASHKIT_HASH_JENKINS);
-  test_true(rc == HASHKIT_SUCCESS);
+  test_compare(HASHKIT_SUCCESS,
+               hashk.set_distribution_function(HASHKIT_HASH_JENKINS));
 
   return TEST_SUCCESS;
 }
 
-static test_return_t compare_function_test(void *obj)
+static test_return_t compare_function_test(void *)
 {
   Hashkit a, b;
-  (void)obj;
 
   b= a;
   
index 12cd3988ba83cc97fbff8ef40fe8af303bc5bc36..2d664e7c64e3fb629c07608b15547ee9473b2659 100644 (file)
@@ -61,30 +61,28 @@ struct hash_test_st
   bool _unused;
 };
 
-static test_return_t init_test(void *not_used)
+static test_return_t init_test(void *)
 {
   hashkit_st hashk;
   hashkit_st *hashk_ptr;
-  (void)not_used;
 
   hashk_ptr= hashkit_create(&hashk);
   test_true(hashk_ptr);
   test_true(hashk_ptr == &hashk);
-  test_true(hashkit_is_allocated(hashk_ptr) == false);
+  test_false(hashkit_is_allocated(hashk_ptr));
 
   hashkit_free(hashk_ptr);
 
   return TEST_SUCCESS;
 }
 
-static test_return_t allocation_test(void *not_used)
+static test_return_t allocation_test(void *)
 {
   hashkit_st *hashk_ptr;
-  (void)not_used;
 
   hashk_ptr= hashkit_create(NULL);
   test_true(hashk_ptr);
-  test_true(hashkit_is_allocated(hashk_ptr) == true);
+  test_true(hashkit_is_allocated(hashk_ptr));
   hashkit_free(hashk_ptr);
 
   return TEST_SUCCESS;
@@ -93,7 +91,7 @@ static test_return_t allocation_test(void *not_used)
 static test_return_t clone_test(hashkit_st *hashk)
 {
   // First we make sure that the testing system is giving us what we expect.
-  assert(&global_hashk == hashk);
+  test_true(&global_hashk == hashk);
 
   // Second we test if hashk is even valid
 
@@ -147,149 +145,126 @@ static test_return_t clone_test(hashkit_st *hashk)
   return TEST_SUCCESS;
 }
 
-static test_return_t one_at_a_time_run (hashkit_st *hashk)
+static test_return_t one_at_a_time_run (hashkit_st *)
 {
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_one_at_a_time(*ptr, strlen(*ptr));
-    test_true(one_at_a_time_values[x] == hash_val);
+    test_compare(one_at_a_time_values[x],
+                 libhashkit_one_at_a_time(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t md5_run (hashkit_st *hashk)
+static test_return_t md5_run (hashkit_st *)
 {
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_md5(*ptr, strlen(*ptr));
-    test_true(md5_values[x] == hash_val);
+    test_compare(md5_values[x],
+                 libhashkit_md5(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t crc_run (hashkit_st *hashk)
+static test_return_t crc_run (hashkit_st *)
 {
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_crc32(*ptr, strlen(*ptr));
-    test_compare(crc_values[x], hash_val);
+    test_compare(crc_values[x],
+                 libhashkit_crc32(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t fnv1_64_run (hashkit_st *hashk)
+static test_return_t fnv1_64_run (hashkit_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_FNV1_64));
+
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_fnv1_64(*ptr, strlen(*ptr));
-    test_compare(fnv1_64_values[x], hash_val);
+    test_compare(fnv1_64_values[x],
+                 libhashkit_fnv1_64(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t fnv1a_64_run (hashkit_st *hashk)
+static test_return_t fnv1a_64_run (hashkit_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_FNV1A_64));
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_fnv1a_64(*ptr, strlen(*ptr));
-    test_compare(fnv1a_64_values[x], hash_val);
+    test_compare(fnv1a_64_values[x],
+                 libhashkit_fnv1a_64(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t fnv1_32_run (hashkit_st *hashk)
+static test_return_t fnv1_32_run (hashkit_st *)
 {
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_fnv1_32(*ptr, strlen(*ptr));
-    test_compare(fnv1_32_values[x], hash_val);
+    test_compare(fnv1_32_values[x],
+                 libhashkit_fnv1_32(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t fnv1a_32_run (hashkit_st *hashk)
+static test_return_t fnv1a_32_run (hashkit_st *)
 {
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_fnv1a_32(*ptr, strlen(*ptr));
-    test_compare(fnv1a_32_values[x], hash_val);
+    test_compare(fnv1a_32_values[x],
+                 libhashkit_fnv1a_32(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t hsieh_run (hashkit_st *hashk)
+static test_return_t hsieh_run (hashkit_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_HSIEH));
+
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-#ifdef HAVE_HSIEH_HASH
-    hash_val= libhashkit_hsieh(*ptr, strlen(*ptr));
-#else
-    hash_val= 1;
-#endif
-    test_compare(hsieh_values[x], hash_val);
+    test_compare(hsieh_values[x],
+                 libhashkit_hsieh(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 }
 
-static test_return_t murmur_run (hashkit_st *hashk)
+static test_return_t murmur_run (hashkit_st *)
 {
-  (void)hashk;
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_MURMUR));
 
 #ifdef WORDS_BIGENDIAN
   (void)murmur_values;
@@ -300,32 +275,23 @@ static test_return_t murmur_run (hashkit_st *hashk)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-#ifdef HAVE_MURMUR_HASH
-    hash_val= libhashkit_murmur(*ptr, strlen(*ptr));
-#else
-    hash_val= 1;
-#endif
-    test_compare(murmur_values[x], hash_val);
+    test_compare(murmur_values[x],
+                 libhashkit_murmur(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
 #endif
 }
 
-static test_return_t jenkins_run (hashkit_st *hashk)
+static test_return_t jenkins_run (hashkit_st *)
 {
   uint32_t x;
   const char **ptr;
-  (void)hashk;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= libhashkit_jenkins(*ptr, strlen(*ptr));
-    test_compare(jenkins_values[x], hash_val);
+    test_compare(jenkins_values[x],
+                 libhashkit_jenkins(*ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
@@ -360,56 +326,54 @@ static test_return_t hashkit_set_function_test(hashkit_st *hashk)
     const char **ptr;
     uint32_t *list;
 
-    hashkit_return_t rc= hashkit_set_function(hashk, static_cast<hashkit_hash_algorithm_t>(algo));
+    test_skip(true, libhashkit_has_algorithm(static_cast<hashkit_hash_algorithm_t>(algo)));
 
-    /* Hsieh is disabled most of the time for patent issues */
-#ifndef HAVE_HSIEH_HASH
-    if (rc == HASHKIT_FAILURE && algo == HASHKIT_HASH_HSIEH)
-      continue;
-#endif
-
-#ifndef HAVE_MURMUR_HASH
-    if (rc == HASHKIT_FAILURE && algo == HASHKIT_HASH_MURMUR)
-      continue;
-#endif
-
-    if (rc == HASHKIT_INVALID_ARGUMENT && algo == HASHKIT_HASH_CUSTOM)
-      continue;
+    hashkit_return_t rc= hashkit_set_function(hashk, static_cast<hashkit_hash_algorithm_t>(algo));
 
-    test_true_got(rc == HASHKIT_SUCCESS, hashkit_strerror(NULL, rc));
+    test_compare_got(HASHKIT_SUCCESS, rc, hashkit_strerror(NULL, rc));
 
     switch (algo)
     {
     case HASHKIT_HASH_DEFAULT:
       list= one_at_a_time_values;
       break;
+
     case HASHKIT_HASH_MD5:
       list= md5_values;
       break;
+
     case HASHKIT_HASH_CRC:
       list= crc_values;
       break;
+
     case HASHKIT_HASH_FNV1_64:
       list= fnv1_64_values;
       break;
+
     case HASHKIT_HASH_FNV1A_64:
       list= fnv1a_64_values;
       break;
+
     case HASHKIT_HASH_FNV1_32:
       list= fnv1_32_values;
       break;
+
     case HASHKIT_HASH_FNV1A_32:
       list= fnv1a_32_values;
       break;
+
     case HASHKIT_HASH_HSIEH:
       list= hsieh_values;
       break;
+
     case HASHKIT_HASH_MURMUR:
       list= murmur_values;
       break;
+
     case HASHKIT_HASH_JENKINS:
       list= jenkins_values;
       break;
+
     case HASHKIT_HASH_CUSTOM:
     case HASHKIT_HASH_MAX:
     default:
@@ -422,10 +386,8 @@ static test_return_t hashkit_set_function_test(hashkit_st *hashk)
     {
       for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
       {
-        uint32_t hash_val;
-
-        hash_val= hashkit_digest(hashk, *ptr, strlen(*ptr));
-        test_true(list[x] == hash_val);
+        test_compare(list[x],
+                     hashkit_digest(hashk, *ptr, strlen(*ptr)));
       }
     }
     else
@@ -437,28 +399,24 @@ static test_return_t hashkit_set_function_test(hashkit_st *hashk)
   return TEST_SUCCESS;
 }
 
-static uint32_t hash_test_function(const char *string, size_t string_length, void *context)
+static uint32_t hash_test_function(const char *string, size_t string_length, void *)
 {
-  (void)context;
   return libhashkit_md5(string, string_length);
 }
 
 static test_return_t hashkit_set_custom_function_test(hashkit_st *hashk)
 {
-  hashkit_return_t rc;
   uint32_t x;
   const char **ptr;
 
 
-  rc= hashkit_set_custom_function(hashk, hash_test_function, NULL);
-  test_true(rc == HASHKIT_SUCCESS);
+  test_compare(HASHKIT_SUCCESS, 
+               hashkit_set_custom_function(hashk, hash_test_function, NULL));
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= hashkit_digest(hashk, *ptr, strlen(*ptr));
-    test_true(md5_values[x] == hash_val);
+    test_compare(md5_values[x], 
+                 hashkit_digest(hashk, *ptr, strlen(*ptr)));
   }
 
   return TEST_SUCCESS;
@@ -471,13 +429,10 @@ static test_return_t hashkit_set_distribution_function_test(hashkit_st *hashk)
     hashkit_return_t rc= hashkit_set_distribution_function(hashk, static_cast<hashkit_hash_algorithm_t>(algo));
 
     /* Hsieh is disabled most of the time for patent issues */
-    if (rc == HASHKIT_FAILURE && algo == HASHKIT_HASH_HSIEH)
-      continue;
-
-    if (rc == HASHKIT_INVALID_ARGUMENT && algo == HASHKIT_HASH_CUSTOM)
+    if (rc == HASHKIT_INVALID_ARGUMENT)
       continue;
 
-    test_true(rc == HASHKIT_SUCCESS);
+    test_compare(HASHKIT_SUCCESS, rc);
   }
 
   return TEST_SUCCESS;
@@ -485,8 +440,8 @@ static test_return_t hashkit_set_distribution_function_test(hashkit_st *hashk)
 
 static test_return_t hashkit_set_custom_distribution_function_test(hashkit_st *hashk)
 {
-  hashkit_return_t rc= hashkit_set_custom_distribution_function(hashk, hash_test_function, NULL);
-  test_true(rc == HASHKIT_SUCCESS);
+  test_compare(HASHKIT_SUCCESS,
+               hashkit_set_custom_distribution_function(hashk, hash_test_function, NULL));
 
   return TEST_SUCCESS;
 }
@@ -497,13 +452,16 @@ static test_return_t hashkit_get_function_test(hashkit_st *hashk)
   for (int algo= int(HASHKIT_HASH_DEFAULT); algo < int(HASHKIT_HASH_MAX); algo++)
   {
 
-    if (HASHKIT_HASH_CUSTOM or HASHKIT_HASH_HSIEH)
+    if (HASHKIT_HASH_CUSTOM)
+    {
       continue;
+    }
+    test_skip(true, libhashkit_has_algorithm(static_cast<hashkit_hash_algorithm_t>(algo)));
 
-    hashkit_return_t rc= hashkit_set_function(hashk, static_cast<hashkit_hash_algorithm_t>(algo));
-    test_true(rc == HASHKIT_SUCCESS);
+    test_compare(HASHKIT_SUCCESS,
+                 hashkit_set_function(hashk, static_cast<hashkit_hash_algorithm_t>(algo)));
 
-    test_true(hashkit_get_function(hashk) == algo);
+    test_compare(hashkit_get_function(hashk), algo);
   }
   return TEST_SUCCESS;
 }
@@ -529,13 +487,9 @@ test_st hashkit_st_functions[] ={
   {0, 0, 0}
 };
 
-static test_return_t libhashkit_digest_test(hashkit_st *hashk)
+static test_return_t libhashkit_digest_test(hashkit_st *)
 {
-
-  (void)hashk;
-
-  uint32_t value= libhashkit_digest("a", sizeof("a"), HASHKIT_HASH_DEFAULT);
-  test_true(value);
+  test_true(libhashkit_digest("a", sizeof("a"), HASHKIT_HASH_DEFAULT));
 
   return TEST_SUCCESS;
 }
index c0dde998b83d3a4cb3766ce04348eb9c2babe91d..bc54b6717a5db9f532d1f04a2a5ba911cd0f0e16 100644 (file)
@@ -3525,13 +3525,8 @@ static test_return_t pre_nonblock_binary(memcached_st *memc)
 
 static test_return_t pre_murmur(memcached_st *memc)
 {
-#ifdef HAVE_MURMUR_HASH
-  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR);
+  test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR));
   return TEST_SUCCESS;
-#else
-  (void) memc;
-  return TEST_SKIPPED;
-#endif
 }
 
 static test_return_t pre_jenkins(memcached_st *memc)
@@ -3558,25 +3553,20 @@ static test_return_t pre_crc(memcached_st *memc)
 
 static test_return_t pre_hsieh(memcached_st *memc)
 {
-#ifdef HAVE_HSIEH_HASH
-  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_HSIEH);
+  test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_HSIEH));
   return TEST_SUCCESS;
-#else
-  (void) memc;
-  return TEST_SKIPPED;
-#endif
 }
 
 static test_return_t pre_hash_fnv1_64(memcached_st *memc)
 {
-  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR);
+  test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_MURMUR));
 
   return TEST_SUCCESS;
 }
 
 static test_return_t pre_hash_fnv1a_64(memcached_st *memc)
 {
-  memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_FNV1A_64);
+  test_skip(MEMCACHED_SUCCESS, memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH, (uint64_t)MEMCACHED_HASH_FNV1A_64));
 
   return TEST_SUCCESS;
 }
@@ -4436,26 +4426,30 @@ static test_return_t hash_sanity_test (memcached_st *memc)
 
 static test_return_t hsieh_avaibility_test (memcached_st *memc)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_HSIEH));
+
   memcached_return_t expected_rc= MEMCACHED_INVALID_ARGUMENTS;
 #ifdef HAVE_HSIEH_HASH
   expected_rc= MEMCACHED_SUCCESS;
 #endif
   memcached_return_t rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH,
                                                 (uint64_t)MEMCACHED_HASH_HSIEH);
-  test_true(rc == expected_rc);
+  test_compare(expected_rc, rc);
 
   return TEST_SUCCESS;
 }
 
 static test_return_t murmur_avaibility_test (memcached_st *memc)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_MURMUR));
+
   memcached_return_t expected_rc= MEMCACHED_INVALID_ARGUMENTS;
 #ifdef HAVE_MURMUR_HASH
   expected_rc= MEMCACHED_SUCCESS;
 #endif
   memcached_return_t rc= memcached_behavior_set(memc, MEMCACHED_BEHAVIOR_HASH,
                                                 (uint64_t)MEMCACHED_HASH_MURMUR);
-  test_true(rc == expected_rc);
+  test_compare(expected_rc, rc);
 
   return TEST_SUCCESS;
 }
@@ -4467,10 +4461,8 @@ static test_return_t one_at_a_time_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_DEFAULT);
-    test_true(one_at_a_time_values[x] == hash_val);
+    test_compare(one_at_a_time_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_DEFAULT));
   }
 
   return TEST_SUCCESS;
@@ -4483,10 +4475,8 @@ static test_return_t md5_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_MD5);
-    test_true(md5_values[x] == hash_val);
+    test_compare(md5_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_MD5));
   }
 
   return TEST_SUCCESS;
@@ -4499,10 +4489,8 @@ static test_return_t crc_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_CRC);
-    test_true(crc_values[x] == hash_val);
+    test_compare(crc_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_CRC));
   }
 
   return TEST_SUCCESS;
@@ -4510,15 +4498,15 @@ static test_return_t crc_run (memcached_st *)
 
 static test_return_t fnv1_64_run (memcached_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_FNV1_64));
+
   uint32_t x;
   const char **ptr;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1_64);
-    test_true(fnv1_64_values[x] == hash_val);
+    test_compare(fnv1_64_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1_64));
   }
 
   return TEST_SUCCESS;
@@ -4526,15 +4514,15 @@ static test_return_t fnv1_64_run (memcached_st *)
 
 static test_return_t fnv1a_64_run (memcached_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_FNV1A_64));
+
   uint32_t x;
   const char **ptr;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1A_64);
-    test_true(fnv1a_64_values[x] == hash_val);
+    test_compare(fnv1a_64_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1A_64));
   }
 
   return TEST_SUCCESS;
@@ -4547,10 +4535,8 @@ static test_return_t fnv1_32_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1_32);
-    test_true(fnv1_32_values[x] == hash_val);
+    test_compare(fnv1_32_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1_32));
   }
 
   return TEST_SUCCESS;
@@ -4563,10 +4549,8 @@ static test_return_t fnv1a_32_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1A_32);
-    test_true(fnv1a_32_values[x] == hash_val);
+    test_compare(fnv1a_32_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_FNV1A_32));
   }
 
   return TEST_SUCCESS;
@@ -4574,15 +4558,15 @@ static test_return_t fnv1a_32_run (memcached_st *)
 
 static test_return_t hsieh_run (memcached_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_HSIEH));
+
   uint32_t x;
   const char **ptr;
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_HSIEH);
-    test_true(hsieh_values[x] == hash_val);
+    test_compare(hsieh_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_HSIEH));
   }
 
   return TEST_SUCCESS;
@@ -4590,6 +4574,8 @@ static test_return_t hsieh_run (memcached_st *)
 
 static test_return_t murmur_run (memcached_st *)
 {
+  test_skip(true, libhashkit_has_algorithm(HASHKIT_HASH_MURMUR));
+
 #ifdef WORDS_BIGENDIAN
   (void)murmur_values;
   return TEST_SKIPPED;
@@ -4599,10 +4585,8 @@ static test_return_t murmur_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_MURMUR);
-    test_true(murmur_values[x] == hash_val);
+    test_compare(murmur_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_MURMUR));
   }
 
   return TEST_SUCCESS;
@@ -4616,24 +4600,20 @@ static test_return_t jenkins_run (memcached_st *)
 
   for (ptr= list_to_hash, x= 0; *ptr; ptr++, x++)
   {
-    uint32_t hash_val;
-
-    hash_val= memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_JENKINS);
-    test_true(jenkins_values[x] == hash_val);
+    test_compare(jenkins_values[x],
+                 memcached_generate_hash_value(*ptr, strlen(*ptr), MEMCACHED_HASH_JENKINS));
   }
 
   return TEST_SUCCESS;
 }
 
-static uint32_t hash_md5_test_function(const char *string, size_t string_length, void *context)
+static uint32_t hash_md5_test_function(const char *string, size_t string_length, void *)
 {
-  (void)context;
   return libhashkit_md5(string, string_length);
 }
 
-static uint32_t hash_crc_test_function(const char *string, size_t string_length, void *context)
+static uint32_t hash_crc_test_function(const char *string, size_t string_length, void *)
 {
-  (void)context;
   return libhashkit_crc32(string, string_length);
 }
 
index dd8062c287547d10a3a03b893f6c7adddfabf2c2..898fdb54a73494e9b21403e94e2f365b393c98a8 100644 (file)
@@ -221,12 +221,9 @@ scanner_variable_t distribution_strings[]= {
 scanner_variable_t hash_strings[]= {
   { ARRAY,  make_scanner_string("--HASH=CRC"), scanner_string_null, NULL },
   { ARRAY,  make_scanner_string("--HASH=FNV1A_32"), scanner_string_null, NULL },
-  { ARRAY,  make_scanner_string("--HASH=FNV1A_64"), scanner_string_null, NULL },
   { ARRAY,  make_scanner_string("--HASH=FNV1_32"), scanner_string_null, NULL },
-  { ARRAY,  make_scanner_string("--HASH=FNV1_64"), scanner_string_null, NULL },
   { ARRAY,  make_scanner_string("--HASH=JENKINS"), scanner_string_null, NULL },
   { ARRAY,  make_scanner_string("--HASH=MD5"), scanner_string_null, NULL },
-  { ARRAY,  make_scanner_string("--HASH=MURMUR"), scanner_string_null, NULL },
   { NIL, scanner_string_null, scanner_string_null, NULL}
 };