forked from wader/objcheck
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexample.m
78 lines (52 loc) · 1.74 KB
/
example.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#import "example.h"
#import "ObjCheck.h"
#import <Foundation/Foundation.h>
@implementation NSString (reverse)
// From Mac Developer Tips
// http://macdevelopertips.com/objective-c/objective-c-categories.html
- (NSString *) reverse {
NSString *result;
int len = [self length];
result = [NSMutableString stringWithCapacity: len];
while (len > 0) {
result = [result stringByAppendingString: [NSString stringWithFormat: @"%c", [self characterAtIndex: --len]]];
}
return result;
}
@end
@implementation Example
+ (NSNumber *) isEven: (NSNumber *) i {
BOOL b = [i intValue] % 2 == 0;
return [NSNumber numberWithBool: b];
}
+ (NSNumber *) genEven {
int i = [(NSNumber*)[ObjCheck genNum] intValue];
if(i % 2 != 0) {
i++;
}
return [NSNumber numberWithInt: i];
}
+ (NSNumber *) reversible: (NSString *) s {
NSString* r = [s reverse];
NSString* s2 = [r reverse];
BOOL b = [s isEqualToString: [[s reverse] reverse]];
return [NSNumber numberWithBool: b];
}
@end
int main(int argc, char **argv) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSMutableArray* gs = [NSMutableArray array];
[gs addObject: ^() { return [ObjCheck genNum]; }];
// Are all integers even?
[ObjCheck forAll: [Example class] withProperty: @selector(isEven:) withGenerators: gs];
NSMutableArray* gs2 = [NSMutableArray array];
[gs2 addObject: ^() { return [Example genEven]; }];
// Are all even integers even?
[ObjCheck forAll: [Example class] withProperty: @selector(isEven:) withGenerators: gs2];
NSMutableArray* gs3 = [NSMutableArray array];
[gs3 addObject: ^() { return [ObjCheck genString]; }];
// Are all strings reversible?
[ObjCheck forAll: [Example class] withProperty: @selector(reversible:) withGenerators: gs3];
[pool drain];
return 0;
}