Skip to content

Commit

Permalink
Re #1562. Also performance test selector sort.
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
aljungberg committed Jun 9, 2012
1 parent 0827f58 commit 58103ce
Showing 1 changed file with 70 additions and 1 deletion.
71 changes: 70 additions & 1 deletion Tests/Foundation/CPArrayPerformanceTest.j
Expand Up @@ -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,
Expand All @@ -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;
}
Expand Down Expand Up @@ -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
Expand All @@ -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

0 comments on commit 58103ce

Please sign in to comment.