1 /* testbidirsortedmap.vala
3 * Copyright (C) 2012 Maciej Piechotka
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 * Maciej Piechotka <uzytkownik2@gmail.com>
25 public abstract class BidirSortedMapTests : SortedMapTests {
26 public BidirSortedMapTests(string name) {
28 add_test ("[SortedMap] bi-directional iterators can go backward",
29 test_bidir_iterator_can_go_backward);
30 add_test ("[SortedSet] bi-directional iterators can to end",
31 test_bidir_iterator_last);
32 get_suite ().add_suite (new BidirSubMapTests (this, SortedMapTests.SubMapTests.Type.HEAD).get_suite ());
33 get_suite ().add_suite (new BidirSubMapTests (this, SortedMapTests.SubMapTests.Type.TAIL).get_suite ());
34 get_suite ().add_suite (new BidirSubMapTests (this, SortedMapTests.SubMapTests.Type.SUB).get_suite ());
35 get_suite ().add_suite (new BidirSubMapTests (this, SortedMapTests.SubMapTests.Type.EMPTY).get_suite ());
38 public void test_bidir_iterator_can_go_backward () {
39 var test_sorted_map = test_map as BidirSortedMap<string,string>;
40 var keys = (test_sorted_map.ascending_keys) as BidirSortedSet<string>;
41 var entries = (test_sorted_map.ascending_entries) as BidirSortedSet<Map.Entry<string,string>>;
43 var keys_iterator = keys.bidir_iterator ();
44 var entries_iterator = entries.bidir_iterator ();
45 var map_iterator = test_sorted_map.bidir_map_iterator ();
47 assert (!keys_iterator.has_previous ());
48 assert (!entries_iterator.has_previous ());
50 assert (!map_iterator.has_previous ());
51 assert (!keys_iterator.previous ());
52 assert (!entries_iterator.has_previous ());
54 assert (!map_iterator.previous ());
56 test_sorted_map.set ("one", "one");
57 test_sorted_map.set ("two", "two");
58 test_sorted_map.set ("three", "three");
59 test_sorted_map.set ("four", "four");
60 test_sorted_map.set ("five", "five");
61 test_sorted_map.set ("six", "six");
63 keys_iterator = keys.bidir_iterator ();
64 entries_iterator = entries.bidir_iterator ();
65 map_iterator = test_sorted_map.bidir_map_iterator ();
67 assert (keys_iterator.next ());
68 assert (entries_iterator.next ());
70 assert (map_iterator.next ());
71 assert (keys_iterator.get () == "five");
72 assert_entry (entries_iterator.get (), "five", "five");
74 assert (map_iterator.get_key () == "five");
75 assert (map_iterator.get_value () == "five");
77 assert (!keys_iterator.has_previous ());
78 assert (!entries_iterator.has_previous ());
80 assert (!map_iterator.has_previous ());
81 assert (keys_iterator.next ());
82 assert (entries_iterator.next ());
84 assert (map_iterator.next ());
85 assert (keys_iterator.get () == "four");
86 assert_entry (entries_iterator.get (), "four", "four");
88 assert (map_iterator.get_key () == "four");
89 assert (map_iterator.get_value () == "four");
91 assert (keys_iterator.has_previous ());
92 assert (entries_iterator.has_previous ());
94 assert (map_iterator.has_previous ());
95 assert (keys_iterator.next ());
96 assert (entries_iterator.next ());
98 assert (map_iterator.next ());
99 assert (keys_iterator.get () == "one");
100 assert_entry (entries_iterator.get (), "one", "one");
102 assert (map_iterator.get_key () == "one");
103 assert (map_iterator.get_value () == "one");
105 assert (keys_iterator.has_previous ());
106 assert (entries_iterator.has_previous ());
108 assert (map_iterator.has_previous ());
109 assert (keys_iterator.next ());
110 assert (entries_iterator.next ());
112 assert (map_iterator.next ());
113 assert (keys_iterator.get () == "six");
114 assert_entry (entries_iterator.get (), "six", "six");
116 assert (map_iterator.get_key () == "six");
117 assert (map_iterator.get_value () == "six");
118 assert (keys_iterator.has_previous ());
120 assert (entries_iterator.has_previous ());
121 assert (map_iterator.has_previous ());
122 assert (keys_iterator.next ());
124 assert (entries_iterator.next ());
125 assert (map_iterator.next ());
126 assert (keys_iterator.get () == "three");
128 assert_entry (entries_iterator.get (), "three", "three");
129 assert (map_iterator.get_key () == "three");
130 assert (map_iterator.get_value () == "three");
132 assert (keys_iterator.has_previous ());
133 assert (entries_iterator.has_previous ());
134 assert (map_iterator.has_previous ());
136 assert (keys_iterator.next ());
137 assert (entries_iterator.next ());
138 assert (map_iterator.next ());
140 assert (keys_iterator.get () == "two");
141 assert_entry (entries_iterator.get (), "two", "two");
142 assert (map_iterator.get_key () == "two");
143 assert (map_iterator.get_value () == "two");
145 assert (keys_iterator.has_previous ());
146 assert (entries_iterator.has_previous ());
147 assert (map_iterator.has_previous ());
149 assert (!keys_iterator.next ());
150 assert (!entries_iterator.next ());
151 assert (!map_iterator.next ());
153 assert (keys_iterator.previous ());
154 assert (entries_iterator.previous ());
155 assert (map_iterator.previous ());
157 assert (keys_iterator.get () == "three");
158 assert_entry (entries_iterator.get (), "three", "three");
159 assert (map_iterator.get_key () == "three");
160 assert (map_iterator.get_value () == "three");
162 assert (keys_iterator.previous ());
163 assert (entries_iterator.previous ());
164 assert (map_iterator.previous ());
166 assert (keys_iterator.get () == "six");
167 assert_entry (entries_iterator.get (), "six", "six");
168 assert (map_iterator.get_key () == "six");
169 assert (map_iterator.get_value () == "six");
171 assert (keys_iterator.previous ());
172 assert (entries_iterator.previous ());
173 assert (map_iterator.previous ());
175 assert (keys_iterator.get () == "one");
176 assert_entry (entries_iterator.get (), "one", "one");
177 assert (map_iterator.get_key () == "one");
178 assert (map_iterator.get_value () == "one");
180 assert (keys_iterator.previous ());
181 assert (entries_iterator.previous ());
182 assert (map_iterator.previous ());
184 assert (keys_iterator.get () == "four");
185 assert_entry (entries_iterator.get (), "four", "four");
186 assert (map_iterator.get_key () == "four");
187 assert (map_iterator.get_value () == "four");
189 assert (keys_iterator.previous ());
190 assert (entries_iterator.previous ());
191 assert (map_iterator.previous ());
193 assert (keys_iterator.get () == "five");
194 assert_entry (entries_iterator.get (), "five", "five");
195 assert (map_iterator.get_key () == "five");
196 assert (map_iterator.get_value () == "five");
198 assert (!keys_iterator.previous ());
199 assert (!entries_iterator.previous ());
200 assert (!map_iterator.previous ());
202 assert (keys_iterator.get () == "five");
203 assert_entry (entries_iterator.get (), "five", "five");
204 assert (map_iterator.get_key () == "five");
205 assert (map_iterator.get_value () == "five");
208 public void test_bidir_iterator_last () {
209 var test_sorted_map = test_map as BidirSortedMap<string,string>;
210 var keys = (test_sorted_map.ascending_keys) as BidirSortedSet<string>;
211 var entries = (test_sorted_map.ascending_entries) as BidirSortedSet<Map.Entry<string,string>>;
213 var keys_iterator = keys.bidir_iterator ();
214 var entries_iterator = entries.bidir_iterator ();
216 assert (!keys_iterator.last ());
217 assert (!entries_iterator.last ());
219 test_sorted_map.set ("one", "one");
220 test_sorted_map.set ("two", "two");
221 test_sorted_map.set ("three", "three");
222 test_sorted_map.set ("four", "four");
223 test_sorted_map.set ("five", "five");
224 test_sorted_map.set ("six", "six");
226 keys_iterator = keys.bidir_iterator ();
227 entries_iterator = entries.bidir_iterator ();
229 assert (keys_iterator.last ());
230 assert (entries_iterator.last ());
232 assert (keys_iterator.get () == "two");
233 assert_entry (entries_iterator.get (), "two", "two");
237 public class BidirSubMapTests : Gee.TestCase {
238 private BidirSortedMap<string,string> master;
239 private BidirSortedMap<string,string> submap;
240 private BidirSortedMapTests test;
241 private SortedMapTests.SubMapTests.Type type;
243 public BidirSubMapTests (BidirSortedMapTests test, SortedMapTests.SubMapTests.Type type) {
244 base ("%s Subset".printf (type.to_string ()));
247 add_test ("[BidirSortedSet] bi-directional iterator", test_bidir_iterators);
250 public override void set_up () {
252 master = test.test_map as BidirSortedMap<string,string>;
254 case SortedMapTests.SubMapTests.Type.HEAD:
255 submap = master.head_map ("one") as BidirSortedMap<string,string>; break;
256 case SortedMapTests.SubMapTests.Type.TAIL:
257 submap = master.tail_map ("six") as BidirSortedMap<string,string>; break;
258 case SortedMapTests.SubMapTests.Type.SUB:
259 submap = master.sub_map ("four", "three") as BidirSortedMap<string,string>; break;
260 case SortedMapTests.SubMapTests.Type.EMPTY:
261 submap = master.sub_map ("three", "four") as BidirSortedMap<string,string>; break;
263 assert_not_reached ();
267 public override void tear_down () {
271 protected void set_default_values (out string[] contains = null, out string[] not_contains = null) {
272 master.set ("one", "one");
273 master.set ("two", "two");
274 master.set ("three", "three");
275 master.set ("four", "four");
276 master.set ("five", "five");
277 master.set ("six", "six");
279 case SortedMapTests.SubMapTests.Type.HEAD:
280 contains = {"five", "four"};
281 not_contains = {"one", "two", "three", "six"};
283 case SortedMapTests.SubMapTests.Type.TAIL:
284 contains = {"six", "three", "two"};
285 not_contains = {"one", "four", "five"};
287 case SortedMapTests.SubMapTests.Type.SUB:
288 contains = {"four", "one", "six"};
289 not_contains = {"two", "three", "five"};
291 case SortedMapTests.SubMapTests.Type.EMPTY:
293 not_contains = {"one", "two", "three", "four", "five", "six"};
296 assert_not_reached ();
300 public void test_bidir_iterators () {
301 string[] contains, not_contains;
303 var _map_iter = submap.bidir_map_iterator ();
305 assert (!_map_iter.has_next ());
306 assert (!_map_iter.next ());
307 assert (!_map_iter.has_previous ());
308 assert (!_map_iter.previous ());
310 set_default_values (out contains, out not_contains);
313 _map_iter = submap.bidir_map_iterator ();
314 while (_map_iter.next ()) {
315 assert (_map_iter.get_key () == contains[i]);
316 assert (_map_iter.get_value () == contains[i]);
319 assert (i == contains.length);
322 foreach (var k in submap.keys)
323 assert (k == contains[i++]);
324 assert (i == contains.length);
327 foreach (var e in submap.entries) {
328 MapTests.assert_entry (e, contains[i], contains[i]);
331 assert (i == contains.length);
333 var keys_iter = ((submap.ascending_keys) as BidirSortedSet<string>).bidir_iterator ();
334 var entries_iter = ((submap.ascending_entries) as BidirSortedSet<Map.Entry<string,string>>).bidir_iterator ();
335 var map_iter = submap.bidir_map_iterator ();
336 if (type != SortedMapTests.SubMapTests.Type.EMPTY) {
337 assert (map_iter.last ());
338 assert (map_iter.get_key () == contains[contains.length - 1]);
339 assert (map_iter.get_value () == contains[contains.length - 1]);
341 map_iter = submap.bidir_map_iterator ();
342 assert (map_iter.next ());
344 assert (map_iter.get_key () == contains[0]);
345 assert (map_iter.get_value () == contains[0]);
347 assert (map_iter.has_next ());
348 assert (map_iter.next ());
349 assert (map_iter.get_key () == contains[1]);
350 assert (map_iter.get_value () == contains[1]);
352 assert (map_iter.has_previous ());
354 assert (map_iter.has_previous ());
355 if (type != SortedMapTests.SubMapTests.Type.HEAD)
356 assert (map_iter.has_next ());
358 assert (!map_iter.has_next ());
359 assert (map_iter.previous ());
360 assert (map_iter.get_key () == contains[0]);
361 assert (map_iter.get_value () == contains[0]);
365 set_default_values (out contains, out not_contains);
367 assert (keys_iter.last ());
368 assert (keys_iter.get () == contains[contains.length - 1]);
369 assert (keys_iter.first ());
371 assert (keys_iter.get () == contains[0]);
372 assert (keys_iter.has_next ());
373 assert (keys_iter.next ());
374 assert (keys_iter.get () == contains[1]);
375 assert (keys_iter.has_previous ());
376 if (Test.trap_fork (0, TestTrapFlags.SILENCE_STDOUT |
377 TestTrapFlags.SILENCE_STDERR)) {
381 assert (keys_iter.has_previous ());
382 if (type != SortedMapTests.SubMapTests.Type.HEAD)
383 assert (keys_iter.has_next ());
385 assert (!keys_iter.has_next ());
386 assert (keys_iter.previous ());
387 assert (keys_iter.get () == contains[0]);
389 // Repeat for entries
391 set_default_values (out contains, out not_contains);
393 assert (entries_iter.last ());
394 MapTests.assert_entry (entries_iter.get (), contains[contains.length - 1], contains[contains.length - 1]);
395 assert (entries_iter.first ());
397 MapTests.assert_entry (entries_iter.get (), contains[0], contains[0]);
398 assert (entries_iter.has_next ());
399 assert (entries_iter.next ());
400 MapTests.assert_entry (entries_iter.get (), contains[1], contains[1]);
401 assert (entries_iter.has_previous ());
402 entries_iter.remove ();
403 assert (entries_iter.has_previous ());
404 if (type != SortedMapTests.SubMapTests.Type.HEAD)
405 assert (entries_iter.has_next ());
407 assert (!entries_iter.has_next ());
408 assert (entries_iter.previous ());
409 MapTests.assert_entry (entries_iter.get (), contains[0], contains[0]);
411 assert (!keys_iter.first ());
412 assert (!keys_iter.last ());
413 if (Test.trap_fork (0, TestTrapFlags.SILENCE_STDOUT |
414 TestTrapFlags.SILENCE_STDERR)) {
418 Test.trap_assert_failed ();
419 assert (!entries_iter.first ());
420 if (Test.trap_fork (0, TestTrapFlags.SILENCE_STDOUT |
421 TestTrapFlags.SILENCE_STDERR)) {
422 entries_iter.remove ();
425 Test.trap_assert_failed ();