Skip to content

Commit

Permalink
Adding more documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
rgerard committed Dec 28, 2015
1 parent 9f59510 commit 6555085
Show file tree
Hide file tree
Showing 5 changed files with 139 additions and 79 deletions.
4 changes: 4 additions & 0 deletions NSUnderscore.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
942C2F371C294EAC00F0265E /* NSSet+NSUnderscoreAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 942C2F361C294EAC00F0265E /* NSSet+NSUnderscoreAdditions.m */; };
942C2F391C294ED900F0265E /* NSUnderscoreSetTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 942C2F381C294ED900F0265E /* NSUnderscoreSetTests.m */; };
942C2F3A1C294F2500F0265E /* NSSet+NSUnderscoreAdditions.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = 942C2F331C294D8300F0265E /* NSSet+NSUnderscoreAdditions.h */; };
94FCFBA11C2CA3F60036556B /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 94FCFBA01C2CA3F60036556B /* README.md */; };
/* End PBXBuildFile section */

/* Begin PBXContainerItemProxy section */
Expand Down Expand Up @@ -57,6 +58,7 @@
942C2F331C294D8300F0265E /* NSSet+NSUnderscoreAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSSet+NSUnderscoreAdditions.h"; sourceTree = "<group>"; };
942C2F361C294EAC00F0265E /* NSSet+NSUnderscoreAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSSet+NSUnderscoreAdditions.m"; sourceTree = "<group>"; };
942C2F381C294ED900F0265E /* NSUnderscoreSetTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NSUnderscoreSetTests.m; sourceTree = "<group>"; };
94FCFBA01C2CA3F60036556B /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
/* End PBXFileReference section */

/* Begin PBXFrameworksBuildPhase section */
Expand All @@ -81,6 +83,7 @@
940E99B41BD37C82002F2880 = {
isa = PBXGroup;
children = (
94FCFBA01C2CA3F60036556B /* README.md */,
940E99BF1BD37C82002F2880 /* NSUnderscore */,
940E99CE1BD37CB3002F2880 /* NSUnderscoreTests */,
940E99BE1BD37C82002F2880 /* Products */,
Expand Down Expand Up @@ -210,6 +213,7 @@
files = (
942C2F371C294EAC00F0265E /* NSSet+NSUnderscoreAdditions.m in Sources */,
942C2F2F1C29487500F0265E /* NSDictionary+NSUnderscoreAdditions.m in Sources */,
94FCFBA11C2CA3F60036556B /* README.md in Sources */,
940E99C31BD37C82002F2880 /* NSArray+NSUnderscoreAdditions.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
Expand Down
32 changes: 16 additions & 16 deletions NSUnderscore/NSArray+NSUnderscoreAdditions.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,48 +62,48 @@

/*
* Splits a collection into sets, grouped by the result of running each value through action.
* For example:
* NSArray *testObjects = @[@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}, @{@"token": @"test-1"}];
* NSDictionary *groupedObjects = [testObjects groupBy:^id(NSDictionary *val) {
* Example:
* NSArray *objects = @[@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}, @{@"token": @"test-1"}];
* NSDictionary *groupedObjects = [objects groupBy:^id(NSDictionary *val) {
* NSString *token = [val objectForKey:@"token"];
* return [token substringToIndex:4];
* }];
* --> Should produce the result: @{ @"ryan": [@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}], @"test": [@{@"token": @"test-1"}] }
* groupedObjects is: @{ @"ryan": [@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}], @"test": [@{@"token": @"test-1"}] }
*/
- (NSDictionary *)groupBy:(id(^)(id))action;

/*
* Given a list, and an action function that returns a key for each element in the list, returns an object with an index of each item.
* Just like groupBy, but for when you know your keys are unique.
* For example:
* NSArray *testObjects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"3"}];
* NSDictionary *indexedObjects = [testObjects indexBy:^id(NSDictionary *val) {
* Example:
* NSArray *objects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"3"}];
* NSDictionary *indexedObjects = [objects indexBy:^id(NSDictionary *val) {
* return [val objectForKey:@"token"];
* }];
* --> Should produce the result: @{ @"1": @{@"token": @"1"}, @"2": @{@"token": @"ryan-2"}, @"3": @{@"token": @"3"}] }
* indexedObjects is: @{ @"1": @{@"token": @"1"}, @"2": @{@"token": @"ryan-2"}, @"3": @{@"token": @"3"}] }
*/
- (NSDictionary *)indexBy:(id(^)(id))action;

/*
* Sorts a list into groups and returns a count for the number of objects in each group.
* Similar to groupBy, but instead of returning a list of values, returns a count for the number of values in that group.
*
* NSArray *testObjects = @[@(1), @(2), @(3)];
* NSDictionary *countedObjects = [testObjects countBy:^id(NSNumber *val) {
* Example:
* NSArray *objects = @[@(1), @(2), @(3)];
* NSDictionary *countedObjects = [objects countBy:^id(NSNumber *val) {
* return val.integerValue % 2 == 0 ? @"even": @"odd";
* }];
* --> Should produce the result: @{ @"even": 1, @"odd": 2 }
* countedObjects is: @{ @"even": 1, @"odd": 2 }
*/
- (NSDictionary *)countBy:(id(^)(id))action;

/*
* Split array into two arrays: one whose elements all satisfy action and one whose elements all do not satisfy action.
* For example:
* NSArray *testObjects = @[@(1), @(2), @(3)];
* NSDictionary *indexedObjects = [testObjects partition:^BOOL(NSNumber *val) {
* Example:
* NSArray *objects = @[@(1), @(2), @(3)];
* NSDictionary *partitionedObjects = [objects partition:^BOOL(NSNumber *val) {
* return val.integerValue % 2 == 0;
* }];
* --> Should produce the result: @[ @[ @(2) ], @[ @(1), @(3) ] ]
* partitionedObjects is: @[ @[ @(2) ], @[ @(1), @(3) ] ]
*/
- (NSArray *)partition:(BOOL(^)(id))action;

Expand Down
96 changes: 48 additions & 48 deletions NSUnderscoreTests/NSUnderscoreArrayTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -17,26 +17,26 @@ @interface NSUnderscoreArrayTests : XCTestCase
@implementation NSUnderscoreArrayTests

- (void)testEachBasic {
NSArray *test = @[@(2), @(8)];
NSArray *objects = @[@(2), @(8)];
__block NSInteger total = 0;
[test each:^(NSNumber *object) {
[objects each:^(NSNumber *object) {
total += object.integerValue;
}];
XCTAssert(total == 10);
}

- (void)testEachWhenEmpty {
NSArray *test = @[];
NSArray *objects = @[];
__block NSInteger total = 0;
[test each:^(NSNumber *object) {
[objects each:^(NSNumber *object) {
total += object.integerValue;
}];
XCTAssert(total == 0);
}

- (void)testMap {
NSArray *test = @[@(2), @(3)];
NSArray *multipliedArray = [test map:(id)^(NSNumber *object) {
NSArray *objects = @[@(2), @(3)];
NSArray *multipliedArray = [objects map:(id)^(NSNumber *object) {
return @(object.integerValue * 2);
}];
XCTAssert(multipliedArray.count == 2);
Expand All @@ -47,16 +47,16 @@ - (void)testMap {
}

- (void)testReduce {
NSArray *test = @[@(2), @(4)];
NSNumber *reduced = [test reduce:(id)^(NSNumber *object, NSNumber *previousValue) {
NSArray *objects = @[@(2), @(4)];
NSNumber *reduced = [objects reduce:(id)^(NSNumber *object, NSNumber *previousValue) {
return @(object.integerValue + previousValue.integerValue);
}];
XCTAssert(reduced.integerValue == 6);
}

- (void)testFilter {
NSArray *test = @[@(2), @(4)];
NSArray *modified = [test filter:(id)^(NSNumber *object) {
NSArray *objects = @[@(2), @(4)];
NSArray *modified = [objects filter:(id)^(NSNumber *object) {
return object.integerValue == 2;
}];
XCTAssert(modified.count == 1);
Expand All @@ -65,8 +65,8 @@ - (void)testFilter {
}

- (void)testReject {
NSArray *test = @[@(2), @(4)];
NSArray *modified = [test reject:(id)^(NSNumber *object) {
NSArray *objects = @[@(2), @(4)];
NSArray *modified = [objects reject:(id)^(NSNumber *object) {
return object.integerValue == 2;
}];
XCTAssert(modified.count == 1);
Expand All @@ -75,65 +75,65 @@ - (void)testReject {
}

- (void)testEveryValid {
NSArray *test = @[@(2), @(4)];
BOOL every = [test every:^BOOL(NSNumber *object) {
NSArray *objects = @[@(2), @(4)];
BOOL every = [objects every:^BOOL(NSNumber *object) {
return object.integerValue > 0;
}];
XCTAssert(every == YES);
}

- (void)testEveryInvalid {
NSArray *test = @[@(2), @(-4)];
BOOL every = [test every:^BOOL(NSNumber *object) {
NSArray *objects = @[@(2), @(-4)];
BOOL every = [objects every:^BOOL(NSNumber *object) {
return object.integerValue > 0;
}];
XCTAssert(every == NO);
}

- (void)testEveryWhenEmpty {
NSArray *test = @[];
BOOL every = [test every:^BOOL(NSNumber *object) {
NSArray *objects = @[];
BOOL every = [objects every:^BOOL(NSNumber *object) {
return object.integerValue > 0;
}];
XCTAssert(every == YES);
}

- (void)testSomeValid {
NSArray *test = @[@(-2), @(4)];
BOOL some = [test some:^BOOL(NSNumber *object) {
NSArray *objects = @[@(-2), @(4)];
BOOL some = [objects some:^BOOL(NSNumber *object) {
return object.integerValue < 0;
}];
XCTAssert(some == YES);
}

- (void)testSomeInvalid {
NSArray *test = @[@(2), @(4)];
BOOL some = [test some:^BOOL(NSNumber *object) {
NSArray *objects = @[@(2), @(4)];
BOOL some = [objects some:^BOOL(NSNumber *object) {
return object.integerValue < 0;
}];
XCTAssert(some == NO);
}


- (void)testSomeWhenEmpty {
NSArray *test = @[];
BOOL some = [test some:^BOOL(NSNumber *object) {
NSArray *objects = @[];
BOOL some = [objects some:^BOOL(NSNumber *object) {
return object.integerValue < 0;
}];
XCTAssert(some == NO);
}

- (void)testPluck {
NSArray *testObjects = @[@{@"id": @(1)}, @{@"id": @(2)}];
NSArray *plucked = [testObjects pluck:@"id"];
NSArray *objects = @[@{@"id": @(1)}, @{@"id": @(2)}];
NSArray *plucked = [objects pluck:@"id"];
XCTAssert(plucked.count == 2);
XCTAssert([plucked containsObject:@(1)]);
XCTAssert([plucked containsObject:@(2)]);
}

- (void)testMax {
NSArray *testObjects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *maxValue = [testObjects max:^NSInteger(id val) {
NSArray *objects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *maxValue = [objects max:^NSInteger(id val) {
NSDictionary *dict = (NSDictionary *)val;
NSNumber *dictVal = (NSNumber *)[dict objectForKey:@"id"];
return dictVal.integerValue;
Expand All @@ -143,16 +143,16 @@ - (void)testMax {
}

- (void)testMaxEmpty {
NSArray *testObjects = @[];
id maxValue = [testObjects max:^NSInteger(id val) {
NSArray *objects = @[];
id maxValue = [objects max:^NSInteger(id val) {
return -1;
}];
XCTAssert(maxValue == nil);
}

- (void)testMin {
NSArray *testObjects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *minValue = [testObjects min:^NSInteger(id val) {
NSArray *objects = @[@{@"id": @(10)}, @{@"id": @(20)}];
NSDictionary *minValue = [objects min:^NSInteger(id val) {
NSDictionary *dict = (NSDictionary *)val;
NSNumber *dictVal = (NSNumber *)[dict objectForKey:@"id"];
return dictVal.integerValue;
Expand All @@ -162,16 +162,16 @@ - (void)testMin {
}

- (void)testMinEmpty {
NSArray *testObjects = @[];
id minValue = [testObjects min:^NSInteger(id val) {
NSArray *objects = @[];
id minValue = [objects min:^NSInteger(id val) {
return -1;
}];
XCTAssert(minValue == nil);
}

- (void)testGroupBy {
NSArray *testObjects = @[@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}, @{@"token": @"test-1"}];
NSDictionary *groupedObjects = [testObjects groupBy:^id(NSDictionary *val) {
NSArray *objects = @[@{@"token": @"ryan-1"}, @{@"token": @"ryan-2"}, @{@"token": @"test-1"}];
NSDictionary *groupedObjects = [objects groupBy:^id(NSDictionary *val) {
NSString *token = [val objectForKey:@"token"];
return [token substringToIndex:4];
}];
Expand All @@ -183,8 +183,8 @@ - (void)testGroupBy {
}

- (void)testIndexBy {
NSArray *testObjects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"3"}];
NSDictionary *indexedObjects = [testObjects indexBy:^id(NSDictionary *val) {
NSArray *objects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"3"}];
NSDictionary *indexedObjects = [objects indexBy:^id(NSDictionary *val) {
return [val objectForKey:@"token"];
}];
XCTAssertNotNil(indexedObjects);
Expand All @@ -197,15 +197,15 @@ - (void)testIndexBy {
}

- (void)testIndexByWithDuplicateKey {
NSArray *testObjects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"1"}];
XCTAssertThrows([testObjects indexBy:^id(NSDictionary *val) {
NSArray *objects = @[@{@"token": @"1"}, @{@"token": @"2"}, @{@"token": @"1"}];
XCTAssertThrows([objects indexBy:^id(NSDictionary *val) {
return [val objectForKey:@"token"];
}]);
}

- (void)testCountBy {
NSArray *testObjects = @[@(1), @(2), @(3)];
NSDictionary *countedObjects = [testObjects countBy:^id(NSNumber *val) {
NSArray *objects = @[@(1), @(2), @(3)];
NSDictionary *countedObjects = [objects countBy:^id(NSNumber *val) {
return val.integerValue % 2 == 0 ? @"even": @"odd";
}];
XCTAssertNotNil(countedObjects);
Expand All @@ -218,8 +218,8 @@ - (void)testCountBy {
}

- (void)testPartitionSuccessAndFail {
NSArray *test = @[@(1), @(2), @(3)];
NSArray *result = [test partition:^BOOL(NSNumber *object) {
NSArray *objects = @[@(1), @(2), @(3)];
NSArray *result = [objects partition:^BOOL(NSNumber *object) {
return object.integerValue % 2 == 0;
}];
XCTAssertNotNil(result);
Expand All @@ -231,8 +231,8 @@ - (void)testPartitionSuccessAndFail {
}

- (void)testPartitionOnlySuccess {
NSArray *test = @[@(2), @(4), @(6)];
NSArray *result = [test partition:^BOOL(NSNumber *object) {
NSArray *objects = @[@(2), @(4), @(6)];
NSArray *result = [objects partition:^BOOL(NSNumber *object) {
return object.integerValue % 2 == 0;
}];
XCTAssertNotNil(result);
Expand All @@ -244,8 +244,8 @@ - (void)testPartitionOnlySuccess {
}

- (void)testPartitionOnlyFail {
NSArray *test = @[@(1), @(3), @(5)];
NSArray *result = [test partition:^BOOL(NSNumber *object) {
NSArray *objects = @[@(1), @(3), @(5)];
NSArray *result = [objects partition:^BOOL(NSNumber *object) {
return object.integerValue % 2 == 0;
}];
XCTAssertNotNil(result);
Expand Down
4 changes: 2 additions & 2 deletions NSUnderscoreTests/NSUnderscoreSetTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,9 @@ - (void)testMap {
}];
XCTAssert(multipliedArray.count == 2);
NSNumber *modifiedValue = multipliedArray[0];
XCTAssert(modifiedValue.integerValue == 4);
XCTAssert(modifiedValue.integerValue == 4 || modifiedValue.integerValue == 6);
modifiedValue = multipliedArray[1];
XCTAssert(modifiedValue.integerValue == 6);
XCTAssert(modifiedValue.integerValue == 4 || modifiedValue.integerValue == 6);
}

- (void)testReduce {
Expand Down
Loading

0 comments on commit 6555085

Please sign in to comment.