]>
Commit | Line | Data |
---|---|---|
5ea75511 JH |
1 | /** |
2 | * @file linked_list_test.c | |
3 | * | |
4 | * @brief Tests to test the Linked List type linked_list_t | |
5 | * | |
6 | */ | |
7 | ||
8 | /* | |
9 | * Copyright (C) 2005 Jan Hutter, Martin Willi | |
10 | * Hochschule fuer Technik Rapperswil | |
11 | * | |
12 | * This program is free software; you can redistribute it and/or modify it | |
13 | * under the terms of the GNU General Public License as published by the | |
14 | * Free Software Foundation; either version 2 of the License, or (at your | |
15 | * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. | |
16 | * | |
17 | * This program is distributed in the hope that it will be useful, but | |
18 | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY | |
19 | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
20 | * for more details. | |
21 | */ | |
22 | ||
23 | #include <string.h> | |
88878242 MW |
24 | |
25 | #include "linked_list_test.h" | |
5ea75511 | 26 | |
94852e75 | 27 | #include <utils/linked_list.h> |
5ea75511 JH |
28 | |
29 | /* | |
30 | * Description in header-file | |
31 | */ | |
32 | void test_linked_list(tester_t *tester) | |
33 | { | |
34 | void *test_value = NULL; | |
35 | ||
36 | linked_list_t *linked_list = linked_list_create(); | |
1061c878 JH |
37 | |
38 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 0), "count check"); | |
5ea75511 JH |
39 | |
40 | linked_list->insert_first(linked_list,"one"); | |
1061c878 | 41 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 1), "count check"); |
5ea75511 JH |
42 | |
43 | linked_list->insert_first(linked_list,"two"); | |
1061c878 | 44 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 2), "count check"); |
5ea75511 JH |
45 | |
46 | linked_list->insert_first(linked_list,"three"); | |
1061c878 | 47 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 JH |
48 | |
49 | linked_list->insert_first(linked_list,"four"); | |
1061c878 | 50 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 4), "count check"); |
5ea75511 JH |
51 | |
52 | linked_list->insert_first(linked_list,"five"); | |
1061c878 | 53 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 5), "count check"); |
5ea75511 JH |
54 | |
55 | tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); | |
56 | tester->assert_true(tester,(strcmp((char *) test_value,"five") == 0), "get_first value check"); | |
1061c878 | 57 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 5), "count check"); |
5ea75511 JH |
58 | |
59 | tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); | |
60 | tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "get_last value check"); | |
1061c878 | 61 | tester->assert_true(tester,( linked_list->get_count(linked_list) == 5), "count check"); |
7c2228f1 | 62 | |
5ea75511 JH |
63 | tester->assert_true(tester,(linked_list->remove_first(linked_list,&test_value) == SUCCESS), "remove_first call check"); |
64 | tester->assert_true(tester,(strcmp((char *) test_value,"five") == 0), "remove_first value check"); | |
1061c878 | 65 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 4), "count check"); |
5ea75511 JH |
66 | |
67 | tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); | |
68 | tester->assert_true(tester,(strcmp((char *) test_value,"four") == 0), "get_first value check"); | |
1061c878 | 69 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 4), "count check"); |
5ea75511 JH |
70 | |
71 | tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); | |
72 | tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "get_last value check"); | |
1061c878 | 73 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 4), "count check"); |
5ea75511 JH |
74 | |
75 | tester->assert_true(tester,(linked_list->remove_last(linked_list,&test_value) == SUCCESS), "remove_last call check"); | |
76 | tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "remove_last value check"); | |
1061c878 | 77 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 JH |
78 | |
79 | tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); | |
80 | tester->assert_true(tester,(strcmp((char *) test_value,"two") == 0), "get_last value check"); | |
1061c878 | 81 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 JH |
82 | |
83 | tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); | |
84 | tester->assert_true(tester,(strcmp((char *) test_value,"four") == 0), "get_first value check"); | |
1061c878 | 85 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 JH |
86 | |
87 | tester->assert_true(tester,(linked_list->destroy(linked_list) == SUCCESS), "destroy call check"); | |
88 | } | |
7c2228f1 JH |
89 | |
90 | /* | |
91 | * Description in header-file | |
92 | */ | |
bfdc5c7c | 93 | void test_linked_list_iterator(tester_t *tester) |
7c2228f1 | 94 | { |
e3dd1393 JH |
95 | void * value; |
96 | ||
7c2228f1 JH |
97 | linked_list_t *linked_list = linked_list_create(); |
98 | linked_list->insert_first(linked_list,"one"); | |
99 | linked_list->insert_first(linked_list,"two"); | |
100 | linked_list->insert_first(linked_list,"three"); | |
101 | linked_list->insert_first(linked_list,"four"); | |
102 | linked_list->insert_first(linked_list,"five"); | |
103 | ||
bdb141cb MW |
104 | iterator_t * iterator; |
105 | iterator_t * iterator2; | |
7c2228f1 JH |
106 | |
107 | ||
bfdc5c7c | 108 | tester->assert_true(tester,(linked_list->create_iterator(linked_list,&iterator,TRUE) == SUCCESS), "create_iterator for it 1 call check"); |
7c2228f1 | 109 | |
e3dd1393 JH |
110 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); |
111 | iterator->current(iterator,&value); | |
112 | tester->assert_true(tester,(strcmp((char *) value,"five") == 0), "it 1 current value check"); | |
7c2228f1 | 113 | |
e3dd1393 JH |
114 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); |
115 | iterator->current(iterator,&value); | |
116 | tester->assert_true(tester,(strcmp((char *) value,"four") == 0), "it 1 current value check"); | |
bfdc5c7c JH |
117 | |
118 | tester->assert_true(tester,(linked_list->create_iterator(linked_list,&iterator2,FALSE) == SUCCESS), "create_iterator for it 2 call check"); | |
119 | ||
e3dd1393 JH |
120 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); |
121 | iterator2->current(iterator2,&value); | |
122 | tester->assert_true(tester,(strcmp((char *) value,"one") == 0), "it 2 current value check"); | |
123 | ||
124 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
125 | iterator->current(iterator,&value); | |
126 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "it 1 current value check"); | |
127 | ||
128 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
129 | iterator2->current(iterator2,&value); | |
130 | tester->assert_true(tester,(strcmp((char *) value,"two") == 0), "it 2 current value check"); | |
131 | ||
132 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
133 | iterator->current(iterator,&value); | |
134 | tester->assert_true(tester,(strcmp((char *) value,"two") == 0), "it 1 current value check"); | |
135 | ||
136 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
137 | iterator2->current(iterator2,&value); | |
138 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "it 2 current value check"); | |
139 | ||
140 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
141 | iterator->current(iterator,&value); | |
142 | tester->assert_true(tester,(strcmp((char *) value,"one") == 0), "it 1 current value check"); | |
143 | ||
144 | tester->assert_false(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
145 | ||
146 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
147 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
148 | tester->assert_false(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
7c2228f1 | 149 | |
bfdc5c7c JH |
150 | tester->assert_true(tester,(iterator->destroy(iterator) == SUCCESS), "it 1 destroy call check"); |
151 | ||
152 | tester->assert_true(tester,(iterator2->destroy(iterator2) == SUCCESS), "it 2 destroy call check"); | |
153 | ||
154 | linked_list->destroy(linked_list); | |
155 | } | |
156 | ||
157 | /* | |
158 | * Description in header-file | |
159 | */ | |
160 | void test_linked_list_insert_and_remove(tester_t *tester) | |
161 | { | |
e3dd1393 | 162 | void *value; |
bdb141cb | 163 | iterator_t * iterator; |
bfdc5c7c JH |
164 | |
165 | linked_list_t *linked_list = linked_list_create(); | |
166 | linked_list->insert_first(linked_list,"one"); | |
167 | linked_list->insert_first(linked_list,"two"); | |
168 | ||
169 | linked_list->insert_first(linked_list,"three"); | |
170 | linked_list->insert_first(linked_list,"four"); | |
171 | linked_list->insert_first(linked_list,"five"); | |
172 | ||
173 | ||
174 | ||
175 | linked_list->create_iterator(linked_list,&iterator,TRUE); | |
176 | ||
e3dd1393 JH |
177 | iterator->has_next(iterator); |
178 | iterator->has_next(iterator); | |
179 | iterator->has_next(iterator); | |
180 | iterator->current(iterator,&value); | |
181 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "current value check"); | |
bfdc5c7c | 182 | |
294faf7b | 183 | tester->assert_true(tester,(iterator->insert_before(iterator,"before_three") == SUCCESS), "insert_before call check"); |
e3dd1393 JH |
184 | iterator->current(iterator,&value); |
185 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "current value check"); | |
bfdc5c7c | 186 | |
e3dd1393 | 187 | |
294faf7b | 188 | tester->assert_true(tester,(iterator->insert_after(iterator,"after_three") == SUCCESS), "insert_after call check"); |
e3dd1393 JH |
189 | iterator->current(iterator,&value); |
190 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "current value check"); | |
191 | ||
bfdc5c7c | 192 | |
12c3e4c8 | 193 | tester->assert_true(tester,(iterator->remove(iterator) == SUCCESS), "remove call check"); |
e3dd1393 JH |
194 | iterator->current(iterator,&value); |
195 | tester->assert_true(tester,(strcmp((char *) value,"before_three") == 0), "current value check"); | |
bfdc5c7c JH |
196 | |
197 | iterator->reset(iterator); | |
198 | ||
e3dd1393 JH |
199 | iterator->has_next(iterator); |
200 | iterator->has_next(iterator); | |
201 | iterator->has_next(iterator); | |
202 | iterator->current(iterator,&value); | |
203 | tester->assert_true(tester,(strcmp((char *) value,"before_three") == 0), "current value check"); | |
204 | iterator->has_next(iterator); | |
205 | iterator->current(iterator,&value); | |
206 | tester->assert_true(tester,(strcmp((char *) value,"after_three") == 0), "current value check"); | |
bfdc5c7c JH |
207 | |
208 | iterator->destroy(iterator); | |
7c2228f1 JH |
209 | |
210 | linked_list->destroy(linked_list); | |
211 | } |