#import "Testing.h" #import #import #import #import #import #import #import #import #import #import #if defined(GNUSTEP_BASE_LIBRARY) #import #endif static NSUInteger fooCount = 0; int main() { START_SET("NSDictionary Blocks") # ifndef __has_feature # define __has_feature(x) 0 # endif # if __has_feature(blocks) NSAutoreleasePool *arp = [NSAutoreleasePool new]; __block NSLock *fooLock = [NSLock new]; NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: @"foo", @"key1", @"bar", @"key2", @"foo", @"key3", nil]; void(^enumBlock)(id,id,BOOL*) = ^(id key, id obj, BOOL *stop){ if ([obj isEqual: @"foo"]){ [fooLock lock]; fooCount++; [fooLock unlock];}}; [dict enumerateKeysAndObjectsUsingBlock: enumBlock]; PASS((2 == fooCount), "Can enumerate dictionary using a block"); fooCount = 0; [dict enumerateKeysAndObjectsWithOptions: NSEnumerationConcurrent usingBlock: enumBlock]; PASS((2 == fooCount), "Can enumerate dictionary concurrently using a block"); NSSet *fooKeys = [dict keysOfEntriesPassingTest: ^(id key, id obj, BOOL *stop){ return [obj isEqual: @"foo"];}]; PASS((([fooKeys count] == 2) && ([fooKeys containsObject: @"key1"]) && ([fooKeys containsObject: @"key3"])) , "Can use blocks as predicates."); [fooLock release]; [arp release]; arp = nil; # else SKIP("No Blocks support in the compiler.") # endif END_SET("NSDictionary Blocks") return 0; }