Hello. I have extended the tests in Gee library. Now they cover all methods provided by the interfaces they extend so that future changes to the library can be done without fear to break the behavior of those methods. The extended tests are attached to this post.
I would also like to propose an extension to the interfaces in form of additional convenient / often used methods. What I had in mind is this: Collection interface: - void add_all(Collection) - Adds all items from the input collection to this collection. Convenient for joining collections. Java also has this on the interface of Collection. - bool contains_all(Collection) - Checks if all items in the input collection are present in this collection. Convenient for checking items for example if "a" AND "b" exist in collection. - bool contains_any(Collection) - Checks if any items in the input collection are present in this collection. Convenient for checking items for example if "a" OR "b" exist in collection. - bool is_empty() - special state of a collection when it doesn't contain any value. Added because it is clearer as list.size == 0. List interface - G first() - G last() - First and last items are often special - it adds better clarity to the algorithm if they don't need to be "addressed" as list.get(0) or worse list.get(list.size -1). Set interface Map interface - void set_all(Map) - Same as add_all for collections. - expose Node<K,V> and make it possible to iterate through Nodes: foreach (Node<int,int> item in map.get_nodes()) { } Iterators - It would be convenient
using GLib; using Gee; class ClassForTesting : GLib.Object { public string prop { get;set; } } class ERR : GLib.Object { public static string INDEX_OUT_OF_RANGE = "*(index >= 0 && index < self->priv->_size)*"; } void test_arraylist_get () { var arraylistOfString = new ArrayList<string> (); // Check get for empty list if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.get(0); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // Check get for valid index in list with one element arraylistOfString.add("1"); assert(arraylistOfString.get(0) == "1"); // Check get for indexes out of range if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.get(1); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // Check get for invalid index number if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.get(-1); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // Check get for valid indexes in list with multiple element arraylistOfString.add("2"); arraylistOfString.add("3"); assert(arraylistOfString.get(0) == "1"); assert(arraylistOfString.get(1) == "2"); assert(arraylistOfString.get(2) == "3"); // Check get if list is cleared and empty again arraylistOfString.clear(); if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.get(0); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); } void test_arraylist_set () { var arraylistOfString = new ArrayList<string> (); // Check set when list is empty. assert(arraylistOfString.size == 0); if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.set(0, "0"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); assert(arraylistOfString.size == 0); // Check set when one item is in list arraylistOfString.add("1"); // Add item "1" assert(arraylistOfString.size == 1); assert(arraylistOfString.get(0) == "1"); arraylistOfString.set(0, "2"); // Set the item to value 2 assert(arraylistOfString.size == 1); assert(arraylistOfString.get(0) == "2"); // Check set when index out of range assert(arraylistOfString.size == 1); if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.set(1, "0"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); assert(arraylistOfString.size == 1); } void test_arraylist_insert () { var arraylistOfString = new ArrayList<string> (); // Check inserting in empty list // Inserting at index 1 if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.insert(1, "0"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // Inserting at index 0 assert(arraylistOfString.size == 0); arraylistOfString.insert(0, "10"); assert(arraylistOfString.size == 1); assert(arraylistOfString.get(0) == "10"); // Check insert to the beginning arraylistOfString.insert(0, "5"); assert(arraylistOfString.get(0) == "5"); assert(arraylistOfString.get(1) == "10"); // Check insert in between arraylistOfString.insert(1, "7"); assert(arraylistOfString.get(0) == "5"); assert(arraylistOfString.get(1) == "7"); assert(arraylistOfString.get(2) == "10"); // Check insert into index out of current range if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.insert(4, "20"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // Check insert to the end arraylistOfString.insert(3, "20"); assert(arraylistOfString.get(0) == "5"); assert(arraylistOfString.get(1) == "7"); assert(arraylistOfString.get(2) == "10"); assert(arraylistOfString.get(3) == "20"); // Check insert into invalid index if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.insert(-1, "0"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); } void test_arraylist_remove_at () { var arraylistOfString = new ArrayList<string> (); // Check removing in empty list if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.remove_at(0); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.remove_at(1); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // add 5 items arraylistOfString.add("1"); arraylistOfString.add("2"); arraylistOfString.add("3"); arraylistOfString.add("4"); arraylistOfString.add("5"); assert(arraylistOfString.size == 5); // Check remove_at first arraylistOfString.remove_at(0); assert(arraylistOfString.size == 4); assert(arraylistOfString.get(0) == "2"); assert(arraylistOfString.get(1) == "3"); assert(arraylistOfString.get(2) == "4"); assert(arraylistOfString.get(3) == "5"); // Check remove_at last arraylistOfString.remove_at(3); assert(arraylistOfString.size == 3); assert(arraylistOfString.get(0) == "2"); assert(arraylistOfString.get(1) == "3"); assert(arraylistOfString.get(2) == "4"); // Check remove_at in between arraylistOfString.remove_at(1); assert(arraylistOfString.size == 2); assert(arraylistOfString.get(0) == "2"); assert(arraylistOfString.get(1) == "4"); // Check remove_at when index out of range if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.remove_at(2); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); // Check remove_at when invalid index if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { arraylistOfString.remove_at(-1); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.INDEX_OUT_OF_RANGE); } void test_arraylist_index_of () { var arraylistOfString = new ArrayList<string> (str_equal); // Check empty list assert(arraylistOfString.index_of("one") == -1); // Check invalid type assert(arraylistOfString.index_of(1) == -1); // Check one item arraylistOfString.add("one"); assert(arraylistOfString.index_of("one") == 0); assert(arraylistOfString.index_of("two") == -1); // Check more items arraylistOfString.add("two"); arraylistOfString.add("three"); arraylistOfString.add("four"); assert(arraylistOfString.index_of("one") == 0); assert(arraylistOfString.index_of("two") == 1); assert(arraylistOfString.index_of("three") == 2); assert(arraylistOfString.index_of("four") == 3); assert(arraylistOfString.index_of("five") == -1); // Check list of ints var arraylistOfInt = new ArrayList<int> (); // Check more items arraylistOfInt.add(1); arraylistOfInt.add(2); arraylistOfInt.add(3); assert(arraylistOfInt.index_of(1) == 0); assert(arraylistOfInt.index_of(2) == 1); assert(arraylistOfInt.index_of(3) == 2); assert(arraylistOfInt.index_of(4) == -1); // Check list of objects var arraylistOfObjects = new ArrayList<ClassForTesting> (); var object1 = new ClassForTesting(); var object2 = new ClassForTesting(); var object3 = new ClassForTesting(); var object4 = new ClassForTesting(); arraylistOfObjects.add(object1); arraylistOfObjects.add(object2); arraylistOfObjects.add(object3); assert(arraylistOfObjects.index_of(object1) == 0); assert(arraylistOfObjects.index_of(object2) == 1); assert(arraylistOfObjects.index_of(object3) == 2); assert(arraylistOfObjects.index_of(4) == -1); } void test_arraylist_add () { var arraylistOfString = new ArrayList<string> (str_equal); arraylistOfString.add ("42"); assert (arraylistOfString.contains ("42")); assert (arraylistOfString.size == 1); // check for correct order of elements arraylistOfString.add ("43"); arraylistOfString.add ("44"); arraylistOfString.add ("45"); assert (arraylistOfString.get(0) == "42"); assert (arraylistOfString.get(1) == "43"); assert (arraylistOfString.get(2) == "44"); assert (arraylistOfString.get(3) == "45"); assert (arraylistOfString.size == 4); // check adding of ints var arrayListOfInt = new ArrayList<int> (); arrayListOfInt.add (42); assert (arrayListOfInt.contains (42)); assert (arrayListOfInt.size == 1); // check adding of objects var arrayListOfGLibObject = new ArrayList<ClassForTesting> (); var fooObject = new ClassForTesting(); arrayListOfGLibObject.add (fooObject); assert (arrayListOfGLibObject.contains (fooObject)); assert (arrayListOfGLibObject.size == 1); } void test_arraylist_clear() { var arraylistOfString = new ArrayList<string> (str_equal); assert(arraylistOfString.size == 0); // Check clear on empty list arraylistOfString.clear(); assert(arraylistOfString.size == 0); // Check clear one item arraylistOfString.add("1"); assert(arraylistOfString.size == 1); arraylistOfString.clear(); assert(arraylistOfString.size == 0); // Check clear multiple items arraylistOfString.add("1"); arraylistOfString.add("2"); arraylistOfString.add("3"); assert(arraylistOfString.size == 3); arraylistOfString.clear(); assert(arraylistOfString.size == 0); } void test_arraylist_contains () { var arraylistOfString = new ArrayList<string> (str_equal); // Check on empty list assert(!arraylistOfString.contains("1")); // Check incomaptible type assert(!arraylistOfString.contains(1)); // Check items arraylistOfString.add("10"); assert(arraylistOfString.contains("10")); assert(!arraylistOfString.contains("20")); assert(!arraylistOfString.contains("30")); arraylistOfString.add("20"); assert(arraylistOfString.contains("10")); assert(arraylistOfString.contains("20")); assert(!arraylistOfString.contains("30")); arraylistOfString.add("30"); assert(arraylistOfString.contains("10")); assert(arraylistOfString.contains("20")); assert(arraylistOfString.contains("30")); // Clear and recheck arraylistOfString.clear(); assert(!arraylistOfString.contains("10")); assert(!arraylistOfString.contains("20")); assert(!arraylistOfString.contains("30")); var arraylistOfInt = new ArrayList<int> (); // Check items arraylistOfInt.add(10); assert(arraylistOfInt.contains(10)); assert(!arraylistOfInt.contains(20)); assert(!arraylistOfInt.contains(30)); arraylistOfInt.add(20); assert(arraylistOfInt.contains(10)); assert(arraylistOfInt.contains(20)); assert(!arraylistOfInt.contains(30)); arraylistOfInt.add(30); assert(arraylistOfInt.contains(10)); assert(arraylistOfInt.contains(20)); assert(arraylistOfInt.contains(30)); // Clear and recheck arraylistOfInt.clear(); assert(!arraylistOfInt.contains(10)); assert(!arraylistOfInt.contains(20)); assert(!arraylistOfInt.contains(30)); } void test_arraylist_remove () { var arraylistOfString = new ArrayList<string> (str_equal); // Check remove if list is empty arraylistOfString.remove("42"); // Check remove for incompatible type arraylistOfString.remove(10); // Add 5 same elements arraylistOfString.add ("42"); arraylistOfString.add ("42"); arraylistOfString.add ("42"); arraylistOfString.add ("42"); arraylistOfString.add ("42"); // Check remove one element arraylistOfString.remove ("42"); assert(arraylistOfString.size == 4); assert(arraylistOfString.contains ("42")); // Check remove another one element arraylistOfString.remove ("42"); assert(arraylistOfString.size == 3); assert(arraylistOfString.contains ("42")); // Clear the list to start from scratch arraylistOfString.clear(); // Add 5 different elements arraylistOfString.add ("42"); arraylistOfString.add ("43"); arraylistOfString.add ("44"); arraylistOfString.add ("45"); arraylistOfString.add ("46"); assert (arraylistOfString.size == 5); // Check remove first arraylistOfString.remove("42"); assert(arraylistOfString.size == 4); assert(arraylistOfString.get(0) == "43"); assert(arraylistOfString.get(1) == "44"); assert(arraylistOfString.get(2) == "45"); assert(arraylistOfString.get(3) == "46"); // Check remove last arraylistOfString.remove("46"); assert(arraylistOfString.size == 3); assert(arraylistOfString.get(0) == "43"); assert(arraylistOfString.get(1) == "44"); assert(arraylistOfString.get(2) == "45"); // Check remove in between arraylistOfString.remove("44"); assert(arraylistOfString.size == 2); assert(arraylistOfString.get(0) == "43"); assert(arraylistOfString.get(1) == "45"); // Check removing of int element var arraylistOfInt = new ArrayList<int> (); // Add 5 different elements arraylistOfInt.add (42); arraylistOfInt.add (43); arraylistOfInt.add (44); arraylistOfInt.add (45); arraylistOfInt.add (46); assert (arraylistOfInt.size == 5); // Remove first arraylistOfInt.remove(42); assert(arraylistOfInt.size == 4); assert(arraylistOfInt.get(0) == 43); assert(arraylistOfInt.get(1) == 44); assert(arraylistOfInt.get(2) == 45); assert(arraylistOfInt.get(3) == 46); // Remove last arraylistOfInt.remove(46); assert(arraylistOfInt.size == 3); assert(arraylistOfInt.get(0) == 43); assert(arraylistOfInt.get(1) == 44); assert(arraylistOfInt.get(2) == 45); // Remove in between arraylistOfInt.remove(44); assert(arraylistOfInt.size == 2); assert(arraylistOfInt.get(0) == 43); assert(arraylistOfInt.get(1) == 45); } void test_arraylist_size () { var arraylist = new ArrayList<string> (); // Check empty list assert (arraylist.size == 0); // Check when one item arraylist.add("1"); assert (arraylist.size == 1); // Check when more items arraylist.add("2"); assert (arraylist.size == 2); // Check when items cleared arraylist.clear(); assert (arraylist.size == 0); } void test_arraylist_iterator () { var arraylistOfString = new ArrayList<string> (); // Check iterate empty list var iterator = arraylistOfString.iterator (); assert (!iterator.next()); // Check iterate list arraylistOfString.add("42"); arraylistOfString.add("43"); arraylistOfString.add("44"); iterator = arraylistOfString.iterator (); assert (iterator.next()); assert (iterator.get() == "42"); assert (iterator.next()); assert (iterator.get() == "43"); assert (iterator.next()); assert (iterator.get() == "44"); assert (!iterator.next()); } void main (string[] args) { Test.init (ref args); // Methods of List interface Test.add_func ("/Arraylist/List/get", test_arraylist_get); Test.add_func ("/Arraylist/List/set", test_arraylist_set); Test.add_func ("/Arraylist/List/insert", test_arraylist_insert); Test.add_func ("/Arraylist/List/remove_at", test_arraylist_remove_at); Test.add_func ("/Arraylist/List/index_of", test_arraylist_index_of); // Methods of Collection interface Test.add_func ("/Arraylist/Collection/add", test_arraylist_add); Test.add_func ("/Arraylist/Collection/clear", test_arraylist_clear); Test.add_func ("/Arraylist/Collection/contains", test_arraylist_contains); Test.add_func ("/Arraylist/Collection/remove", test_arraylist_remove); Test.add_func ("/Arraylist/Collection/size", test_arraylist_size); // Methods of Iterable interface Test.add_func ("/Arraylist/Iterable/iterator", test_arraylist_iterator); Test.run (); }
/* testhashmap.vala * * Copyright (C) 2008 Jürg Billeter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Author: * Jürg Billeter <[EMAIL PROTECTED]> */ using GLib; using Gee; class ClassForTesting : GLib.Object { public string prop { get;set; } } class ERR : GLib.Object { public static string INDEX_OUT_OF_RANGE = "*(index >= 0 && index < self->priv->_size)*"; public static string CODE_NOT_REACHABLE = "*code should not be reached*"; } void test_hashmap_get () { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // Check get from empty map assert(hashmap.get ("foo") == null); // Check get from map with one items hashmap.set ("key", "value"); assert(hashmap.get ("key") == "value"); // Check get from non-existing key assert (hashmap.get ("foo") == null); // Check get from map with multiple items hashmap.set ("key2", "value2"); hashmap.set ("key3", "value3"); assert (hashmap.get ("key") == "value"); assert (hashmap.get ("key2") == "value2"); assert (hashmap.get ("key3") == "value3"); } void test_hashmap_set () { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // check map is empty assert (hashmap.size == 0); // check set an item to map hashmap.set ("abc", "one"); assert (hashmap.contains ("abc")); assert (hashmap.get ("abc") == "one"); assert (hashmap.size == 1); // check set an item to map with same value hashmap.set ("def", "one"); assert (hashmap.contains ("def")); assert (hashmap.get ("abc") == "one"); assert (hashmap.get ("def") == "one"); assert (hashmap.size == 2); // check set with same key hashmap.set ("def", "two"); assert (hashmap.contains ("def")); assert (hashmap.get ("abc") == "one"); assert (hashmap.get ("def") == "two"); assert (hashmap.size == 2); } void test_hashmap_remove () { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // check removing when map is empty hashmap.remove ("foo"); assert(hashmap.size == 0); // add items hashmap.set ("aaa", "111"); hashmap.set ("bbb", "222"); hashmap.set ("ccc", "333"); hashmap.set ("ddd", "444"); assert(hashmap.size == 4); // check remove on first place hashmap.remove ("aaa"); assert(hashmap.size == 3); // check remove in between hashmap.remove ("ccc"); assert(hashmap.size == 2); // check remove in last place hashmap.remove ("ddd"); assert(hashmap.size == 1); // check remove invalid key hashmap.remove ("bar"); // check remove last in map hashmap.remove ("bbb"); assert(hashmap.size == 0); } void test_hashmap_contains() { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // Check on empty map assert(!hashmap.contains("111")); // Check items hashmap.set("10", "111"); assert(hashmap.contains("10")); assert(!hashmap.contains("20")); assert(!hashmap.contains("30")); assert(hashmap.get("10") == "111"); hashmap.set("20", "222"); assert(hashmap.contains("10")); assert(hashmap.contains("20")); assert(!hashmap.contains("30")); assert(hashmap.get("10") == "111"); assert(hashmap.get("20") == "222"); hashmap.set("30", "333"); assert(hashmap.contains("10")); assert(hashmap.contains("20")); assert(hashmap.contains("30")); assert(hashmap.get("10") == "111"); assert(hashmap.get("20") == "222"); assert(hashmap.get("30") == "333"); // Clear and recheck hashmap.clear(); assert(!hashmap.contains("10")); assert(!hashmap.contains("20")); assert(!hashmap.contains("30")); var hashmapOfInt = new HashMap<int,int> (); // Check items hashmapOfInt.set(10, 111); assert(hashmapOfInt.contains(10)); assert(!hashmapOfInt.contains(20)); assert(!hashmapOfInt.contains(30)); assert(hashmapOfInt.get(10) == 111); hashmapOfInt.set(20, 222); assert(hashmapOfInt.contains(10)); assert(hashmapOfInt.contains(20)); assert(!hashmapOfInt.contains(30)); assert(hashmapOfInt.get(10) == 111); assert(hashmapOfInt.get(20) == 222); hashmapOfInt.set(30, 333); assert(hashmapOfInt.contains(10)); assert(hashmapOfInt.contains(20)); assert(hashmapOfInt.contains(30)); assert(hashmapOfInt.get(10) == 111); assert(hashmapOfInt.get(20) == 222); assert(hashmapOfInt.get(30) == 333); } void test_hashmap_size() { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // Check empty map assert (hashmap.size == 0); // Check when one item hashmap.set("1", "1"); assert (hashmap.size == 1); // Check when more items hashmap.set("2", "2"); assert (hashmap.size == 2); // Check when items cleared hashmap.clear(); assert (hashmap.size == 0); } void test_hashmap_get_keys() { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // Check keys on empty map var keySet = hashmap.get_keys(); assert(keySet.size == 0); // Check keys on map with one item hashmap.set("aaa", "111"); assert(keySet.size == 1); assert(keySet.contains("aaa")); keySet = hashmap.get_keys(); assert(keySet.size == 1); assert(keySet.contains("aaa")); // Check modify key set directly if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { keySet.add("ccc"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.CODE_NOT_REACHABLE); // Check keys on map with multiple items hashmap.set("bbb", "222"); assert(keySet.size == 2); assert(keySet.contains("aaa")); assert(keySet.contains("bbb")); keySet = hashmap.get_keys(); assert(keySet.size == 2); assert(keySet.contains("aaa")); assert(keySet.contains("bbb")); // Check keys on map clear hashmap.clear(); assert(keySet.size == 0); keySet = hashmap.get_keys(); assert(keySet.size == 0); } void test_hashmap_get_values() { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); // Check keys on empty map var valueCollection = hashmap.get_values(); assert(valueCollection.size == 0); // Check keys on map with one item hashmap.set("aaa", "111"); assert(valueCollection.size == 1); assert(valueCollection.contains("111")); valueCollection = hashmap.get_values(); assert(valueCollection.size == 1); assert(valueCollection.contains("111")); // Check modify key set directly if (Test.trap_fork(0, TestTrapFlags.SILENCE_STDOUT | TestTrapFlags.SILENCE_STDERR)) { valueCollection.add("ccc"); return; } Test.trap_assert_failed(); Test.trap_assert_stderr(ERR.CODE_NOT_REACHABLE); // Check keys on map with multiple items hashmap.set("bbb", "222"); assert(valueCollection.size == 2); assert(valueCollection.contains("111")); assert(valueCollection.contains("222")); valueCollection = hashmap.get_values(); assert(valueCollection.size == 2); assert(valueCollection.contains("111")); assert(valueCollection.contains("222")); // Check keys on map clear hashmap.clear(); assert(valueCollection.size == 0); valueCollection = hashmap.get_values(); assert(valueCollection.size == 0); } void test_hashmap_clear() { var hashmap = new HashMap<string,string> (str_hash, str_equal, str_equal); assert(hashmap.size == 0); // Check clear on empty map hashmap.clear(); assert(hashmap.size == 0); // Check clear one item hashmap.set("1", "1"); assert(hashmap.size == 1); hashmap.clear(); assert(hashmap.size == 0); // Check clear multiple items hashmap.set("1", "1"); hashmap.set("2", "2"); hashmap.set("3", "3"); assert(hashmap.size == 3); hashmap.clear(); assert(hashmap.size == 0); } void main (string[] args) { Test.init (ref args); Test.add_func ("/HashMap/Map/get", test_hashmap_get); Test.add_func ("/HashMap/Map/set", test_hashmap_set); Test.add_func ("/HashMap/Map/remove", test_hashmap_remove); Test.add_func ("/HashMap/Map/contains", test_hashmap_contains); Test.add_func ("/HashMap/Map/size", test_hashmap_size); Test.add_func ("/HashMap/Map/get_keys", test_hashmap_get_keys); Test.add_func ("/HashMap/Map/get_values", test_hashmap_get_values); Test.add_func ("/HashMap/Map/clear", test_hashmap_clear); Test.run (); }
/* testhashset.vala * * Copyright (C) 2008 Jürg Billeter * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Author: * Jürg Billeter <[EMAIL PROTECTED]> */ using GLib; using Gee; class ClassForTesting : GLib.Object { public string prop { get;set; } } class ERR : GLib.Object { public static string INDEX_OUT_OF_RANGE = "*(index >= 0 && index < self->priv->_size)*"; } void test_hashset_add () { // Check adding of strings var hashset = new HashSet<string> (str_hash, str_equal); hashset.add ("42"); assert (hashset.contains ("42")); assert (hashset.size == 1); hashset.add ("43"); assert (hashset.contains ("42")); assert (hashset.contains ("43")); assert (hashset.size == 2); // Check add same element assert (hashset.size == 2); hashset.add ("43"); assert (hashset.contains ("42")); assert (hashset.contains ("43")); assert (hashset.size == 2); // Check adding of ints var hashsetInt = new HashSet<int> (); hashsetInt.add (42); assert (hashsetInt.contains (42)); assert (hashsetInt.size == 1); hashsetInt.add (43); assert (hashsetInt.contains (42)); assert (hashsetInt.contains (43)); assert (hashsetInt.size == 2); // Check add same element assert (hashsetInt.size == 2); hashsetInt.add (43); assert (hashsetInt.contains (42)); assert (hashsetInt.contains (43)); assert (hashsetInt.size == 2); // Check adding of objects var hashsetObject = new HashSet<ClassForTesting> (); var fooObject = new ClassForTesting(); hashsetObject.add (fooObject); assert (hashsetObject.contains (fooObject)); assert (hashsetObject.size == 1); var fooObject2 = new ClassForTesting(); hashsetObject.add (fooObject2); assert (hashsetObject.contains (fooObject)); assert (hashsetObject.contains (fooObject2)); assert (hashsetObject.size == 2); // Check add same element assert (hashsetObject.size == 2); hashsetObject.add (fooObject2); assert (hashsetObject.contains (fooObject)); assert (hashsetObject.contains (fooObject2)); assert (hashsetObject.size == 2); } void test_hashset_clear() { var hashset = new HashSet<string> (str_hash, str_equal); assert(hashset.size == 0); // Check clear on empty set hashset.clear(); assert(hashset.size == 0); // Check clear one item hashset.add("1"); assert(hashset.size == 1); hashset.clear(); assert(hashset.size == 0); // Check clear multiple items hashset.add("1"); hashset.add("2"); hashset.add("3"); assert(hashset.size == 3); hashset.clear(); assert(hashset.size == 0); } void test_hashset_contains() { var hashsetString = new HashSet<string> (str_hash, str_equal); // Check on empty set assert(!hashsetString.contains("1")); // Check items hashsetString.add("10"); assert(hashsetString.contains("10")); assert(!hashsetString.contains("20")); assert(!hashsetString.contains("30")); hashsetString.add("20"); assert(hashsetString.contains("10")); assert(hashsetString.contains("20")); assert(!hashsetString.contains("30")); hashsetString.add("30"); assert(hashsetString.contains("10")); assert(hashsetString.contains("20")); assert(hashsetString.contains("30")); // Clear and recheck hashsetString.clear(); assert(!hashsetString.contains("10")); assert(!hashsetString.contains("20")); assert(!hashsetString.contains("30")); var hashsetInt = new HashSet<int> (); // Check items hashsetInt.add(10); assert(hashsetInt.contains(10)); assert(!hashsetInt.contains(20)); assert(!hashsetInt.contains(30)); hashsetInt.add(20); assert(hashsetInt.contains(10)); assert(hashsetInt.contains(20)); assert(!hashsetInt.contains(30)); hashsetInt.add(30); assert(hashsetInt.contains(10)); assert(hashsetInt.contains(20)); assert(hashsetInt.contains(30)); // Clear and recheck hashsetInt.clear(); assert(!hashsetInt.contains(10)); assert(!hashsetInt.contains(20)); assert(!hashsetInt.contains(30)); } void test_hashset_remove () { var hashsetString = new HashSet<string> (str_hash, str_equal); // Check remove if list is empty hashsetString.remove("42"); // Add 5 different elements hashsetString.add ("42"); hashsetString.add ("43"); hashsetString.add ("44"); hashsetString.add ("45"); hashsetString.add ("46"); assert (hashsetString.size == 5); // Check remove first hashsetString.remove("42"); assert(hashsetString.size == 4); assert(hashsetString.contains("43")); assert(hashsetString.contains("44")); assert(hashsetString.contains("45")); assert(hashsetString.contains("46")); // Check remove last hashsetString.remove("46"); assert(hashsetString.size == 3); assert(hashsetString.contains("43")); assert(hashsetString.contains("44")); assert(hashsetString.contains("45")); // Check remove in between hashsetString.remove("44"); assert(hashsetString.size == 2); assert(hashsetString.contains("43")); assert(hashsetString.contains("45")); // Check removing of int element var hashsetInt = new HashSet<int> (); // Add 5 different elements hashsetInt.add (42); hashsetInt.add (43); hashsetInt.add (44); hashsetInt.add (45); hashsetInt.add (46); assert (hashsetInt.size == 5); // Remove first hashsetInt.remove(42); assert(hashsetInt.size == 4); assert(hashsetInt.contains(43)); assert(hashsetInt.contains(44)); assert(hashsetInt.contains(45)); assert(hashsetInt.contains(46)); // Remove last hashsetInt.remove(46); assert(hashsetInt.size == 3); assert(hashsetInt.contains(43)); assert(hashsetInt.contains(44)); assert(hashsetInt.contains(45)); // Remove in between hashsetInt.remove(44); assert(hashsetInt.size == 2); assert(hashsetInt.contains(43)); assert(hashsetInt.contains(45)); } void test_hashset_size() { var hashset = new HashSet<string> (str_hash, str_equal); // Check empty list assert (hashset.size == 0); // Check when one item hashset.add("1"); assert (hashset.size == 1); // Check when more items hashset.add("2"); assert (hashset.size == 2); // Check when items cleared hashset.clear(); assert (hashset.size == 0); } void test_hashset_iterator () { var hashset = new HashSet<string> (str_hash, str_equal); // Check iterate empty list var iterator = hashset.iterator (); assert (!iterator.next()); // Check iterate list hashset.add("42"); hashset.add("43"); iterator = hashset.iterator (); // A set is usually not ordered, so this is not a requirement assert (iterator.next()); string firstString = iterator.get(); assert (hashset.contains(firstString)); assert (iterator.next()); string secondString = iterator.get(); assert (hashset.contains(secondString)); assert (!str_equal(firstString, secondString)); // they can not be identical neither equal assert (!iterator.next()); } void main (string[] args) { Test.init (ref args); Test.add_func ("/HashSet/Collection/add", test_hashset_add); Test.add_func ("/HashSet/Collection/clear", test_hashset_clear); Test.add_func ("/HashSet/Collection/contains", test_hashset_contains); Test.add_func ("/HashSet/Collection/remove", test_hashset_remove); Test.add_func ("/HashSet/Collection/size", test_hashset_size); Test.add_func ("/HashSet/Iterable/iterator", test_hashset_iterator); Test.run (); }
_______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list