mirror of https://github.com/oxen-io/session-ios
				
				
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			120 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Matlab
		
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Matlab
		
	
| 
											9 years ago
										 | //  Created by Russ Shanahan on 11/25/16. | ||
|  | //  Copyright © 2016 Open Whisper Systems. All rights reserved. | ||
|  | 
 | ||
|  | #import "Contact.h" | ||
|  | #import <XCTest/XCTest.h> | ||
|  | 
 | ||
|  | NS_ASSUME_NONNULL_BEGIN | ||
|  | 
 | ||
|  | @interface ContactSortingTest : XCTestCase | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | @implementation ContactSortingTest | ||
|  | 
 | ||
|  | - (void)setUp | ||
|  | { | ||
|  |     srandom((unsigned int)time(NULL)); | ||
|  | } | ||
|  | 
 | ||
|  | - (void)testSortingNamesByFirstLast | ||
|  | { | ||
|  |     NSComparator comparator = [Contact comparatorSortingNamesByFirstThenLast:YES]; | ||
|  |     NSArray<Contact *>*sortedContacts = [self.class contactArrayForNames:@[@[@"Adam", @"Smith"], | ||
|  |                                                                            @[@"Adam", @"West"], | ||
|  |                                                                            @[@"", @"Daisy"], | ||
|  |                                                                            @[@"Daisy", @"Chain"], | ||
|  |                                                                            @[@"Daisy", @"Duke"], | ||
|  |                                                                            @[@"James", @"Smith"], | ||
|  |                                                                            @[@"James", @"Van"], | ||
|  |                                                                            @[@"James", @"Van Der Beek"], | ||
|  |                                                                            @[@"Kevin", @"Smith"], | ||
|  |                                                                            @[@"Mae", @"West"], | ||
|  |                                                                            @[@"Mary", @"Oliver"], | ||
|  |                                                                            @[@"Mary Jo", @"Catlett"], | ||
|  |                                                                            ]]; | ||
|  |     NSUInteger numContacts = sortedContacts.count; | ||
|  |      | ||
|  |     for (NSUInteger i = 0; i < 20; i++) { | ||
|  |         NSArray *shuffledContacts = [self.class shuffleArray:sortedContacts]; | ||
|  |         NSArray *resortedContacts = [shuffledContacts sortedArrayUsingComparator:comparator]; | ||
|  |         for (NSUInteger j = 0; j < numContacts; j++) { | ||
|  |             Contact *a = sortedContacts[j]; | ||
|  |             Contact *b = resortedContacts[j]; | ||
|  |             BOOL correct = ([a.firstName isEqualToString:b.firstName] && [a.lastName isEqualToString:b.lastName]); | ||
|  |             if (!correct) { | ||
|  |                 XCTAssert(@"Contacts failed to sort names by first, last"); | ||
|  |                 break; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | - (void)testSortingNamesByLastFirst | ||
|  | { | ||
|  |     NSComparator comparator = [Contact comparatorSortingNamesByFirstThenLast:NO]; | ||
|  |     NSArray<Contact *>*sortedContacts = [self.class contactArrayForNames:@[@[@"Mary Jo", @"Catlett"], | ||
|  |                                                                            @[@"Daisy", @"Chain"], | ||
|  |                                                                            @[@"", @"Daisy"], | ||
|  |                                                                            @[@"Daisy", @"Duke"], | ||
|  |                                                                            @[@"Mary", @"Oliver"], | ||
|  |                                                                            @[@"Adam", @"Smith"], | ||
|  |                                                                            @[@"James", @"Smith"], | ||
|  |                                                                            @[@"Kevin", @"Smith"], | ||
|  |                                                                            @[@"James", @"Van"], | ||
|  |                                                                            @[@"James", @"Van Der Beek"], | ||
|  |                                                                            @[@"Adam", @"West"], | ||
|  |                                                                            @[@"Mae", @"West"], | ||
|  |                                                                            ]]; | ||
|  |     NSUInteger numContacts = sortedContacts.count; | ||
|  |      | ||
|  |     for (NSUInteger i = 0; i < 20; i++) { | ||
|  |         NSArray *shuffledContacts = [self.class shuffleArray:sortedContacts]; | ||
|  |         NSArray *resortedContacts = [shuffledContacts sortedArrayUsingComparator:comparator]; | ||
|  |         for (NSUInteger j = 0; j < numContacts; j++) { | ||
|  |             Contact *a = sortedContacts[j]; | ||
|  |             Contact *b = resortedContacts[j]; | ||
|  |             BOOL correct = ([a.firstName isEqualToString:b.firstName] && [a.lastName isEqualToString:b.lastName]); | ||
|  |             if (!correct) { | ||
|  |                 XCTAssert(@"Contacts failed to sort names by last, first"); | ||
|  |                 break; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | + (NSArray<Contact *> *)contactArrayForNames:(NSArray<NSArray<NSString *>*>*)namePairs | ||
|  | { | ||
|  | #pragma clang diagnostic push | ||
|  | #pragma clang diagnostic ignored "-Wdeprecated-declarations" | ||
|  |     ABRecordID fakeRecordId = 0; | ||
|  | #pragma clang diagnostic pop | ||
|  |     NSMutableArray<Contact *>*contacts = [[NSMutableArray alloc] initWithCapacity:namePairs.count]; | ||
|  |     for (NSArray<NSString *>*namePair in namePairs) { | ||
|  |         Contact *c = [[Contact alloc] initWithContactWithFirstName:namePair[0] | ||
|  |                                                        andLastName:namePair[1] | ||
|  |                                            andUserTextPhoneNumbers:@[] | ||
|  |                                                           andImage:nil | ||
|  |                                                       andContactID:fakeRecordId++]; | ||
|  |         [contacts addObject:c]; | ||
|  |     } | ||
|  |      | ||
|  |     return [contacts copy]; // Return an immutable for good hygene | ||
|  | } | ||
|  | 
 | ||
|  | + (NSArray*)shuffleArray:(NSArray *)array | ||
|  | { | ||
|  |     NSMutableArray *shuffled = [[NSMutableArray alloc] initWithArray:array]; | ||
|  |      | ||
|  |     for(NSUInteger i = [array count]; i > 1; i--) { | ||
|  |         NSUInteger j = arc4random_uniform((uint32_t)i); | ||
|  |         [shuffled exchangeObjectAtIndex:(i - 1) withObjectAtIndex:j]; | ||
|  |     } | ||
|  |      | ||
|  |     return [shuffled copy]; // Return an immutable for good hygene | ||
|  | } | ||
|  | 
 | ||
|  | @end | ||
|  | 
 | ||
|  | NS_ASSUME_NONNULL_END |