CLDR-Number
view release on metacpan or search on metacpan
t/from-uts35.t view on Meta::CPAN
use utf8;
use strict;
use warnings;
use open qw( :encoding(UTF-8) :std );
use Test::More tests => 62;
use CLDR::Number;
my $cldr = CLDR::Number->new;
my ($decf, $perf, $scif, $curf);
# Tests adapted from examples in:
# UTS #35: Unicode LDML, Part 1: Core
# http://www.unicode.org/reports/tr35/tr35.html
TODO: {
local $TODO = 'Unicode locale extensions not currently retained';
# 3.7 Unicode BCP 47 Extension Data
$cldr->locale('th-u-foo-bar-nu-thai-ca-buddhist');
is $cldr->locale, 'th-u-bar-foo-ca-buddhist-nu-thai', 'sort attributes & keywords';
};
# Tests adapted from examples in:
# UTS #35: Unicode LDML, Part 3: Numbers
# http://www.unicode.org/reports/tr35/tr35-numbers.html
# 2.3 Number Symbols
$decf = $cldr->decimal_formatter(locale => 'en');
$decf->pattern('#,###'); is $decf->format(100_000_000), '100,000,000', 'group by 3';
$decf->pattern('#,####'); is $decf->format(1_0000_0000), '1,0000,0000', 'group by 4';
$decf->pattern('#,##,###'); is $decf->format(12_34_56_789), '12,34,56,789', 'primary group by 3, secondary group by 2';
$decf->pattern('###,###,####'); is $decf->format(100_000_0000), '100,000,0000', 'primary group by 4, secondary group by 3';
$decf->pattern('#,##,###,####'); is $decf->format(100_000_0000), '100,000,0000', 'ignore tertiary group';
$decf->pattern('##,#,###,####'); is $decf->format(100_000_0000), '100,000,0000', 'ignore tertiary group';
$perf = $cldr->percent_formatter(locale => 'en', permil => 1);
is $perf->format(1.23), '1,230â°', 'per mille multiplied by 1,000 before formatting';
SKIP: {
skip 'format_short NYI', 1;
# 2.4.1 Compact Number Formats
$decf = $cldr->decimal_formatter(locale => 'fr');
is $decf->format_short(12_345), '12Â K', 'short decimal format';
};
# 2.4.2 Currency Formats
$curf = $cldr->currency_formatter(locale => 'en', currency_code => 'USD');
$curf->pattern('¤#,##0.00'); is $curf->format(-3.27), '-$3.27', 'default negative currency';
$curf->pattern('¤#,##0.00;(¤#,##0.00)'); is $curf->format(-3.27), '($3.27)', 'custom negative currency';
# 2.5 Miscellaneous Patterns
$decf = $cldr->decimal_formatter(locale => 'en');
is $decf->at_least(99), '99+', 'at least 99';
is $decf->range(99, 103), '99â103', 'range from 99 to 103';
# 3.1 Number Patterns
$decf = $cldr->decimal_formatter(locale => 'fr');
$decf->pattern('#,##0.##'); is $decf->format(1_234.567), '1Â 234,57';
$decf->pattern('#,##0.###'); is $decf->format(1_234.567), '1Â 234,567';
$decf->pattern('###0.#####'); is $decf->format(1_234.567), '1234,567';
$decf->pattern('###0.0000#'); is $decf->format(1_234.567), '1234,5670';
$decf->pattern('00000.0000'); is $decf->format(1_234.567), '01234,5670';
$curf = $cldr->currency_formatter(locale => 'fr', pattern => '#,##0.00 ¤');
$curf->currency_code('EUR'); is $curf->format(1_234.567), '1 234,57 â¬';
$curf->currency_code('JPY'); is $curf->format(1_234.567), '1Â 235Â JPY';
# 3.2 Special Pattern Characters
$decf = $cldr->decimal_formatter(locale => 'en');
$decf->pattern("'#'#"); is $decf->format(123), '#123', 'quote special characters';
$decf->pattern("# o''clock"); is $decf->format(1), "1 o'clock", 'single quote itself';
# minimumGroupingDigits
$decf = $cldr->decimal_formatter(locale => 'pl');
is $decf->minimum_grouping_digits, 2, 'pl: default min group';
is $decf->primary_grouping_size, 3, 'pl: default primary_grouping_size';
is $decf->format(9_999), '9999', 'pl: under min group';
is $decf->format(10_000), '10Â 000', 'pl: at min group';
$decf = $cldr->decimal_formatter(locale => 'en');
is $decf->minimum_grouping_digits, 1, 'en: default min group';
is $decf->primary_grouping_size, 3, 'en: default primary_grouping_size';
is $decf->format(1_000), '1,000', 'en: at min group';
is $decf->format(10_000), '10,000', 'en: over min group';
$decf->minimum_grouping_digits(2);
is $decf->format(1_000), '1000', 'under custom min group';
is $decf->format(10_000), '10,000', 'at custom min group';
$decf->minimum_grouping_digits(1);
$decf->primary_grouping_size(4);
( run in 2.069 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )