#import <Foundation/Foundation.h>
NSComparisonResult versionCompare( id str1, id str2, void *context )
{
return [str1 compare:str2 options:NSNumericSearch];
}
int main (int argc, const char * argv[]) {
CFShow(CFSTR("Comparing strings with numbers in them.\n"));
NSObject* pool = [[NSAutoreleasePool alloc] init];
static NSStringCompareOptions comparisonOptions = NSNumericSearch;
NSString* lowStr;
lowStr = [NSString stringWithString:@"1.0.0a3"];
NSString* midStr;
midStr = [NSString stringWithString:@"1.0.0b4"];
NSString* highStr;
highStr = [NSString stringWithString:@"1.0.0b11"];
NSInteger ordering;
ordering = [lowStr compare: midStr options:comparisonOptions];
NSLog(@"ordering of compare return value: %d", ordering);
if ( ordering == NSOrderedAscending)
{
NSLog(@"Expected NSOrderedAscending: %@ < %@", lowStr, midStr);
}
else if ( ordering == NSOrderedDescending)
{
NSLog(@"NSOrderedDescending: %@ > %@", lowStr, midStr);
}
else
{
NSLog(@"NSOrderedSame: %@ = %@", lowStr, midStr);
}
ordering = [highStr compare: midStr options: NSNumericSearch];
NSLog(@"ordering of compare return value: %d", ordering);
if ( ordering == NSOrderedAscending)
{
NSLog(@"NSOrderedAscending: %@ < %@", highStr, midStr);
}
else if ( ordering == NSOrderedDescending)
{
NSLog(@"Expected NSOrderedDescending: %@ > %@", highStr, midStr);
}
else
{
NSLog(@"NSOrderedSame: %@ = %@", highStr, midStr);
}
NSArray *unsorted = [NSArray arrayWithObjects: midStr, highStr, lowStr, nil ];
NSArray* sorted = [unsorted sortedArrayUsingFunction:versionCompare context:nil];
NSLog( @"unsorted: %@", unsorted );
NSLog( @"sorted: %@", sorted );
[pool release];
return 0;
}