]>
Commit | Line | Data |
---|---|---|
5ea75511 JH |
1 | /** |
2 | * @file linked_list_test.c | |
3 | * | |
ed37dee6 | 4 | * @brief Tests for the linked_list_t class. |
5ea75511 JH |
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 | */ | |
51d56047 | 32 | void test_linked_list(protected_tester_t *tester) |
5ea75511 JH |
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"); | |
1e54ebfa | 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 | 74 | |
1e54ebfa JH |
75 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,0,&test_value) == SUCCESS), "get_at_position call check"); |
76 | tester->assert_true(tester,(strcmp((char *) test_value,"four") == 0), "get_at_position value check"); | |
77 | ||
78 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,1,&test_value) == SUCCESS), "get_at_position call check"); | |
79 | tester->assert_true(tester,(strcmp((char *) test_value,"three") == 0), "get_at_position value check"); | |
80 | ||
81 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,2,&test_value) == SUCCESS), "get_at_position call check"); | |
82 | tester->assert_true(tester,(strcmp((char *) test_value,"two") == 0), "get_at_position value check"); | |
83 | ||
84 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,3,&test_value) == SUCCESS), "get_at_position call check"); | |
85 | tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "get_at_position value check"); | |
86 | ||
87 | tester->assert_false(tester,(linked_list->get_at_position(linked_list,4,&test_value) == SUCCESS), "get_at_position call check"); | |
88 | tester->assert_false(tester,(linked_list->remove_at_position(linked_list,4,&test_value) == SUCCESS), "remove_at_position call check"); | |
89 | tester->assert_false(tester,(linked_list->insert_at_position(linked_list,5,test_value) == SUCCESS), "insert_at_position call 1 check"); | |
90 | ||
91 | tester->assert_true(tester,(linked_list->insert_at_position(linked_list,3,"six") == SUCCESS), "insert_at_position call 2 check"); | |
92 | tester->assert_true(tester,(linked_list->insert_at_position(linked_list,3,"seven") == SUCCESS), "insert_at_position call 3 check"); | |
93 | ||
94 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,3,&test_value) == SUCCESS), "get_at_position call check"); | |
95 | tester->assert_true(tester,(strcmp((char *) test_value,"seven") == 0), "get_at_position value 1 check"); | |
96 | ||
97 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,4,&test_value) == SUCCESS), "get_at_position call check"); | |
98 | tester->assert_true(tester,(strcmp((char *) test_value,"six") == 0), "get_at_position value 2 check"); | |
99 | ||
100 | tester->assert_true(tester,(linked_list->get_at_position(linked_list,5,&test_value) == SUCCESS), "get_at_position call check"); | |
101 | tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "get_at_position value 3 check"); | |
102 | ||
103 | tester->assert_true(tester,(linked_list->remove_at_position(linked_list,3,&test_value) == SUCCESS), "remove_at_position call check"); | |
104 | tester->assert_true(tester,(linked_list->remove_at_position(linked_list,3,&test_value) == SUCCESS), "remove_at_position call check"); | |
105 | ||
106 | ||
5ea75511 JH |
107 | tester->assert_true(tester,(linked_list->remove_last(linked_list,&test_value) == SUCCESS), "remove_last call check"); |
108 | tester->assert_true(tester,(strcmp((char *) test_value,"one") == 0), "remove_last value check"); | |
1061c878 | 109 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 JH |
110 | |
111 | tester->assert_true(tester,(linked_list->get_last(linked_list,&test_value) == SUCCESS), "get_last call check"); | |
112 | tester->assert_true(tester,(strcmp((char *) test_value,"two") == 0), "get_last value check"); | |
1061c878 | 113 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 JH |
114 | |
115 | tester->assert_true(tester,(linked_list->get_first(linked_list,&test_value) == SUCCESS), "get_first call check"); | |
116 | tester->assert_true(tester,(strcmp((char *) test_value,"four") == 0), "get_first value check"); | |
1061c878 | 117 | tester->assert_true(tester,(linked_list->get_count(linked_list) == 3), "count check"); |
5ea75511 | 118 | |
d048df5c | 119 | linked_list->destroy(linked_list); |
5ea75511 | 120 | } |
7c2228f1 JH |
121 | |
122 | /* | |
123 | * Description in header-file | |
124 | */ | |
51d56047 | 125 | void test_linked_list_iterator(protected_tester_t *tester) |
7c2228f1 | 126 | { |
e3dd1393 JH |
127 | void * value; |
128 | ||
7c2228f1 JH |
129 | linked_list_t *linked_list = linked_list_create(); |
130 | linked_list->insert_first(linked_list,"one"); | |
131 | linked_list->insert_first(linked_list,"two"); | |
132 | linked_list->insert_first(linked_list,"three"); | |
133 | linked_list->insert_first(linked_list,"four"); | |
134 | linked_list->insert_first(linked_list,"five"); | |
135 | ||
bdb141cb MW |
136 | iterator_t * iterator; |
137 | iterator_t * iterator2; | |
7c2228f1 JH |
138 | |
139 | ||
a0753941 | 140 | iterator = linked_list->create_iterator(linked_list,TRUE); |
7c2228f1 | 141 | |
e3dd1393 JH |
142 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); |
143 | iterator->current(iterator,&value); | |
144 | tester->assert_true(tester,(strcmp((char *) value,"five") == 0), "it 1 current value check"); | |
7c2228f1 | 145 | |
e3dd1393 JH |
146 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); |
147 | iterator->current(iterator,&value); | |
148 | tester->assert_true(tester,(strcmp((char *) value,"four") == 0), "it 1 current value check"); | |
bfdc5c7c | 149 | |
a0753941 | 150 | iterator2 = linked_list->create_iterator(linked_list,FALSE); |
bfdc5c7c | 151 | |
e3dd1393 JH |
152 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); |
153 | iterator2->current(iterator2,&value); | |
154 | tester->assert_true(tester,(strcmp((char *) value,"one") == 0), "it 2 current value check"); | |
155 | ||
156 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
157 | iterator->current(iterator,&value); | |
158 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "it 1 current value check"); | |
159 | ||
160 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
161 | iterator2->current(iterator2,&value); | |
162 | tester->assert_true(tester,(strcmp((char *) value,"two") == 0), "it 2 current value check"); | |
163 | ||
164 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
165 | iterator->current(iterator,&value); | |
166 | tester->assert_true(tester,(strcmp((char *) value,"two") == 0), "it 1 current value check"); | |
167 | ||
168 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
169 | iterator2->current(iterator2,&value); | |
170 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "it 2 current value check"); | |
171 | ||
172 | tester->assert_true(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
173 | iterator->current(iterator,&value); | |
174 | tester->assert_true(tester,(strcmp((char *) value,"one") == 0), "it 1 current value check"); | |
175 | ||
176 | tester->assert_false(tester,iterator->has_next(iterator), "it 1 has_next value check"); | |
177 | ||
178 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
179 | tester->assert_true(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
180 | tester->assert_false(tester,iterator2->has_next(iterator2), "it 2 has_next value check"); | |
7c2228f1 | 181 | |
d048df5c MW |
182 | iterator->destroy(iterator); |
183 | iterator2->destroy(iterator2); | |
bfdc5c7c JH |
184 | linked_list->destroy(linked_list); |
185 | } | |
186 | ||
187 | /* | |
188 | * Description in header-file | |
189 | */ | |
51d56047 | 190 | void test_linked_list_insert_and_remove(protected_tester_t *tester) |
bfdc5c7c | 191 | { |
e3dd1393 | 192 | void *value; |
bdb141cb | 193 | iterator_t * iterator; |
bfdc5c7c JH |
194 | |
195 | linked_list_t *linked_list = linked_list_create(); | |
196 | linked_list->insert_first(linked_list,"one"); | |
197 | linked_list->insert_first(linked_list,"two"); | |
198 | ||
199 | linked_list->insert_first(linked_list,"three"); | |
200 | linked_list->insert_first(linked_list,"four"); | |
201 | linked_list->insert_first(linked_list,"five"); | |
202 | ||
203 | ||
204 | ||
a0753941 | 205 | iterator = linked_list->create_iterator(linked_list,TRUE); |
bfdc5c7c | 206 | |
e3dd1393 JH |
207 | iterator->has_next(iterator); |
208 | iterator->has_next(iterator); | |
209 | iterator->has_next(iterator); | |
210 | iterator->current(iterator,&value); | |
211 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "current value check"); | |
bfdc5c7c | 212 | |
d048df5c | 213 | iterator->insert_before(iterator,"before_three"); |
e3dd1393 JH |
214 | iterator->current(iterator,&value); |
215 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "current value check"); | |
bfdc5c7c | 216 | |
e3dd1393 | 217 | |
d048df5c | 218 | iterator->insert_after(iterator,"after_three"); |
e3dd1393 JH |
219 | iterator->current(iterator,&value); |
220 | tester->assert_true(tester,(strcmp((char *) value,"three") == 0), "current value check"); | |
221 | ||
bfdc5c7c | 222 | |
12c3e4c8 | 223 | tester->assert_true(tester,(iterator->remove(iterator) == SUCCESS), "remove call check"); |
e3dd1393 JH |
224 | iterator->current(iterator,&value); |
225 | tester->assert_true(tester,(strcmp((char *) value,"before_three") == 0), "current value check"); | |
bfdc5c7c JH |
226 | |
227 | iterator->reset(iterator); | |
228 | ||
e3dd1393 JH |
229 | iterator->has_next(iterator); |
230 | iterator->has_next(iterator); | |
231 | iterator->has_next(iterator); | |
232 | iterator->current(iterator,&value); | |
233 | tester->assert_true(tester,(strcmp((char *) value,"before_three") == 0), "current value check"); | |
234 | iterator->has_next(iterator); | |
235 | iterator->current(iterator,&value); | |
236 | tester->assert_true(tester,(strcmp((char *) value,"after_three") == 0), "current value check"); | |
bfdc5c7c JH |
237 | |
238 | iterator->destroy(iterator); | |
7c2228f1 JH |
239 | |
240 | linked_list->destroy(linked_list); | |
241 | } |