File: basic10_4.m

package info (click to toggle)
gnustep-base 1.31.1-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 26,580 kB
  • sloc: objc: 239,446; ansic: 36,519; cpp: 122; sh: 112; makefile: 100; xml: 32
file content (186 lines) | stat: -rw-r--r-- 6,556 bytes parent folder | download | duplicates (2)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#import <Foundation/Foundation.h>
#import "Testing.h"
#import "ObjectTesting.h"

#if	defined(GS_USE_ICU)
#define	NSLOCALE_SUPPORTED	GS_USE_ICU
#else
#define	NSLOCALE_SUPPORTED	1 /* Assume Apple support */
#endif

int main()
{
  NSNumberFormatter *fmt;
  NSNumber *num;
  NSString *str;

  START_SET("NSNumberFormatter")

    PASS(NSNumberFormatterBehavior10_4
      == [NSNumberFormatter defaultFormatterBehavior],
     "default behavior is NSNumberFormatterBehavior10_4")

    [NSNumberFormatter
      setDefaultFormatterBehavior: NSNumberFormatterBehavior10_0];
    PASS(NSNumberFormatterBehavior10_0
      == [NSNumberFormatter defaultFormatterBehavior],
     "default behavior can be changed to NSNumberFormatterBehavior10_0")

    [NSNumberFormatter
      setDefaultFormatterBehavior: NSNumberFormatterBehaviorDefault];
    PASS(NSNumberFormatterBehavior10_4
      == [NSNumberFormatter defaultFormatterBehavior],
     "NSNumberFormatterBehaviorDefault gives NSNumberFormatterBehavior10_4")

    [NSNumberFormatter
      setDefaultFormatterBehavior: NSNumberFormatterBehavior10_0];
    [NSNumberFormatter setDefaultFormatterBehavior: 1234];
    PASS(1234 == [NSNumberFormatter defaultFormatterBehavior],
     "unknown behavior is accepted")

    [NSNumberFormatter
      setDefaultFormatterBehavior: NSNumberFormatterBehavior10_4];
    PASS(NSNumberFormatterBehavior10_4
      == [NSNumberFormatter defaultFormatterBehavior],
     "default behavior can be changed to NSNumberFormatterBehavior10_4")

    fmt = [[[NSNumberFormatter alloc] init] autorelease];

    PASS(NSNumberFormatterBehavior10_4 == [fmt formatterBehavior],
     "a new formatter gets the current default behavior")
    [fmt setFormatterBehavior: NSNumberFormatterBehaviorDefault];
    PASS(NSNumberFormatterBehaviorDefault == [fmt formatterBehavior],
     "a new formatter can have the default behavior set")

    /* It is not guaranteed by ICU that UNUM_NAN_SYMBOL is "NaN".
     * On Windows, NaN has a negative signum and returns "-NaN".
     */
    testHopeful = YES;
    str = [fmt stringFromNumber: [NSDecimalNumber notANumber]];
    PASS_EQUAL(str, @"NaN", "notANumber special case")
    testHopeful = NO;

    START_SET("NSLocale")
      NSLocale  *sys;
      NSLocale  *en;
      const unichar uspc[1] = {0x00a0};
      NSString *spc = [NSString stringWithCharacters: uspc length: 1];
      if (!NSLOCALE_SUPPORTED)
        SKIP("NSLocale not supported\nThe ICU library was not available when GNUstep-base was built")
      
      sys = [NSLocale systemLocale];
      [fmt setLocale: sys];

      PASS([fmt getObjectValue: &num forString: @"0.00" errorDescription: 0]
        && num != nil, "formatting suceeded")
      if (testPassed)
        {
          PASS(NO == [num isEqual: [NSDecimalNumber notANumber]],
            "is not equal to NaN")
          PASS(YES == [num isEqual: [NSDecimalNumber zero]],
            "is equal to zero")
        }
      
      num = [[[NSNumber alloc] initWithFloat: 1234.567] autorelease];

      str = [fmt stringFromNumber: num];
      PASS_EQUAL(str, @"1235", "default 10.4 format same as Cocoa")

      en = [[[NSLocale alloc] initWithLocaleIdentifier: @"en"] autorelease];
      PASS_EQUAL([en localeIdentifier], @"en", "have locale 'en'");

      [fmt setLocale: en];

      [fmt setPaddingCharacter: @"+"];
      PASS_EQUAL([fmt paddingCharacter], @"+", "padding character se to '+'")

      [fmt setPaddingCharacter: @"*"]; // Subsequent tests use '*'

      [fmt setMaximumFractionDigits: 2];
      str = [fmt stringFromNumber: num];

      PASS_EQUAL(str, @"1234.57", "round up for fractional part >0.5")

      num = [[[NSNumber alloc] initWithFloat: 1234.432] autorelease];
      str = [fmt stringFromNumber: num];

      PASS_EQUAL(str, @"1234.43", "round down for fractional part <0.5")
      
      num = [[[NSNumber alloc] initWithFloat: -1234.43] autorelease];
      [fmt setMaximumFractionDigits: 1];
      [fmt setMinusSign: @"_"];
      PASS_EQUAL([fmt stringFromNumber: num], @"_1234.4",
        "minus sign assigned correctly");
      
      [fmt setPercentSymbol: @"##"];
      
      [fmt setNumberStyle: NSNumberFormatterPercentStyle];
      testHopeful = YES;
      PASS_EQUAL([fmt stringFromNumber: num], @"_123,443##",
        "Negative percentage correct");
      testHopeful = NO;
      
      
      num = [[[NSNumber alloc] initWithFloat: 1234.432] autorelease];
      
      [fmt setNumberStyle: NSNumberFormatterNoStyle];
      [fmt setMaximumFractionDigits: 0];
      [fmt setFormatWidth: 6];
      
      str = [fmt stringFromNumber: num];
      PASS([str isEqual: @"**1234"] || [str isEqual: @"  1234"],
        "format width set correctly");
      
      [fmt setPositivePrefix: @"+"];
      str = [fmt stringFromNumber: num];
      PASS([str isEqual: @"*+1234"] || [str isEqual: @" +1234"],
        "positive prefix set correctly");
      
      [fmt setPaddingCharacter: @"0"];
      str = [fmt stringFromNumber: num];
      PASS_EQUAL(str, @"0+1234", "default padding position is before prefix");
      
      [fmt setPaddingPosition: NSNumberFormatterPadAfterPrefix];
      str = [fmt stringFromNumber: num];
    
      PASS_EQUAL(str, @"+01234", "numeric and space padding OK")

      num = [[[NSNumber alloc] initWithFloat: 1234.56] autorelease];
      [fmt setNumberStyle: NSNumberFormatterCurrencyStyle];
      [fmt setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"pt_BR"]];
      
      testHopeful = YES;
      PASS_EQUAL([fmt stringFromNumber: num], @"+1.235",
        "currency style does not include currency string");
      testHopeful = NO;
      
      [fmt setPositivePrefix: @"+"];
      PASS_EQUAL([fmt stringFromNumber: num], @"+1.235",
        "positive prefix is set correctly for currency style");
      
      [fmt setPositiveSuffix: @"c"];
      PASS_EQUAL([fmt stringFromNumber: num], @"+1.235c",
        "prefix and suffix used properly");

      num = [[[NSNumber alloc] initWithFloat: -1234.56] autorelease];
      str = [fmt stringFromNumber: num];
      PASS(([str isEqual: @"(R$1.235)"] || [str isEqual: @"_R$1.235"]
        || [str isEqual: [NSString stringWithFormat: @"_R$%@%@",
        spc, @"1.235"]]),
        "negativeFormat used for -ve number");

      [fmt setNumberStyle: NSNumberFormatterNoStyle];
      [fmt setMinusSign: @"_"];
      
      testHopeful = YES;
      PASS_EQUAL([fmt stringFromNumber: num], @"_01235",
	"format string of length 1")
      testHopeful = NO;

    END_SET("NSLocale")

  END_SET("NSNumberFormatter")

  return 0;
}