1/* testmultimap.vala 2 * 3 * Copyright (C) 2008 Jürg Billeter 4 * Copyright (C) 2009 Didier Villevalois, Julien Peeters 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 * 20 * Author: 21 * Jürg Billeter <j@bitron.ch> 22 * Didier 'Ptitjes' Villevalois <ptitjes@free.fr> 23 * Julien Peeters <contact@julienpeeters.fr> 24 */ 25 26using GLib; 27using Gee; 28 29public abstract class MultiMapTests : Gee.TestCase { 30 31 protected MultiMapTests (string name) { 32 base (name); 33 add_test ("[MultiMap] type correctness", test_type_correctness); 34 add_test ("[MultiMap] size", test_size); 35 add_test ("[MultiMap] getting and setting", test_getting_setting); 36 add_test ("[MultiMap] keys, all keys and values", test_keys_all_keys_values); 37 } 38 39 protected MultiMap<string,string> test_multi_map; 40 41 public void test_type_correctness () { 42 // Check the multimap exists 43 assert (test_multi_map != null); 44 45 // Check the advertised key and value types 46 assert (test_multi_map.key_type == typeof (string)); 47 assert (test_multi_map.value_type == typeof (string)); 48 } 49 50 private void test_size () { 51 // Check the map exists 52 assert (test_multi_map != null); 53 54 assert (test_multi_map.size == 0); 55 test_multi_map.set ("0", "0"); 56 assert (test_multi_map.size == 1); 57 test_multi_map.set ("0", "1"); 58 assert (test_multi_map.size == 2); 59 test_multi_map.remove ("0", "1"); 60 assert (test_multi_map.size == 1); 61 test_multi_map.set ("0", "1"); 62 test_multi_map.remove_all ("0"); 63 assert (test_multi_map.size == 0); 64 test_multi_map.set ("0", "0"); 65 assert (test_multi_map.size == 1); 66 test_multi_map.set ("1", "1"); 67 assert (test_multi_map.size == 2); 68 } 69 70 private void test_getting_setting () { 71 // Check the map exists 72 assert (test_multi_map != null); 73 74 test_multi_map.set ("0", "0"); 75 assert (test_multi_map.contains ("0")); 76 assert (test_multi_map.get ("0").size == 1); 77 assert (test_multi_map.get ("0").contains ("0")); 78 79 assert (test_multi_map.get ("1").size == 0); 80 81 test_multi_map.set ("0", "1"); 82 assert (test_multi_map.get ("0").size == 2); 83 assert (test_multi_map.get ("0").contains ("0")); 84 assert (test_multi_map.get ("0").contains ("1")); 85 86 test_multi_map.set ("1", "1"); 87 assert (test_multi_map.contains ("1")); 88 assert (test_multi_map.get ("0").size == 2); 89 assert (test_multi_map.get ("0").contains ("0")); 90 assert (test_multi_map.get ("0").contains ("1")); 91 assert (test_multi_map.get ("1").size == 1); 92 assert (test_multi_map.get ("0").contains ("1")); 93 94 // Check remove if bindings exist 95 assert (test_multi_map.remove ("0", "0")); 96 assert (test_multi_map.contains ("0")); 97 assert (! test_multi_map.get ("0").contains ("0")); 98 assert (test_multi_map.get ("0").contains ("1")); 99 assert (test_multi_map.contains ("1")); 100 assert (test_multi_map.get ("1").contains ("1")); 101 102 // Check remove if only one binding exists 103 assert (test_multi_map.remove ("0", "1")); 104 assert (! test_multi_map.contains ("0")); 105 assert (! test_multi_map.get ("0").contains ("0")); 106 assert (! test_multi_map.get ("0").contains ("1")); 107 assert (test_multi_map.contains ("1")); 108 assert (test_multi_map.get ("1").contains ("1")); 109 110 // Check remove if no binding exists 111 assert (! test_multi_map.remove ("0", "1")); 112 assert (! test_multi_map.contains ("0")); 113 assert (! test_multi_map.get ("0").contains ("0")); 114 assert (! test_multi_map.get ("0").contains ("1")); 115 assert (test_multi_map.contains ("1")); 116 assert (test_multi_map.get ("1").contains ("1")); 117 118 test_multi_map.clear (); 119 assert (! test_multi_map.contains ("0")); 120 assert (! test_multi_map.contains ("1")); 121 122 // Check remove_all 123 test_multi_map.set ("0", "0"); 124 test_multi_map.set ("0", "1"); 125 test_multi_map.set ("1", "1"); 126 assert (test_multi_map.size == 3); 127 128 assert (test_multi_map.contains ("0")); 129 assert (test_multi_map.contains ("1")); 130 assert (test_multi_map.get ("0").size == 2); 131 assert (test_multi_map.get ("0").contains ("0")); 132 assert (test_multi_map.get ("0").contains ("1")); 133 assert (test_multi_map.get ("1").size == 1); 134 assert (test_multi_map.get ("0").contains ("1")); 135 136 // Check remove_all if bindings exist 137 assert (test_multi_map.remove_all ("0")); 138 assert (! test_multi_map.contains ("0")); 139 assert (! test_multi_map.get ("0").contains ("0")); 140 assert (! test_multi_map.get ("0").contains ("1")); 141 assert (test_multi_map.contains ("1")); 142 assert (test_multi_map.get ("1").contains ("1")); 143 144 // Check remove_all if no binding exists 145 assert (! test_multi_map.remove_all ("0")); 146 assert (! test_multi_map.contains ("0")); 147 assert (! test_multi_map.get ("0").contains ("0")); 148 assert (! test_multi_map.get ("0").contains ("1")); 149 assert (test_multi_map.contains ("1")); 150 assert (test_multi_map.get ("1").contains ("1")); 151 } 152 153 private void test_keys_all_keys_values () { 154 // Check the map exists 155 assert (test_multi_map != null); 156 157 test_multi_map.set ("0", "0"); 158 test_multi_map.set ("0", "1"); 159 test_multi_map.set ("1", "1"); 160 161 // Check for keys, all_keys and values 162 Set<string> keys = test_multi_map.get_keys (); 163 MultiSet<string> all_keys = test_multi_map.get_all_keys (); 164 Collection<string> values = test_multi_map.get_values (); 165 166 assert (keys.contains ("0")); 167 assert (keys.contains ("1")); 168 assert (all_keys.count ("0") == 2); 169 assert (all_keys.count ("1") == 1); 170 assert (values.contains ("0")); 171 assert (values.contains ("1")); 172 173 bool zero_found = false; 174 bool zero_found_once = true; 175 bool one_found = false; 176 bool one_found_twice = false; 177 bool nothing_more = true; 178 foreach (string value in values) { 179 if (value == "0") { 180 if (zero_found) { 181 zero_found_once = false; 182 } 183 zero_found = true; 184 } else if (value == "1") { 185 if (one_found) { 186 if (one_found_twice) { 187 one_found_twice = false; 188 } else { 189 one_found_twice = true; 190 } 191 } 192 one_found = true; 193 } else { 194 nothing_more = false; 195 } 196 } 197 assert (zero_found); 198 assert (zero_found_once); 199 assert (one_found); 200 assert (one_found_twice); 201 assert (nothing_more); 202 } 203} 204