Mercurial > babel > old > babel-test
annotate babel/tests/numbers.py @ 530:85e1beadacb0
Update the copyright line.
author | jruigrok |
---|---|
date | Sat, 05 Mar 2011 15:22:28 +0000 |
parents | 68e45b6ac5bb |
children |
rev | line source |
---|---|
1 | 1 # -*- coding: utf-8 -*- |
2 # | |
530 | 3 # Copyright (C) 2007-2011 Edgewall Software |
1 | 4 # All rights reserved. |
5 # | |
6 # This software is licensed as described in the file COPYING, which | |
7 # you should have received as part of this distribution. The terms | |
8 # are also available at http://babel.edgewall.org/wiki/License. | |
9 # | |
10 # This software consists of voluntary contributions made by many | |
11 # individuals. For the exact contribution history, see the revision | |
12 # history and logs, available at http://babel.edgewall.org/log/. | |
13 | |
218 | 14 try: |
15 from decimal import Decimal | |
16 have_decimal = True | |
17 except ImportError: | |
18 have_decimal = False | |
19 | |
1 | 20 import doctest |
21 import unittest | |
22 | |
23 from babel import numbers | |
24 | |
50 | 25 |
26 class FormatDecimalTestCase(unittest.TestCase): | |
27 | |
218 | 28 def test_patterns(self): |
29 self.assertEqual(numbers.format_decimal(12345, '##0', | |
30 locale='en_US'), '12345') | |
31 self.assertEqual(numbers.format_decimal(6.5, '0.00', locale='sv'), | |
32 '6,50') | |
33 self.assertEqual(numbers.format_decimal(10.0**20, | |
34 '#.00', locale='en_US'), | |
35 '100000000000000000000.00') | |
36 | |
50 | 37 def test_subpatterns(self): |
38 self.assertEqual(numbers.format_decimal(-12345, '#,##0.##;-#', | |
39 locale='en_US'), '-12,345') | |
40 self.assertEqual(numbers.format_decimal(-12345, '#,##0.##;(#)', | |
41 locale='en_US'), '(12,345)') | |
42 | |
43 def test_default_rounding(self): | |
62
84d400066b71
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
50
diff
changeset
|
44 """ |
84d400066b71
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
50
diff
changeset
|
45 Testing Round-Half-Even (Banker's rounding) |
50 | 46 |
47 A '5' is rounded to the closest 'even' number | |
48 """ | |
49 self.assertEqual(numbers.format_decimal(5.5, '0', locale='sv'), '6') | |
50 self.assertEqual(numbers.format_decimal(6.5, '0', locale='sv'), '6') | |
218 | 51 self.assertEqual(numbers.format_decimal(6.5, '0', locale='sv'), '6') |
50 | 52 self.assertEqual(numbers.format_decimal(1.2325, locale='sv'), '1,232') |
53 self.assertEqual(numbers.format_decimal(1.2335, locale='sv'), '1,234') | |
54 | |
211
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
55 def test_significant_digits(self): |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
56 """Test significant digits patterns""" |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
57 self.assertEqual(numbers.format_decimal(123004, '@@',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
58 '120000') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
59 self.assertEqual(numbers.format_decimal(1.12, '@', locale='sv'), '1') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
60 self.assertEqual(numbers.format_decimal(1.1, '@@', locale='sv'), '1,1') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
61 self.assertEqual(numbers.format_decimal(1.1, '@@@@@##', locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
62 '1,1000') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
63 self.assertEqual(numbers.format_decimal(0.0001, '@@@', locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
64 '0,000100') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
65 self.assertEqual(numbers.format_decimal(0.0001234, '@@@', locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
66 '0,000123') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
67 self.assertEqual(numbers.format_decimal(0.0001234, '@@@#',locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
68 '0,0001234') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
69 self.assertEqual(numbers.format_decimal(0.0001234, '@@@#',locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
70 '0,0001234') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
71 self.assertEqual(numbers.format_decimal(0.12345, '@@@',locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
72 '0,123') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
73 self.assertEqual(numbers.format_decimal(3.14159, '@@##',locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
74 '3,142') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
75 self.assertEqual(numbers.format_decimal(1.23004, '@@##',locale='sv'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
76 '1,23') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
77 self.assertEqual(numbers.format_decimal(1230.04, '@@,@@',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
78 '12,30') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
79 self.assertEqual(numbers.format_decimal(123.41, '@@##',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
80 '123.4') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
81 self.assertEqual(numbers.format_decimal(1, '@@',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
82 '1.0') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
83 self.assertEqual(numbers.format_decimal(0, '@',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
84 '0') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
85 self.assertEqual(numbers.format_decimal(0.1, '@',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
86 '0.1') |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
87 self.assertEqual(numbers.format_decimal(0.1, '@#',locale='en_US'), |
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
88 '0.1') |
243
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
89 self.assertEqual(numbers.format_decimal(0.1, '@@', locale='en_US'), |
211
1adcbeb4607b
Added support for siginificant digits in number patterns.
jonas
parents:
62
diff
changeset
|
90 '0.10') |
218 | 91 |
92 if have_decimal: | |
93 def test_decimals(self): | |
94 """Test significant digits patterns""" | |
95 self.assertEqual(numbers.format_decimal(Decimal('1.2345'), | |
96 '#.00', locale='en_US'), | |
97 '1.23') | |
98 self.assertEqual(numbers.format_decimal(Decimal('1.2345000'), | |
99 '#.00', locale='en_US'), | |
100 '1.23') | |
101 self.assertEqual(numbers.format_decimal(Decimal('1.2345000'), | |
102 '@@', locale='en_US'), | |
103 '1.2') | |
104 self.assertEqual(numbers.format_decimal(Decimal('12345678901234567890.12345'), | |
105 '#.00', locale='en_US'), | |
106 '12345678901234567890.12') | |
107 | |
243
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
108 def test_scientific_notation(self): |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
109 fmt = numbers.format_scientific(0.1, '#E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
110 self.assertEqual(fmt, '1E-1') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
111 fmt = numbers.format_scientific(0.01, '#E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
112 self.assertEqual(fmt, '1E-2') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
113 fmt = numbers.format_scientific(10, '#E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
114 self.assertEqual(fmt, '1E1') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
115 fmt = numbers.format_scientific(1234, '0.###E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
116 self.assertEqual(fmt, '1.234E3') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
117 fmt = numbers.format_scientific(1234, '0.#E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
118 self.assertEqual(fmt, '1.2E3') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
119 # Exponent grouping |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
120 fmt = numbers.format_scientific(12345, '##0.####E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
121 self.assertEqual(fmt, '12.345E3') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
122 # Minimum number of int digits |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
123 fmt = numbers.format_scientific(12345, '00.###E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
124 self.assertEqual(fmt, '12.345E3') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
125 fmt = numbers.format_scientific(-12345.6, '00.###E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
126 self.assertEqual(fmt, '-12.346E3') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
127 fmt = numbers.format_scientific(-0.01234, '00.###E0', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
128 self.assertEqual(fmt, '-12.34E-3') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
129 # Custom pattern suffic |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
130 fmt = numbers.format_scientific(123.45, '#.##E0 m/s', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
131 self.assertEqual(fmt, '1.23E2 m/s') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
132 # Exponent patterns |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
133 fmt = numbers.format_scientific(123.45, '#.##E00 m/s', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
134 self.assertEqual(fmt, '1.23E02 m/s') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
135 fmt = numbers.format_scientific(0.012345, '#.##E00 m/s', locale='en_US') |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
136 self.assertEqual(fmt, '1.23E-02 m/s') |
244
222ccdeef393
Added `Decimal` support to the scientific notation formatter and some code cleanup. This closes #52.
jonas
parents:
243
diff
changeset
|
137 if have_decimal: |
222ccdeef393
Added `Decimal` support to the scientific notation formatter and some code cleanup. This closes #52.
jonas
parents:
243
diff
changeset
|
138 fmt = numbers.format_scientific(Decimal('12345'), '#.##E+00 m/s', |
222ccdeef393
Added `Decimal` support to the scientific notation formatter and some code cleanup. This closes #52.
jonas
parents:
243
diff
changeset
|
139 locale='en_US') |
222ccdeef393
Added `Decimal` support to the scientific notation formatter and some code cleanup. This closes #52.
jonas
parents:
243
diff
changeset
|
140 self.assertEqual(fmt, '1.23E+04 m/s') |
357 | 141 # 0 (see ticket #99) |
142 fmt = numbers.format_scientific(0, '#E0', locale='en_US') | |
143 self.assertEqual(fmt, '0E0') | |
243
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
144 |
5e4b1fd6b348
Added initial support for scientific notation patterns.
jonas
parents:
218
diff
changeset
|
145 |
1 | 146 def suite(): |
147 suite = unittest.TestSuite() | |
148 suite.addTest(doctest.DocTestSuite(numbers)) | |
50 | 149 suite.addTest(unittest.makeSuite(FormatDecimalTestCase)) |
1 | 150 return suite |
151 | |
152 if __name__ == '__main__': | |
153 unittest.main(defaultTest='suite') |