ObjFW  Diff

Differences From Artifact [cbaf41131b]:

To Artifact [2ac90291b5]:


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
79

80
81
82
83
84
85
86





87
88
89
90
91
92
93
94
95
96
97












98
99
100
101




102
103


104
105

106
107
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











79
80
81
82
83
84
85
86
87
88
89
90




91
92
93
94


95
96
97

98
99
100







-
+
+





-
+
+

-
+


-
+






-
-
+
+

-
-
+
-
-
-
-
-
+

-
-
-
-
-
-
+
+
+
+
+
-
-
+
-

-
-
-
-
-
-
+
+
+
+
+
+
+

-
-
-
-
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
+

-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+

-
+


 * Public License, either version 2 or 3, which can be found in the file
 * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
 * file.
 */

#include "config.h"

#import "TestsAppDelegate.h"
#import "ObjFW.h"
#import "ObjFWTest.h"

#import "OFCharacterSet.h"
#import "OFBitSetCharacterSet.h"
#import "OFRangeCharacterSet.h"

static OFString *module;
@interface OFCharacterSetTests: OTTestCase
@end

@interface SimpleCharacterSet: OFCharacterSet
@interface CustomCharacterSet: OFCharacterSet
@end

@implementation SimpleCharacterSet
@implementation CustomCharacterSet
- (bool)characterIsMember: (OFUnichar)character
{
	return (character % 2 == 0);
}
@end

@implementation TestsAppDelegate (OFCharacterSetTests)
- (void)characterSetTests
@implementation OFCharacterSetTests
- (void)testCustomCharacterSet
{
	void *pool = objc_autoreleasePoolPush();
	OFCharacterSet *characterSet, *invertedCharacterSet;
	OFCharacterSet *characterSet =
	bool ok;

	module = @"OFCharacterSet";

	characterSet = [[[SimpleCharacterSet alloc] init] autorelease];
	    [[[CustomCharacterSet alloc] init] autorelease];

	ok = true;
	for (OFUnichar c = 0; c < 65536; c++) {
		if (c % 2 == 0) {
			if (![characterSet characterIsMember: c])
				ok = false;
		} else if ([characterSet characterIsMember: c])
	for (OFUnichar c = 0; c < 65536; c++)
		if (c % 2 == 0)
			OTAssertTrue([characterSet characterIsMember: c]);
		else
			OTAssertFalse([characterSet characterIsMember: c]);
			ok = false;
	}
}
	TEST(@"-[characterIsMember:]", ok);

	module = @"OFBitSetCharacterSet";

	TEST(@"+[characterSetWithCharactersInString:]",
	    (characterSet = [OFCharacterSet characterSetWithCharactersInString:
	    @"0123456789"]) &&
	    [characterSet isKindOfClass: [OFBitSetCharacterSet class]])
- (void)testBitSetCharacterSet
{
	OFCharacterSet *characterSet =
	    [OFCharacterSet characterSetWithCharactersInString: @"0123456789"];

	OTAssertTrue(
	    [characterSet isKindOfClass: [OFBitSetCharacterSet class]]);

	ok = true;
	for (OFUnichar c = 0; c < 65536; c++) {
		if (c >= '0' && c <= '9') {
			if (![characterSet characterIsMember: c])
	for (OFUnichar c = 0; c < 65536; c++)
		if (c >= '0' && c <= '9')
			OTAssertTrue([characterSet characterIsMember: c]);
				ok = false;
		} else if ([characterSet characterIsMember: c])
			ok = false;
	}
		else if ([characterSet characterIsMember: c])
			OTAssertFalse([characterSet characterIsMember: c]);
}

- (void)testRangeCharacterSet
{
	OFCharacterSet *characterSet =
	    [OFCharacterSet characterSetWithRange: OFMakeRange('0', 10)];

	TEST(@"-[characterIsMember:]", ok);

	OTAssertTrue(
	module = @"OFRangeCharacterSet";

	TEST(@"+[characterSetWithRange:]",
	    (characterSet = [OFCharacterSet
	    characterSetWithRange: OFMakeRange('0', 10)]) &&
	    [characterSet isKindOfClass: [OFRangeCharacterSet class]])
	    [characterSet isKindOfClass: [OFRangeCharacterSet class]]);

	ok = true;
	for (OFUnichar c = 0; c < 65536; c++) {
		if (c >= '0' && c <= '9') {
			if (![characterSet characterIsMember: c])
				ok = false;
		} else if ([characterSet characterIsMember: c])
	for (OFUnichar c = 0; c < 65536; c++)
		if (c >= '0' && c <= '9')
			OTAssertTrue([characterSet characterIsMember: c]);
		else
			OTAssertFalse([characterSet characterIsMember: c]);
			ok = false;
	}
	TEST(@"-[characterIsMember:]", ok);

	ok = true;
	invertedCharacterSet = characterSet.invertedSet;
	for (OFUnichar c = 0; c < 65536; c++) {
		if (c >= '0' && c <= '9') {
			if ([invertedCharacterSet characterIsMember: c])
				ok = false;
		} else if (![invertedCharacterSet characterIsMember: c])
}

- (void)testInvertedCharacterSet
{
	OFCharacterSet *characterSet = [[OFCharacterSet
	    characterSetWithRange: OFMakeRange('0', 10)] invertedSet];

	for (OFUnichar c = 0; c < 65536; c++)
		if (c >= '0' && c <= '9')
			OTAssertFalse([characterSet characterIsMember: c]);
		else
			OTAssertTrue([characterSet characterIsMember: c]);
			ok = false;
	}
	TEST(@"-[invertedSet]", ok);

}

- (void)testInvertingInvertedSetReturnsOriginal
{
	TEST(@"Inverting -[invertedSet] returns original set",
	    invertedCharacterSet.invertedSet == characterSet)
	OFCharacterSet *characterSet =
	    [OFCharacterSet characterSetWithRange: OFMakeRange('0', 10)];

	objc_autoreleasePoolPop(pool);
	OTAssertEqual(characterSet, characterSet.invertedSet.invertedSet);
}
@end