mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-17 16:11:28 +00:00
Re #1562. Also performance test selector sort.
It looks like issue #1560 will cause a different sorting function to be used for selectors vs descriptors so performance of both should be monitored for regressions.
This commit is contained in:
@@ -66,6 +66,51 @@ var ELEMENTS = 100,
|
||||
[self checkRandomSorted:sorted];
|
||||
}
|
||||
|
||||
- (void)testAlmostSortedNumericUsingMergeSelectorSort
|
||||
{
|
||||
CPLog.warn("\nNUMERIC ALMOST SORTED (SELECTOR)");
|
||||
var a = [self makeUnsorted],
|
||||
sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)];
|
||||
[self checkAlmostSorted:sorted];
|
||||
}
|
||||
|
||||
- (void)testAlmostSortedNumericUsingNativeSelectorSort
|
||||
{
|
||||
var a = [self makeUnsorted],
|
||||
sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)];
|
||||
[self checkAlmostSorted:sorted];
|
||||
}
|
||||
|
||||
- (void)testRandomNumericUsingMergeSelectorSort
|
||||
{
|
||||
CPLog.warn("\nNUMERIC RANDOM (SELECTOR)");
|
||||
var a = [self makeRandomNumeric],
|
||||
sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)];
|
||||
[self checkRandomSorted:sorted];
|
||||
}
|
||||
|
||||
- (void)testRandomNumericUsingNativeSelectorSort
|
||||
{
|
||||
var a = [self makeRandomNumeric],
|
||||
sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)];
|
||||
[self checkRandomSorted:sorted];
|
||||
}
|
||||
|
||||
- (void)testRandomTextUsingMergeSelectorSort
|
||||
{
|
||||
CPLog.warn("\nTEXT RANDOM (SELECTOR)");
|
||||
var a = [self makeRandomText],
|
||||
sorted = [self sort:a usingSortSelector:@selector(sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)];
|
||||
[self checkRandomSorted:sorted];
|
||||
}
|
||||
|
||||
- (void)testRandomTextUsingNativeSelectorSort
|
||||
{
|
||||
var a = [self makeRandomText],
|
||||
sorted = [self sort:a usingSortSelector:@selector(_native_sortedArrayUsingSelector:) withObject:@selector(compareAAscendingThenBDescending:)];
|
||||
[self checkRandomSorted:sorted];
|
||||
}
|
||||
|
||||
- (CPArray)sort:(CPArray)anArray usingSortSelector:(SEL)aSelector withObject:(id)anObject
|
||||
{
|
||||
var sorted,
|
||||
@@ -76,7 +121,7 @@ var ELEMENTS = 100,
|
||||
|
||||
var end = (new Date).getTime();
|
||||
|
||||
CPLog.warn(_cmd + ": " + (end - start) + "ms");
|
||||
CPLog.warn(aSelector + ": " + (end - start) + "ms");
|
||||
|
||||
return sorted;
|
||||
}
|
||||
@@ -195,6 +240,23 @@ var ELEMENTS = 100,
|
||||
});
|
||||
}
|
||||
|
||||
- (CPArray)_native_sortedArrayUsingSelector:(SEL)aSelector
|
||||
{
|
||||
var sorted = [self copy];
|
||||
|
||||
[sorted _native_sortUsingSelector:aSelector];
|
||||
|
||||
return sorted;
|
||||
}
|
||||
|
||||
- (CPArray)_native_sortUsingSelector:(SEL)aSelector
|
||||
{
|
||||
sort(function(lhs, rhs)
|
||||
{
|
||||
return [lhs performSelector:aSelector withObject:rhs];
|
||||
});
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation Sortable : CPObject
|
||||
@@ -203,4 +265,11 @@ var ELEMENTS = 100,
|
||||
int b @accessors;
|
||||
}
|
||||
|
||||
- (int)compareAAscendingThenBDescending:(Sortable)other
|
||||
{
|
||||
var aResult = [a compare:other.a];
|
||||
|
||||
return aResult === CPOrderedSame ? [b compare:other.b] : -aResult;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
Reference in New Issue
Block a user