2 This file is part of GNUnet.
3 (C) 2009 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
22 * @file util/test_container_slist.c
23 * @brief Testcases for singly linked lists
28 #include "gnunet_common.h"
29 #include "gnunet_container_lib.h"
31 #define CHECK(c) do { if (! (c)) { fprintf(stderr, "Error at %s:%d\n", __FILE__, __LINE__); GNUNET_CONTAINER_slist_destroy (l); return 1; } } while (0)
34 main (int argc, char *argv[])
36 struct GNUNET_CONTAINER_SList *l;
37 struct GNUNET_CONTAINER_SList_Iterator *it;
44 GNUNET_log_setup ("test-container-slist", "WARNING", NULL);
46 l = GNUNET_CONTAINER_slist_create ();
48 CHECK (GNUNET_CONTAINER_slist_count (l) == 0);
50 for (i = 0; i < 100; i++)
51 GNUNET_CONTAINER_slist_add (l,
52 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
54 CHECK (GNUNET_CONTAINER_slist_count (l) == 100);
56 for (it = GNUNET_CONTAINER_slist_begin (l), i = 99;
57 GNUNET_CONTAINER_slist_end (it) != GNUNET_YES;
58 GNUNET_CONTAINER_slist_next (it), i--)
60 p = GNUNET_CONTAINER_slist_get (it, &s);
63 (i != (j = *(int *) p)) ||
66 GNUNET_CONTAINER_slist_iter_destroy (it);
70 GNUNET_CONTAINER_slist_insert (it,
71 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
74 GNUNET_CONTAINER_slist_iter_destroy (it);
75 CHECK (GNUNET_CONTAINER_slist_count (l) == 200);
77 CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)));
79 for (it = GNUNET_CONTAINER_slist_begin (l);
80 GNUNET_CONTAINER_slist_end (it) != GNUNET_YES;)
82 p = GNUNET_CONTAINER_slist_get (it, &s);
84 CHECK (s == sizeof (i));
87 CHECK (GNUNET_CONTAINER_slist_next (it) == GNUNET_YES);
88 CHECK (GNUNET_CONTAINER_slist_end (it) != GNUNET_YES);
90 p = GNUNET_CONTAINER_slist_get (it, &s);
92 CHECK (s == sizeof (j));
97 GNUNET_CONTAINER_slist_erase (it);
99 GNUNET_CONTAINER_slist_iter_destroy (it);
100 CHECK (GNUNET_CONTAINER_slist_count (l) == 100);
102 CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)) == GNUNET_NO);
104 CHECK (GNUNET_CONTAINER_slist_contains (l, &i, sizeof (i)));
106 GNUNET_CONTAINER_slist_clear (l);
107 CHECK (GNUNET_CONTAINER_slist_count (l) == 0);
109 for (i = 0; i < 100; i++)
110 GNUNET_CONTAINER_slist_add (l,
111 GNUNET_CONTAINER_SLIST_DISPOSITION_TRANSIENT,
113 /*check slist_append*/
114 GNUNET_CONTAINER_slist_append(l,l);
115 CHECK (GNUNET_CONTAINER_slist_count (l) == 200);
117 GNUNET_CONTAINER_slist_destroy (l);
119 /*check if disp = GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC*/
120 l = GNUNET_CONTAINER_slist_create ();
122 for (i = 0; i < 100; i++)
124 ip = GNUNET_malloc (sizeof (int));
126 GNUNET_CONTAINER_slist_add (l,
127 GNUNET_CONTAINER_SLIST_DISPOSITION_DYNAMIC,
131 it = GNUNET_CONTAINER_slist_begin (l);
132 p = GNUNET_CONTAINER_slist_get (it, &s);
135 CHECK (GNUNET_CONTAINER_slist_next (it) == GNUNET_YES);
136 GNUNET_CONTAINER_slist_erase (it);
137 GNUNET_CONTAINER_slist_iter_destroy (it);
138 CHECK (GNUNET_CONTAINER_slist_count (l) == 99);
140 GNUNET_CONTAINER_slist_clear(l);
141 CHECK (GNUNET_CONTAINER_slist_count (l) == 0);
142 GNUNET_CONTAINER_slist_destroy (l);