mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
Add test for NSFastEnumeration
This commit is contained in:
parent
f67c99dbcc
commit
f56d2689b6
2 changed files with 95 additions and 0 deletions
95
Tests/base/NSFastEnumeration/basic.m
Normal file
95
Tests/base/NSFastEnumeration/basic.m
Normal file
|
@ -0,0 +1,95 @@
|
|||
#import <Foundation/NSArray.h>
|
||||
#import <Foundation/NSAutoreleasePool.h>
|
||||
#import <Foundation/NSDictionary.h>
|
||||
#import <Foundation/NSSet.h>
|
||||
#import <Foundation/NSOrderedSet.h>
|
||||
#import "ObjectTesting.h"
|
||||
#import "../../../Source/GSFastEnumeration.h"
|
||||
|
||||
void fast_enumeration_mutation_add(id mutableCollection)
|
||||
{
|
||||
NSUInteger i = 0;
|
||||
FOR_IN(id, o, mutableCollection)
|
||||
if (i == [mutableCollection count]/2) {
|
||||
if ([mutableCollection isKindOfClass:[NSMutableDictionary class]]) {
|
||||
[mutableCollection setObject:@"boom" forKey:@"boom"];
|
||||
} else {
|
||||
[mutableCollection addObject:@"boom"];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
END_FOR_IN(mutableCollection)
|
||||
}
|
||||
|
||||
void fast_enumeration_mutation_remove(id mutableCollection)
|
||||
{
|
||||
NSUInteger i = 0;
|
||||
FOR_IN(id, o, mutableCollection)
|
||||
if (i == [mutableCollection count]/2) {
|
||||
if ([mutableCollection isKindOfClass:[NSMutableDictionary class]]) {
|
||||
[mutableCollection removeObjectForKey:o];
|
||||
} else {
|
||||
[mutableCollection removeObject:o];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
END_FOR_IN(mutableCollection)
|
||||
}
|
||||
|
||||
void test_fast_enumeration(id collection, NSArray *objects)
|
||||
{
|
||||
NSMutableArray *returnedObjects = [[NSMutableArray alloc] init];
|
||||
FOR_IN(id, o, collection)
|
||||
[returnedObjects addObject:o];
|
||||
END_FOR_IN(collection)
|
||||
if (!([collection isKindOfClass:[NSArray class]] ||
|
||||
[collection isKindOfClass:[NSOrderedSet class]])) {
|
||||
[returnedObjects sortUsingSelector:@selector(compare:)];
|
||||
}
|
||||
PASS_EQUAL(returnedObjects, objects, "fast enumeration returns all objects");
|
||||
|
||||
id mutableCollection = [collection mutableCopy];
|
||||
PASS_EXCEPTION(
|
||||
fast_enumeration_mutation_add(mutableCollection),
|
||||
NSGenericException,
|
||||
"Fast enumeration mutation add properly calls @\"NSGenericException\"");
|
||||
PASS_EXCEPTION(
|
||||
fast_enumeration_mutation_remove(mutableCollection),
|
||||
NSGenericException,
|
||||
"Fast enumeration mutation remove properly calls @\"NSGenericException\"");
|
||||
[mutableCollection release];
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
NSAutoreleasePool *arp = [NSAutoreleasePool new];
|
||||
|
||||
NSMutableArray *objects = [NSMutableArray array];
|
||||
int i;
|
||||
for (i = 0; i < 10000; i++) {
|
||||
[objects addObject:[NSString stringWithFormat:@"%.4d", i]];
|
||||
}
|
||||
|
||||
START_SET("NSArray")
|
||||
id array = [NSArray arrayWithArray:objects];
|
||||
test_fast_enumeration(array, objects);
|
||||
END_SET("NSArray")
|
||||
|
||||
START_SET("NSSet")
|
||||
id set = [NSSet setWithArray:objects];
|
||||
test_fast_enumeration(set, objects);
|
||||
END_SET("NSSet")
|
||||
|
||||
START_SET("NSOrderedSet")
|
||||
id orderedSet = [NSOrderedSet orderedSetWithArray:objects];
|
||||
test_fast_enumeration(orderedSet, objects);
|
||||
END_SET("NSOrderedSet")
|
||||
|
||||
START_SET("NSDictionary")
|
||||
id dict = [NSDictionary dictionaryWithObjects:objects forKeys:objects];
|
||||
test_fast_enumeration(dict, objects);
|
||||
END_SET("NSDictionary")
|
||||
|
||||
[arp release]; arp = nil;
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue