2011-02-16 08:21:17 +00:00
|
|
|
#import <Foundation/Foundation.h>
|
|
|
|
#import "Testing.h"
|
|
|
|
#import "ObjectTesting.h"
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
#if defined(GS_USE_ICU)
|
|
|
|
#define NSLOCALE_SUPPORTED GS_USE_ICU
|
|
|
|
#else
|
|
|
|
#define NSLOCALE_SUPPORTED 1 /* Assume Apple support */
|
|
|
|
#endif
|
|
|
|
|
2011-02-16 08:21:17 +00:00
|
|
|
int main()
|
|
|
|
{
|
|
|
|
NSNumberFormatter *fmt;
|
|
|
|
NSNumber *num;
|
|
|
|
NSString *str;
|
|
|
|
|
2011-02-24 16:26:01 +00:00
|
|
|
START_SET("NSNumberFormatter")
|
2011-02-19 06:15:34 +00:00
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
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];
|
2011-02-23 09:38:56 +00:00
|
|
|
[NSNumberFormatter setDefaultFormatterBehavior: 1234];
|
|
|
|
PASS(1234 == [NSNumberFormatter defaultFormatterBehavior],
|
|
|
|
"unknown behavior is accepted")
|
2011-02-22 12:59:52 +00:00
|
|
|
|
|
|
|
[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")
|
|
|
|
|
|
|
|
str = [fmt stringFromNumber: [NSDecimalNumber notANumber]];
|
|
|
|
PASS_EQUAL(str, @"NaN", "notANumber special case")
|
|
|
|
|
2011-02-24 16:26:01 +00:00
|
|
|
START_SET("NSLocale")
|
|
|
|
if (!NSLOCALE_SUPPORTED)
|
|
|
|
SKIP("NSLocale not supported\nThe ICU library was not available when GNUstep-base was built")
|
2011-03-14 23:17:32 +00:00
|
|
|
|
|
|
|
PASS([fmt getObjectValue: &num forString: @"0.00" errorDescription: nil]
|
|
|
|
&& 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")
|
|
|
|
}
|
|
|
|
|
2011-02-23 09:32:38 +00:00
|
|
|
num = [[[NSNumber alloc] initWithFloat: 1234.567] autorelease];
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
str = [fmt stringFromNumber: num];
|
|
|
|
PASS_EQUAL(str, @"1235", "default 10.4 format same as Cocoa")
|
|
|
|
|
2011-02-23 16:03:52 +00:00
|
|
|
[fmt setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"en"]];
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
[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")
|
2011-03-04 00:48:32 +00:00
|
|
|
|
|
|
|
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];
|
2011-03-04 20:10:42 +00:00
|
|
|
testHopeful = YES;
|
2011-03-04 09:24:06 +00:00
|
|
|
PASS_EQUAL([fmt stringFromNumber: num], @"_123,443##",
|
2011-03-04 00:48:32 +00:00
|
|
|
"Negative percentage correct");
|
2011-03-04 20:10:42 +00:00
|
|
|
testHopeful = NO;
|
2011-03-04 00:48:32 +00:00
|
|
|
|
|
|
|
|
|
|
|
num = [[[NSNumber alloc] initWithFloat: 1234.432] autorelease];
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
[fmt setNumberStyle: NSNumberFormatterNoStyle];
|
|
|
|
[fmt setMaximumFractionDigits: 0];
|
|
|
|
[fmt setFormatWidth: 6];
|
2011-02-25 21:41:03 +00:00
|
|
|
|
|
|
|
str = [fmt stringFromNumber: num];
|
|
|
|
PASS_EQUAL(str, @"**1234", "format width set correctly");
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
[fmt setPositivePrefix: @"+"];
|
2011-02-25 21:41:03 +00:00
|
|
|
str = [fmt stringFromNumber: num];
|
|
|
|
PASS_EQUAL(str, @"*+1234", "positive prefix set correctly");
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
[fmt setPaddingCharacter: @"0"];
|
2011-02-25 21:41:03 +00:00
|
|
|
str = [fmt stringFromNumber: num];
|
|
|
|
PASS_EQUAL(str, @"0+1234", "default padding position is before prefix");
|
|
|
|
|
|
|
|
[fmt setPaddingPosition: NSNumberFormatterPadAfterPrefix];
|
2011-02-22 12:59:52 +00:00
|
|
|
str = [fmt stringFromNumber: num];
|
|
|
|
|
2011-02-25 21:41:03 +00:00
|
|
|
PASS_EQUAL(str, @"+01234", "numeric and space padding OK")
|
2011-02-22 12:59:52 +00:00
|
|
|
|
|
|
|
num = [[[NSNumber alloc] initWithFloat: 1234.56] autorelease];
|
|
|
|
[fmt setNumberStyle: NSNumberFormatterCurrencyStyle];
|
|
|
|
[fmt setLocale: [[NSLocale alloc] initWithLocaleIdentifier: @"pt_BR"]];
|
2011-02-25 21:41:03 +00:00
|
|
|
|
2011-03-01 10:28:24 +00:00
|
|
|
testHopeful = YES;
|
|
|
|
PASS_EQUAL([fmt stringFromNumber: num], @"+1.235",
|
2011-02-25 21:41:03 +00:00
|
|
|
"currency style does not include currency string");
|
2011-03-01 10:28:24 +00:00
|
|
|
testHopeful = NO;
|
2011-02-25 21:41:03 +00:00
|
|
|
|
|
|
|
[fmt setPositivePrefix: @"+"];
|
2011-03-01 10:28:24 +00:00
|
|
|
PASS_EQUAL([fmt stringFromNumber: num], @"+1.235",
|
2011-02-25 21:41:03 +00:00
|
|
|
"positive prefix is set correctly for currency style");
|
|
|
|
|
2011-02-22 12:59:52 +00:00
|
|
|
[fmt setPositiveSuffix: @"c"];
|
2011-03-01 10:28:24 +00:00
|
|
|
PASS_EQUAL([fmt stringFromNumber: num], @"+1.235c",
|
2011-03-04 00:48:32 +00:00
|
|
|
"prefix and suffix used properly");
|
2011-02-22 12:59:52 +00:00
|
|
|
|
|
|
|
num = [[[NSNumber alloc] initWithFloat: -1234.56] autorelease];
|
2011-03-01 10:28:24 +00:00
|
|
|
PASS_EQUAL([fmt stringFromNumber: num], @"(R$1.235)",
|
2011-03-04 00:48:32 +00:00
|
|
|
"negativeFormat used for -ve number");
|
2011-02-22 12:59:52 +00:00
|
|
|
|
|
|
|
[fmt setNumberStyle: NSNumberFormatterNoStyle];
|
|
|
|
|
2011-03-01 10:28:24 +00:00
|
|
|
testHopeful = YES;
|
2011-03-04 09:24:06 +00:00
|
|
|
PASS_EQUAL([fmt stringFromNumber: num], @"_01235",
|
2011-03-01 10:28:24 +00:00
|
|
|
"format string of length 1")
|
|
|
|
testHopeful = NO;
|
2011-02-22 12:59:52 +00:00
|
|
|
|
2011-02-24 16:26:01 +00:00
|
|
|
END_SET("NSLocale")
|
2011-02-22 12:59:52 +00:00
|
|
|
|
2011-02-24 16:26:01 +00:00
|
|
|
END_SET("NSNumberFormatter")
|
2011-02-19 00:38:00 +00:00
|
|
|
|
2011-02-16 08:21:17 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|