tests: Slightly generalize utility function tests.
authorBen Pfaff <blp@nicira.com>
Mon, 30 Jul 2012 16:35:32 +0000 (09:35 -0700)
committerBen Pfaff <blp@nicira.com>
Wed, 1 Aug 2012 17:55:57 +0000 (10:55 -0700)
This will allow passing arguments in for an upcoming test.

Signed-off-by: Ben Pfaff <blp@nicira.com>
tests/library.at
tests/test-util.c

index dce69dea07f29de056f5af84864065eb0f54637a..70660a2569f943a47b4d3d1b7b8122c0cc93cb84 100644 (file)
@@ -100,10 +100,17 @@ nibble   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
 ])
 AT_CLEANUP
 
-AT_SETUP([test utility functions])
-AT_KEYWORDS([util])
-AT_CHECK([test-util])
-AT_CLEANUP
+m4_foreach(
+  [testname],
+  [[ctz],
+   [log_2_floor],
+   [bitwise_copy],
+   [bitwise_zero],
+   [bitwise_one],
+   [bitwise_is_all_zeros]],
+  [AT_SETUP([testname[()] function])
+   AT_CHECK([test-util testname], [0], [], [])
+   AT_CLEANUP])
 
 AT_SETUP([test unix socket -- short pathname])
 AT_CHECK([test-unix-socket x])
index 097b1eb481f5e8c9f4995cf93f74a030bf8be202..56c5b28f0fa70d5a79bb33145c01e15e9bf0f0f1 100644 (file)
@@ -22,6 +22,7 @@
 #include <stdlib.h>
 
 #include "byte-order.h"
+#include "command-line.h"
 #include "random.h"
 #include "util.h"
 
@@ -35,6 +36,25 @@ check_log_2_floor(uint32_t x, int n)
     }
 }
 
+static void
+test_log_2_floor(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+{
+    int n;
+
+    for (n = 0; n < 32; n++) {
+        /* Check minimum x such that f(x) == n. */
+        check_log_2_floor(1 << n, n);
+
+        /* Check maximum x such that f(x) == n. */
+        check_log_2_floor((1 << n) | ((1 << n) - 1), n);
+
+        /* Check a random value in the middle. */
+        check_log_2_floor((random_uint32() & ((1 << n) - 1)) | (1 << n), n);
+    }
+
+    /* log_2_floor(0) is undefined, so don't check it. */
+}
+
 static void
 check_ctz(uint32_t x, int n)
 {
@@ -45,6 +65,26 @@ check_ctz(uint32_t x, int n)
     }
 }
 
+static void
+test_ctz(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
+{
+    int n;
+
+    for (n = 0; n < 32; n++) {
+        /* Check minimum x such that f(x) == n. */
+        check_ctz(1 << n, n);
+
+        /* Check maximum x such that f(x) == n. */
+        check_ctz(UINT32_MAX << n, n);
+
+        /* Check a random value in the middle. */
+        check_ctz((random_uint32() | 1) << n, n);
+    }
+
+    /* Check ctz(0). */
+    check_ctz(0, 32);
+}
+
 /* Returns the sum of the squares of the first 'n' positive integers. */
 static unsigned int
 sum_of_squares(int n)
@@ -53,7 +93,7 @@ sum_of_squares(int n)
 }
 
 static void
-check_bitwise_copy(void)
+test_bitwise_copy(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     unsigned int n_loops;
     int src_ofs;
@@ -103,7 +143,7 @@ check_bitwise_copy(void)
 }
 
 static void
-check_bitwise_zero(void)
+test_bitwise_zero(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     unsigned int n_loops;
     int dst_ofs;
@@ -144,7 +184,7 @@ check_bitwise_zero(void)
 }
 
 static void
-check_bitwise_one(void)
+test_bitwise_one(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     unsigned int n_loops;
     int dst_ofs;
@@ -185,7 +225,7 @@ check_bitwise_one(void)
 }
 
 static void
-check_bitwise_is_all_zeros(void)
+test_bitwise_is_all_zeros(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     int n_loops;
 
@@ -227,37 +267,21 @@ check_bitwise_is_all_zeros(void)
         }
     }
 }
+\f
+static const struct command commands[] = {
+    {"ctz", 0, 0, test_ctz},
+    {"log_2_floor", 0, 0, test_log_2_floor},
+    {"bitwise_copy", 0, 0, test_bitwise_copy},
+    {"bitwise_zero", 0, 0, test_bitwise_zero},
+    {"bitwise_one", 0, 0, test_bitwise_one},
+    {"bitwise_is_all_zeros", 0, 0, test_bitwise_is_all_zeros},
+    {NULL, 0, 0, NULL},
+};
 
 int
-main(void)
+main(int argc, char *argv[])
 {
-    int n;
-
-    for (n = 0; n < 32; n++) {
-        /* Check minimum x such that f(x) == n. */
-        check_log_2_floor(1 << n, n);
-        check_ctz(1 << n, n);
-
-        /* Check maximum x such that f(x) == n. */
-        check_log_2_floor((1 << n) | ((1 << n) - 1), n);
-        check_ctz(UINT32_MAX << n, n);
-
-        /* Check a random value in the middle. */
-        check_log_2_floor((random_uint32() & ((1 << n) - 1)) | (1 << n), n);
-        check_ctz((random_uint32() | 1) << n, n);
-    }
-
-    /* Check ctz(0).
-     * (log_2_floor(0) is undefined.) */
-    check_ctz(0, 32);
-
-    check_bitwise_copy();
-
-    check_bitwise_zero();
-
-    check_bitwise_one();
-
-    check_bitwise_is_all_zeros();
-
+    set_program_name(argv[0]);
+    run_command(argc - 1, argv + 1, commands);
     return 0;
 }