Mercurial > babel > old > mirror
annotate babel/tests/numbers.py @ 245:d462423feeea
Added initial support for scientific notation patterns.
author | jonas |
---|---|
date | Sat, 11 Aug 2007 11:31:05 +0000 |
parents | ce3ad60145db |
children | f21b6e6a13a7 |
rev | line source |
---|---|
3 | 1 # -*- coding: utf-8 -*- |
2 # | |
14
29ef15a6fd75
* Removed pkg_resources/setuptools requirement from various places.
cmlenz
parents:
3
diff
changeset
|
3 # Copyright (C) 2007 Edgewall Software |
3 | 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 | |
220 | 14 try: |
15 from decimal import Decimal | |
16 have_decimal = True | |
17 except ImportError: | |
18 have_decimal = False | |
19 | |
3 | 20 import doctest |
21 import unittest | |
22 | |
23 from babel import numbers | |
24 | |
52 | 25 |
26 class FormatDecimalTestCase(unittest.TestCase): | |
27 | |
220 | 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 | |
52 | 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): | |
64
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
52
diff
changeset
|
44 """ |
7eb6fea17864
The order of extraction methods is now preserved (see #10).
cmlenz
parents:
52
diff
changeset
|
45 Testing Round-Half-Even (Banker's rounding) |
52 | 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') | |
220 | 51 self.assertEqual(numbers.format_decimal(6.5, '0', locale='sv'), '6') |
52 | 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 | |
213
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
55 def test_significant_digits(self): |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
56 """Test significant digits patterns""" |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
57 self.assertEqual(numbers.format_decimal(123004, '@@',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
58 '120000') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
59 self.assertEqual(numbers.format_decimal(1.12, '@', locale='sv'), '1') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
60 self.assertEqual(numbers.format_decimal(1.1, '@@', locale='sv'), '1,1') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
61 self.assertEqual(numbers.format_decimal(1.1, '@@@@@##', locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
62 '1,1000') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
63 self.assertEqual(numbers.format_decimal(0.0001, '@@@', locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
64 '0,000100') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
65 self.assertEqual(numbers.format_decimal(0.0001234, '@@@', locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
66 '0,000123') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
67 self.assertEqual(numbers.format_decimal(0.0001234, '@@@#',locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
68 '0,0001234') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
69 self.assertEqual(numbers.format_decimal(0.0001234, '@@@#',locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
70 '0,0001234') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
71 self.assertEqual(numbers.format_decimal(0.12345, '@@@',locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
72 '0,123') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
73 self.assertEqual(numbers.format_decimal(3.14159, '@@##',locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
74 '3,142') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
75 self.assertEqual(numbers.format_decimal(1.23004, '@@##',locale='sv'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
76 '1,23') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
77 self.assertEqual(numbers.format_decimal(1230.04, '@@,@@',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
78 '12,30') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
79 self.assertEqual(numbers.format_decimal(123.41, '@@##',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
80 '123.4') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
81 self.assertEqual(numbers.format_decimal(1, '@@',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
82 '1.0') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
83 self.assertEqual(numbers.format_decimal(0, '@',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
84 '0') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
85 self.assertEqual(numbers.format_decimal(0.1, '@',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
86 '0.1') |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
87 self.assertEqual(numbers.format_decimal(0.1, '@#',locale='en_US'), |
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
88 '0.1') |
245
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
89 self.assertEqual(numbers.format_decimal(0.1, '@@', locale='en_US'), |
213
b13f3bf4c208
Added support for siginificant digits in number patterns.
jonas
parents:
64
diff
changeset
|
90 '0.10') |
220 | 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 | |
245
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
108 def test_scientific_notation(self): |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
109 fmt = numbers.format_scientific(0.1, '#E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
110 self.assertEqual(fmt, '1E-1') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
111 fmt = numbers.format_scientific(0.01, '#E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
112 self.assertEqual(fmt, '1E-2') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
113 fmt = numbers.format_scientific(10, '#E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
114 self.assertEqual(fmt, '1E1') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
115 fmt = numbers.format_scientific(1234, '0.###E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
116 self.assertEqual(fmt, '1.234E3') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
117 fmt = numbers.format_scientific(1234, '0.#E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
118 self.assertEqual(fmt, '1.2E3') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
119 # Exponent grouping |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
120 fmt = numbers.format_scientific(12345, '##0.####E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
121 self.assertEqual(fmt, '12.345E3') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
122 # Minimum number of int digits |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
123 fmt = numbers.format_scientific(12345, '00.###E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
124 self.assertEqual(fmt, '12.345E3') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
125 fmt = numbers.format_scientific(-12345.6, '00.###E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
126 self.assertEqual(fmt, '-12.346E3') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
127 fmt = numbers.format_scientific(-0.01234, '00.###E0', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
128 self.assertEqual(fmt, '-12.34E-3') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
129 # Custom pattern suffic |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
130 fmt = numbers.format_scientific(123.45, '#.##E0 m/s', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
131 self.assertEqual(fmt, '1.23E2 m/s') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
132 # Exponent patterns |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
133 fmt = numbers.format_scientific(123.45, '#.##E00 m/s', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
134 self.assertEqual(fmt, '1.23E02 m/s') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
135 fmt = numbers.format_scientific(0.012345, '#.##E00 m/s', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
136 self.assertEqual(fmt, '1.23E-02 m/s') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
137 fmt = numbers.format_scientific(12345, '#.##E+00 m/s', locale='en_US') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
138 self.assertEqual(fmt, '1.23E+04 m/s') |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
139 |
d462423feeea
Added initial support for scientific notation patterns.
jonas
parents:
220
diff
changeset
|
140 |
3 | 141 def suite(): |
142 suite = unittest.TestSuite() | |
143 suite.addTest(doctest.DocTestSuite(numbers)) | |
52 | 144 suite.addTest(unittest.makeSuite(FormatDecimalTestCase)) |
3 | 145 return suite |
146 | |
147 if __name__ == '__main__': | |
148 unittest.main(defaultTest='suite') |