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
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
108
109
110
111
112
113
114
115
116
|
//
// GTMNSScanner+UnsignedTest.m
//
// Copyright 2010 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy
// of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
//
#import "GTMSenTestCase.h"
#import "GTMNSScanner+Unsigned.h"
@interface GTMNSScanner_UnsignedTest : GTMTestCase
@end
@implementation GTMNSScanner_UnsignedTest
#define TEST_BLOCK(A_MAX_VALUE) \
{ @"-1", 0, NO, 0 }, \
{ @"- 1", 0, NO, 0 }, \
{ @" - 1", 0, NO, 0 }, \
{ @"+ 1", 1, NO, 0 }, \
{ @" + 1", 1, NO, 0 }, \
{ @"0", 0, YES, 1 }, \
{ @"a", 0, NO, 0 }, \
{ @" ", 0, NO, 0 }, \
{ @"-1a", 0, NO, 0 }, \
{ @"a1", 0, NO, 0 }, \
{ @"1 ", 1, YES, 1 }, \
{ @"2 1 ", 2, YES, 1 }, \
{ @" 2 1 ", 2, YES, 2 }, \
{ @"99999999999999999999999999999999999", A_MAX_VALUE, YES, 35 }
- (void)testScanUnsignedInt {
struct {
NSString *string;
unsigned int val;
BOOL goodScan;
NSUInteger location;
} testStruct[] = {
TEST_BLOCK(UINT_MAX),
};
for (size_t i = 0; i < sizeof(testStruct) / sizeof(testStruct[0]); ++i) {
NSScanner *scanner = [NSScanner scannerWithString:testStruct[i].string];
STAssertNotNil(scanner, nil);
unsigned int value;
BOOL isGood = [scanner gtm_scanUnsignedInt:&value];
STAssertEquals((int)isGood, (int)testStruct[i].goodScan,
@"%@", testStruct[i].string);
if (isGood && testStruct[i].goodScan) {
STAssertEquals(value, testStruct[i].val, @"%@", testStruct[i].string);
}
STAssertEquals(testStruct[i].location, [scanner scanLocation],
@"%@", testStruct[i].string);
}
}
- (void)testScanUInteger {
struct {
NSString *string;
NSUInteger val;
BOOL goodScan;
NSUInteger location;
} testStruct[] = {
TEST_BLOCK(NSUIntegerMax),
};
for (size_t i = 0; i < sizeof(testStruct) / sizeof(testStruct[0]); ++i) {
NSScanner *scanner = [NSScanner scannerWithString:testStruct[i].string];
STAssertNotNil(scanner, nil);
NSUInteger value;
BOOL isGood = [scanner gtm_scanUInteger:&value];
STAssertEquals((int)isGood, (int)testStruct[i].goodScan,
@"%@", testStruct[i].string);
if (isGood && testStruct[i].goodScan) {
STAssertEquals(value, testStruct[i].val, @"%@", testStruct[i].string);
}
STAssertEquals(testStruct[i].location, [scanner scanLocation],
@"%@", testStruct[i].string);
}
}
- (void)testScanUnsignedLongLong {
struct {
NSString *string;
unsigned long long val;
BOOL goodScan;
NSUInteger location;
} testStruct[] = {
TEST_BLOCK(ULLONG_MAX),
{ @"4294967296", ((unsigned long long)UINT_MAX) + 1, YES, 10 }
};
for (size_t i = 0; i < sizeof(testStruct) / sizeof(testStruct[0]); ++i) {
NSScanner *scanner = [NSScanner scannerWithString:testStruct[i].string];
STAssertNotNil(scanner, nil);
unsigned long long value;
BOOL isGood = [scanner gtm_scanUnsignedLongLong:&value];
STAssertEquals((int)isGood, (int)testStruct[i].goodScan,
@"%@", testStruct[i].string);
if (isGood && testStruct[i].goodScan) {
STAssertEquals(value, testStruct[i].val, @"%@", testStruct[i].string);
}
STAssertEquals(testStruct[i].location, [scanner scanLocation],
@"%@", testStruct[i].string);
}
}
@end
|