aboutsummaryrefslogtreecommitdiff
path: root/Foundation/GTMNSScanner+UnsignedTest.m
blob: aab92f356cd8ae69a229e267730aee2bd119032a (plain)
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