ofproto-dpif: Use sequence number to wake up main thread for
[sliver-openvswitch.git] / tests / test-hindex.c
index b5fe9f0..4c4fdf2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009, 2010, 2013 Nicira, Inc.
+ * Copyright (c) 2008, 2009, 2010, 2013, 2014 Nicira, Inc.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -21,7 +21,9 @@
 #include "hindex.h"
 #include <string.h>
 #include "hash.h"
+#include "random.h"
 #include "util.h"
+#include "ovstest.h"
 
 #undef NDEBUG
 #include <assert.h>
@@ -108,7 +110,7 @@ static void
 shuffle(int *p, size_t n)
 {
     for (; n > 1; n--, p++) {
-        int *q = &p[rand() % n];
+        int *q = &p[random_range(n)];
         int tmp = *p;
         *p = *q;
         *q = tmp;
@@ -136,7 +138,7 @@ print_hindex(const char *name, struct hindex *hindex)
 
     printf("%s:", name);
     HINDEX_FOR_EACH (e, node, hindex) {
-        printf(" %d(%zu)", e->value, e->node.hash & hindex->mask);
+        printf(" %d(%"PRIuSIZE")", e->value, e->node.hash & hindex->mask);
     }
     printf("\n");
 }
@@ -177,6 +179,12 @@ mod2_hash(int value)
     return value % 2;
 }
 
+static size_t
+multipart_hash(int value)
+{
+    return (mod4_hash(value) << 16) | (constant_hash(value) & 0xFFFF);
+}
+
 /* Tests basic hindex insertion and deletion. */
 static void
 test_hindex_insert_delete(hash_func *hash)
@@ -297,6 +305,7 @@ run_test(void (*function)(hash_func *))
         mod4_hash,
         mod3_hash,
         mod2_hash,
+        multipart_hash,
     };
     size_t i;
 
@@ -307,13 +316,13 @@ run_test(void (*function)(hash_func *))
     }
 }
 
-int
-main(void)
+static void
+test_hindex_main(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     run_test(test_hindex_insert_delete);
     run_test(test_hindex_for_each_safe);
     run_test(test_hindex_reserve_shrink);
     printf("\n");
-    return 0;
 }
 
+OVSTEST_REGISTER("test-hindex", test_hindex_main);