/* * Copyright (c) 2008 - 2009 * Jonathan Schleifer * * All rights reserved. * * This file is part of libobjfw. It may be distributed under the terms of the * Q Public License 1.0, which can be found in the file LICENSE included in * the packaging of this file. */ #include "config.h" #include #include #import "OFAutoreleasePool.h" #import "OFDictionary.h" #import "OFString.h" #import "OFExceptions.h" #define TESTS 15 int main() { int i = 0; OFDictionary *dict = [OFMutableDictionary dictionaryWithHashSize: 16]; OFDictionary *dict2; OFArray *keys, *objs; OFIterator *iter = [dict iterator]; of_iterator_pair_t pair[2]; OFAutoreleasePool *pool = [[OFAutoreleasePool alloc] init]; OFString *key1 = [OFString stringWithCString: "key1"]; OFString *key2 = [OFString stringWithCString: "key2"]; OFString *value1 = [OFString stringWithCString: "value1"]; OFString *value2 = [OFString stringWithCString: "value2"]; [dict setObject: value1 forKey: key1]; [dict setObject: value2 forKey: key2]; [pool release]; i++; if (strcmp([[dict objectForKey: @"key1"] cString], "value1")) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; if (strcmp([[dict objectForKey: key2] cString], "value2")) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; pair[0] = [iter nextKeyObjectPair]; pair[1] = [iter nextKeyObjectPair]; if (![pair[0].key isEqual: @"key2"] || ![pair[0].object isEqual: @"value2"] || ![pair[1].key isEqual: @"key1"] || ![pair[1].object isEqual: @"value1"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; [dict changeHashSize: 8]; iter = [dict iterator]; pair[0] = [iter nextKeyObjectPair]; pair[1] = [iter nextKeyObjectPair]; if (![pair[0].key isEqual: @"key1"] || ![pair[0].object isEqual: @"value1"] || ![pair[1].key isEqual: @"key2"] || ![pair[1].object isEqual: @"value2"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; if ([dict averageItemsPerBucket] != 1.0) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; if ([iter nextKeyObjectPair].object != nil) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; if ([dict objectForKey: @"key3"] != nil) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; [dict release]; dict = [OFDictionary dictionaryWithKeysAndObjects: @"foo", @"bar", @"baz", @"qux", nil]; if (![[dict objectForKey: @"foo"] isEqual: @"bar"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; if (![[dict objectForKey: @"baz"] isEqual: @"qux"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; [dict release]; dict = [OFDictionary dictionaryWithObject: @"bar" forKey: @"foo"]; if (![[dict objectForKey: @"foo"] isEqual: @"bar"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; [dict release]; keys = [OFArray arrayWithObjects: @"k1", @"k2", nil]; objs = [OFArray arrayWithObjects: @"o1", @"o2", nil]; dict = [OFDictionary dictionaryWithObjects: objs forKeys: keys]; if (![[dict objectForKey: @"k1"] isEqual: @"o1"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; if (![[dict objectForKey: @"k2"] isEqual: @"o2"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; dict2 = [dict copy]; [dict release]; if (![[dict2 objectForKey: @"k1"] isEqual: @"o1"] || ![[dict2 objectForKey: @"k2"] isEqual: @"o2"]) { printf("\033[K\033[1;31mTest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; dict = [dict2 mutableCopy]; [dict2 release]; if (![[dict objectForKey: @"k1"] isEqual: @"o1"] || ![[dict objectForKey: @"k2"] isEqual: @"o2"]) { printf("\033[k\033[1;31mtest %d/%d failed!\033[m\n", i, TESTS); return 1; } i++; [dict setObject: @"o0" forKey: @"k1"]; [dict setObject: @"o3" forKey: @"k3"]; if (![[dict objectForKey: @"k1"] isEqual: @"o0"] || ![[dict objectForKey: @"k2"] isEqual: @"o2"] || ![[dict objectForKey: @"k3"] isEqual: @"o3"]) { printf("\033[k\033[1;31mtest %d/%d failed!\033[m\n", i, TESTS); return 1; } printf("\033[1;32mTests successful: %d/%d\033[0m\n", i, TESTS); return 0; }