Returns now GNUNET_SYSERR
[oweals/gnunet.git] / src / util / test_container_slist.c
index 0c4525c452c1e9b8f82ad498afb13a65c8a90e70..fc3e8a2a4c8075280dbaf839e667ecbf3061e7d4 100644 (file)
@@ -4,7 +4,7 @@
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
+     by the Free Software Foundation; either version 3, or (at your
      option) any later version.
 
      GNUnet is distributed in the hope that it will be useful, but
 #include "gnunet_common.h"
 #include "gnunet_container_lib.h"
 
-#define ABORT() { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); return 1; }
-#define CHECK(c) { if (! (c)) ABORT(); }
+#define CHECK(c) do { if (! (c)) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); GNUNET_CONTAINER_slist_destroy (l); return 1; } } while (0)
 
 int
 main (int argc, char *argv[])
 {
   struct GNUNET_CONTAINER_SList *l;
   struct GNUNET_CONTAINER_SList_Iterator *it;
-  unsigned int i, j, s;
-  const void *p;    
+  unsigned int i;
+  int *ip;
+  unsigned int j;
+  size_t s;
+  const void *p;
 
   GNUNET_log_setup ("test-container-slist", "WARNING", NULL);
 
@@ -46,7 +48,9 @@ main (int argc, char *argv[])
   CHECK (GNUNET_CONTAINER_slist_count (l) == 0);
 
   for (i = 0; i < 100; i++)
-    GNUNET_CONTAINER_slist_add (l, GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, &i, sizeof (i));
+    GNUNET_CONTAINER_slist_add (l,
+                                GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
+                                &i, sizeof (i));
   CHECK (GNUNET_CONTAINER_slist_count (l) == 100);
 
   for (it = GNUNET_CONTAINER_slist_begin (l), i = 99;
@@ -54,16 +58,20 @@ main (int argc, char *argv[])
        GNUNET_CONTAINER_slist_next (it), i--)
     {
       p = GNUNET_CONTAINER_slist_get (it, &s);
-      CHECK (p != NULL);
-      j = *(int *) p;
-      CHECK (i == j);
-      CHECK (s == sizeof (i));
 
+      if ( (p == NULL) ||
+          (i != (j = *(int *) p)) ||
+          (s != sizeof (i)) )
+       {
+         GNUNET_CONTAINER_slist_iter_destroy (it);
+         CHECK (0);
+       }
       j *= 2;
-      GNUNET_CONTAINER_slist_insert (it, GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, &j,
-                                     sizeof (j));
+      GNUNET_CONTAINER_slist_insert (it,
+                                     GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
+                                     &j, sizeof (j));
     }
-  GNUNET_free (it);
+  GNUNET_CONTAINER_slist_iter_destroy (it);
   CHECK (GNUNET_CONTAINER_slist_count (l) == 200);
   i = 198;
   CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)));
@@ -88,19 +96,75 @@ main (int argc, char *argv[])
 
       GNUNET_CONTAINER_slist_erase (it);
     }
-  GNUNET_free (it);
+  GNUNET_CONTAINER_slist_iter_destroy (it);
   CHECK (GNUNET_CONTAINER_slist_count (l) == 100);
   i = 99;
   CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)) == GNUNET_NO);
   i = 198;
-  CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)));
+  CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)) == GNUNET_YES);
 
   GNUNET_CONTAINER_slist_clear (l);
   CHECK (GNUNET_CONTAINER_slist_count (l) == 0);
 
   for (i = 0; i < 100; i++)
-    GNUNET_CONTAINER_slist_add (l, GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT, &i, sizeof (i));
+    GNUNET_CONTAINER_slist_add (l,
+                                GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
+                                &i, sizeof (i));
+  /*check slist_append*/
+  GNUNET_CONTAINER_slist_append(l,l);
+  CHECK (GNUNET_CONTAINER_slist_count (l) == 200);
+
+  GNUNET_CONTAINER_slist_destroy (l);
+
+  /*check slist_add_end*/
+  l = GNUNET_CONTAINER_slist_create ();
+  for (i = 0; i < 100; i++)
+    GNUNET_CONTAINER_slist_add_end (l,
+                                GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
+                                &i, sizeof (i));
+
+  CHECK (GNUNET_CONTAINER_slist_count (l) == 100);
 
+  for (it = GNUNET_CONTAINER_slist_begin (l), i = 0;
+       GNUNET_CONTAINER_slist_end (it) != GNUNET_YES;
+       GNUNET_CONTAINER_slist_next (it), i++)
+  {
+    p = GNUNET_CONTAINER_slist_get (it, &s);
+
+    if ((p == NULL) ||
+        (i != *(int *) p) ||
+        (s != sizeof (i)))
+    {
+      GNUNET_CONTAINER_slist_iter_destroy (it);
+      CHECK (0);
+    }
+  }
+
+  GNUNET_CONTAINER_slist_destroy (l);
+
+  /*check if disp = GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC*/
+  l = GNUNET_CONTAINER_slist_create ();
+  
+  for (i = 0; i < 100; i++)
+    {
+      ip = GNUNET_malloc (sizeof (int));
+      *ip = i;
+      GNUNET_CONTAINER_slist_add (l,
+                                 GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC,
+                                 ip, sizeof (int));
+    }
+  //creat_add
+  it = GNUNET_CONTAINER_slist_begin (l);
+  p = GNUNET_CONTAINER_slist_get (it, &s);
+  CHECK (p != NULL);
+  //slist_erase
+  CHECK (GNUNET_CONTAINER_slist_next (it) == GNUNET_YES); 
+  GNUNET_CONTAINER_slist_erase (it);
+  GNUNET_CONTAINER_slist_iter_destroy (it);
+  CHECK (GNUNET_CONTAINER_slist_count (l) == 99);
+  //slist_clear
+  GNUNET_CONTAINER_slist_clear(l);
+  CHECK (GNUNET_CONTAINER_slist_count (l) == 0);
   GNUNET_CONTAINER_slist_destroy (l);
 
   return 0;