1
#import <Foundation/Foundation.h>
2
#import "OOPriorityQueue.h"
6
#define DumpQueueState(queue) NSLog(@"%@", [queue debugDescription])
8
#define DumpQueueState(queue) do {} while (0)
13
@interface OOPriorityQueue (DebugGraphViz)
14
- (void) writeGraphVizToPath:(NSString *)path;
19
static void PutNumbersInQueue(unsigned count, OOPriorityQueue *queue);
20
static void PutStringsInQueue(OOPriorityQueue *queue);
21
static void DumpQueue(OOPriorityQueue *queue);
22
static void TestEquality(void);
25
int main (int argc, const char * argv[])
27
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
28
OOPriorityQueue *queue = nil;
32
queue = [[OOPriorityQueue alloc] init];
34
for (i = 0; i != 25; ++i)
36
NSLog(@"%u numbers:", i);
37
PutNumbersInQueue(i, queue);
39
[queue writeGraphVizToPath:[NSString stringWithFormat:@"pqtest_int_%u.dot", i]];
45
PutStringsInQueue(queue);
47
[queue writeGraphVizToPath:@"pqtest_string.dot"];
58
static void DumpQueue(OOPriorityQueue *queue)
63
while ((value = [queue nextObject]))
65
DumpQueueState(queue);
69
NSArray *values = nil;
70
NSArray *resorted = nil;
72
values = [queue sortedObjects];
75
resorted = [values sortedArrayUsingSelector:@selector(compare:)];
76
if (![values isEqual:resorted])
78
NSLog(@"FAILED - out of order. Correct order is: %@", resorted);
84
static void PutNumbersInQueue(unsigned count, OOPriorityQueue *queue)
88
[queue addObject:[NSNumber numberWithLong:random() % 100]];
89
DumpQueueState(queue);
94
static void PutStringsInQueue(OOPriorityQueue *queue)
96
NSArray *array = [NSArray arrayWithObjects: @"dog", @"cat", @"apple", @"zebra", @"spanner", @"cat", nil];
97
[queue addObjects:array];
98
DumpQueueState(queue);
102
static void TestEquality(void)
106
// Note: permuations of the same objects.
107
NSArray *array1 = [NSArray arrayWithObjects: @"dog", @"cat", @"apple", @"zebra", @"spanner", @"cat", nil];
108
NSArray *array2 = [NSArray arrayWithObjects: @"apple", @"cat", @"dog", @"zebra", @"cat", @"spanner", nil];
109
OOPriorityQueue *q1 = [[OOPriorityQueue alloc] init];
110
OOPriorityQueue *q2 = [[OOPriorityQueue alloc] init];
112
[q1 addObjects:array1];
113
[q2 addObjects:array2];
114
if (![q1 isEqual:q2]) OK = NO;
116
[q2 addObject:@"snake"];
117
if ([q1 isEqual:q2]) OK = NO;
119
[q2 removeObject:@"snake"];
120
if (![q1 isEqual:q2]) OK = NO;
122
NSLog(@"Equality test %@", OK ? @"passed" : @"FAILED");