ofproto: Fix potential leak during flow mods.
[sliver-openvswitch.git] / tests / test-list.c
index 0aa0f8b..5cba959 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2008, 2009 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011, 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.
@@ -20,6 +20,7 @@
 #include <config.h>
 #include "list.h"
 #include <string.h>
+#include "ovstest.h"
 
 #undef NDEBUG
 #include <assert.h>
@@ -34,10 +35,10 @@ struct element {
  * elements in order into 'list'. */
 static void
 make_list(struct list *list, struct element elements[],
-          int values[], size_t n) 
+          int values[], size_t n)
 {
     size_t i;
-    
+
     list_init(list);
     for (i = 0; i < n; i++) {
         elements[i].value = i;
@@ -49,13 +50,13 @@ make_list(struct list *list, struct element elements[],
 /* Verifies that 'list' contains exactly the 'n' values in 'values', in the
  * specified order. */
 static void
-check_list(struct list *list, const int values[], size_t n) 
+check_list(struct list *list, const int values[], size_t n)
 {
     struct element *e;
     size_t i;
-    
+
     i = 0;
-    LIST_FOR_EACH (e, struct element, node, list) {
+    LIST_FOR_EACH (e, node, list) {
         assert(i < n);
         assert(e->value == values[i]);
         i++;
@@ -64,7 +65,7 @@ check_list(struct list *list, const int values[], size_t n)
     assert(i == n);
 
     i = 0;
-    LIST_FOR_EACH_REVERSE (e, struct element, node, list) {
+    LIST_FOR_EACH_REVERSE (e, node, list) {
         assert(i < n);
         assert(e->value == values[n - i - 1]);
         i++;
@@ -73,18 +74,20 @@ check_list(struct list *list, const int values[], size_t n)
     assert(i == n);
 
     assert(list_is_empty(list) == !n);
+    assert(list_is_singleton(list) == (n == 1));
+    assert(list_is_short(list) == (n < 2));
     assert(list_size(list) == n);
 }
 
 #if 0
 /* Prints the values in 'list', plus 'name' as a title. */
 static void
-print_list(const char *name, struct list *list) 
+print_list(const char *name, struct list *list)
 {
     struct element *e;
-    
+
     printf("%s:", name);
-    LIST_FOR_EACH (e, struct element, node, list) {
+    LIST_FOR_EACH (e, node, list) {
         printf(" %d", e->value);
     }
     printf("\n");
@@ -93,7 +96,7 @@ print_list(const char *name, struct list *list)
 
 /* Tests basic list construction. */
 static void
-test_list_construction(void) 
+test_list_construction(void)
 {
     enum { MAX_ELEMS = 100 };
     size_t n;
@@ -102,7 +105,7 @@ test_list_construction(void)
         struct element elements[MAX_ELEMS];
         int values[MAX_ELEMS];
         struct list list;
-        
+
         make_list(&list, elements, values, n);
         check_list(&list, values, n);
     }
@@ -111,7 +114,7 @@ test_list_construction(void)
 /* Tests that LIST_FOR_EACH_SAFE properly allows for deletion of the current
  * element of a list.  */
 static void
-test_list_for_each_safe(void) 
+test_list_for_each_safe(void)
 {
     enum { MAX_ELEMS = 10 };
     size_t n;
@@ -125,13 +128,13 @@ test_list_for_each_safe(void)
             struct element *e, *next;
             size_t values_idx, n_remaining;
             int i;
-        
+
             make_list(&list, elements, values, n);
 
             i = 0;
             values_idx = 0;
             n_remaining = n;
-            LIST_FOR_EACH_SAFE (e, next, struct element, node, &list) {
+            LIST_FOR_EACH_SAFE (e, next, node, &list) {
                 assert(i < n);
                 if (pattern & (1ul << i)) {
                     list_remove(&e->node);
@@ -158,18 +161,18 @@ test_list_for_each_safe(void)
 }
 
 static void
-run_test(void (*function)(void)) 
+run_test(void (*function)(void))
 {
     function();
     printf(".");
 }
 
-int
-main(void) 
+static void
+test_list_main(int argc OVS_UNUSED, char *argv[] OVS_UNUSED)
 {
     run_test(test_list_construction);
     run_test(test_list_for_each_safe);
     printf("\n");
-    return 0;
 }
 
+OVSTEST_REGISTER("test-list", test_list_main);