summaryrefslogtreecommitdiff
path: root/tests/test_numbers.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_numbers.py')
-rw-r--r--tests/test_numbers.py219
1 files changed, 78 insertions, 141 deletions
diff --git a/tests/test_numbers.py b/tests/test_numbers.py
index bac6c61..78f7797 100644
--- a/tests/test_numbers.py
+++ b/tests/test_numbers.py
@@ -25,25 +25,17 @@ from babel.numbers import (
class FormatDecimalTestCase(unittest.TestCase):
def test_patterns(self):
- self.assertEqual(numbers.format_decimal(12345, '##0',
- locale='en_US'), '12345')
- self.assertEqual(numbers.format_decimal(6.5, '0.00', locale='sv'),
- '6,50')
- self.assertEqual(numbers.format_decimal(10.0**20,
- '#.00', locale='en_US'),
- '100000000000000000000.00')
+ assert numbers.format_decimal(12345, '##0', locale='en_US') == '12345'
+ assert numbers.format_decimal(6.5, '0.00', locale='sv') == '6,50'
+ assert numbers.format_decimal((10.0 ** 20), '#.00', locale='en_US') == '100000000000000000000.00'
# regression test for #183, fraction digits were not correctly cutted
# if the input was a float value and the value had more than 7
# significant digits
- self.assertEqual(u'12,345,678.05',
- numbers.format_decimal(12345678.051, '#,##0.00',
- locale='en_US'))
+ assert numbers.format_decimal(12345678.051, '#,##0.00', locale='en_US') == u'12,345,678.05'
def test_subpatterns(self):
- self.assertEqual(numbers.format_decimal(-12345, '#,##0.##;-#',
- locale='en_US'), '-12,345')
- self.assertEqual(numbers.format_decimal(-12345, '#,##0.##;(#)',
- locale='en_US'), '(12,345)')
+ assert numbers.format_decimal((- 12345), '#,##0.##;-#', locale='en_US') == '-12,345'
+ assert numbers.format_decimal((- 12345), '#,##0.##;(#)', locale='en_US') == '(12,345)'
def test_default_rounding(self):
"""
@@ -51,169 +43,114 @@ class FormatDecimalTestCase(unittest.TestCase):
A '5' is rounded to the closest 'even' number
"""
- self.assertEqual(numbers.format_decimal(5.5, '0', locale='sv'), '6')
- self.assertEqual(numbers.format_decimal(6.5, '0', locale='sv'), '6')
- self.assertEqual(numbers.format_decimal(6.5, '0', locale='sv'), '6')
- self.assertEqual(numbers.format_decimal(1.2325, locale='sv'), '1,232')
- self.assertEqual(numbers.format_decimal(1.2335, locale='sv'), '1,234')
+ assert numbers.format_decimal(5.5, '0', locale='sv') == '6'
+ assert numbers.format_decimal(6.5, '0', locale='sv') == '6'
+ assert numbers.format_decimal(6.5, '0', locale='sv') == '6'
+ assert numbers.format_decimal(1.2325, locale='sv') == '1,232'
+ assert numbers.format_decimal(1.2335, locale='sv') == '1,234'
def test_significant_digits(self):
"""Test significant digits patterns"""
- self.assertEqual(numbers.format_decimal(123004, '@@', locale='en_US'),
- '120000')
- self.assertEqual(numbers.format_decimal(1.12, '@', locale='sv'), '1')
- self.assertEqual(numbers.format_decimal(1.1, '@@', locale='sv'), '1,1')
- self.assertEqual(numbers.format_decimal(1.1, '@@@@@##', locale='sv'),
- '1,1000')
- self.assertEqual(numbers.format_decimal(0.0001, '@@@', locale='sv'),
- '0,000100')
- self.assertEqual(numbers.format_decimal(0.0001234, '@@@', locale='sv'),
- '0,000123')
- self.assertEqual(numbers.format_decimal(0.0001234, '@@@#', locale='sv'),
- '0,0001234')
- self.assertEqual(numbers.format_decimal(0.0001234, '@@@#', locale='sv'),
- '0,0001234')
- self.assertEqual(numbers.format_decimal(0.12345, '@@@', locale='sv'),
- '0,123')
- self.assertEqual(numbers.format_decimal(3.14159, '@@##', locale='sv'),
- '3,142')
- self.assertEqual(numbers.format_decimal(1.23004, '@@##', locale='sv'),
- '1,23')
- self.assertEqual(numbers.format_decimal(1230.04, '@@,@@', locale='en_US'),
- '12,30')
- self.assertEqual(numbers.format_decimal(123.41, '@@##', locale='en_US'),
- '123.4')
- self.assertEqual(numbers.format_decimal(1, '@@', locale='en_US'),
- '1.0')
- self.assertEqual(numbers.format_decimal(0, '@', locale='en_US'),
- '0')
- self.assertEqual(numbers.format_decimal(0.1, '@', locale='en_US'),
- '0.1')
- self.assertEqual(numbers.format_decimal(0.1, '@#', locale='en_US'),
- '0.1')
- self.assertEqual(numbers.format_decimal(0.1, '@@', locale='en_US'),
- '0.10')
+ assert numbers.format_decimal(123004, '@@', locale='en_US') == '120000'
+ assert numbers.format_decimal(1.12, '@', locale='sv') == '1'
+ assert numbers.format_decimal(1.1, '@@', locale='sv') == '1,1'
+ assert numbers.format_decimal(1.1, '@@@@@##', locale='sv') == '1,1000'
+ assert numbers.format_decimal(0.0001, '@@@', locale='sv') == '0,000100'
+ assert numbers.format_decimal(0.0001234, '@@@', locale='sv') == '0,000123'
+ assert numbers.format_decimal(0.0001234, '@@@#', locale='sv') == '0,0001234'
+ assert numbers.format_decimal(0.0001234, '@@@#', locale='sv') == '0,0001234'
+ assert numbers.format_decimal(0.12345, '@@@', locale='sv') == '0,123'
+ assert numbers.format_decimal(3.14159, '@@##', locale='sv') == '3,142'
+ assert numbers.format_decimal(1.23004, '@@##', locale='sv') == '1,23'
+ assert numbers.format_decimal(1230.04, '@@,@@', locale='en_US') == '12,30'
+ assert numbers.format_decimal(123.41, '@@##', locale='en_US') == '123.4'
+ assert numbers.format_decimal(1, '@@', locale='en_US') == '1.0'
+ assert numbers.format_decimal(0, '@', locale='en_US') == '0'
+ assert numbers.format_decimal(0.1, '@', locale='en_US') == '0.1'
+ assert numbers.format_decimal(0.1, '@#', locale='en_US') == '0.1'
+ assert numbers.format_decimal(0.1, '@@', locale='en_US') == '0.10'
def test_decimals(self):
"""Test significant digits patterns"""
- self.assertEqual(numbers.format_decimal(decimal.Decimal('1.2345'),
- '#.00', locale='en_US'),
- '1.23')
- self.assertEqual(numbers.format_decimal(decimal.Decimal('1.2345000'),
- '#.00', locale='en_US'),
- '1.23')
- self.assertEqual(numbers.format_decimal(decimal.Decimal('1.2345000'),
- '@@', locale='en_US'),
- '1.2')
- self.assertEqual(numbers.format_decimal(decimal.Decimal('12345678901234567890.12345'),
- '#.00', locale='en_US'),
- '12345678901234567890.12')
+ assert numbers.format_decimal(decimal.Decimal('1.2345'), '#.00', locale='en_US') == '1.23'
+ assert numbers.format_decimal(decimal.Decimal('1.2345000'), '#.00', locale='en_US') == '1.23'
+ assert numbers.format_decimal(decimal.Decimal('1.2345000'), '@@', locale='en_US') == '1.2'
+ assert numbers.format_decimal(decimal.Decimal('12345678901234567890.12345'), '#.00', locale='en_US') == '12345678901234567890.12'
def test_scientific_notation(self):
- fmt = numbers.format_scientific(0.1, '#E0', locale='en_US')
- self.assertEqual(fmt, '1E-1')
- fmt = numbers.format_scientific(0.01, '#E0', locale='en_US')
- self.assertEqual(fmt, '1E-2')
- fmt = numbers.format_scientific(10, '#E0', locale='en_US')
- self.assertEqual(fmt, '1E1')
- fmt = numbers.format_scientific(1234, '0.###E0', locale='en_US')
- self.assertEqual(fmt, '1.234E3')
- fmt = numbers.format_scientific(1234, '0.#E0', locale='en_US')
- self.assertEqual(fmt, '1.2E3')
+ assert numbers.format_scientific(0.1, '#E0', locale='en_US') == '1E-1'
+ assert numbers.format_scientific(0.01, '#E0', locale='en_US') == '1E-2'
+ assert numbers.format_scientific(10, '#E0', locale='en_US') == '1E1'
+ assert numbers.format_scientific(1234, '0.###E0', locale='en_US') == '1.234E3'
+ assert numbers.format_scientific(1234, '0.#E0', locale='en_US') == '1.2E3'
# Exponent grouping
- fmt = numbers.format_scientific(12345, '##0.####E0', locale='en_US')
- self.assertEqual(fmt, '1.2345E4')
+ assert numbers.format_scientific(12345, '##0.####E0', locale='en_US') == '1.2345E4'
# Minimum number of int digits
- fmt = numbers.format_scientific(12345, '00.###E0', locale='en_US')
- self.assertEqual(fmt, '12.345E3')
- fmt = numbers.format_scientific(-12345.6, '00.###E0', locale='en_US')
- self.assertEqual(fmt, '-12.346E3')
- fmt = numbers.format_scientific(-0.01234, '00.###E0', locale='en_US')
- self.assertEqual(fmt, '-12.34E-3')
- # Custom pattern suffic
- fmt = numbers.format_scientific(123.45, '#.##E0 m/s', locale='en_US')
- self.assertEqual(fmt, '1.23E2 m/s')
+ assert numbers.format_scientific(12345, '00.###E0', locale='en_US') == '12.345E3'
+ assert numbers.format_scientific(-12345.6, '00.###E0', locale='en_US') == '-12.346E3'
+ assert numbers.format_scientific(-0.01234, '00.###E0', locale='en_US') == '-12.34E-3'
+ # Custom pattern suffix
+ assert numbers.format_scientific(123.45, '#.##E0 m/s', locale='en_US') == '1.23E2 m/s'
# Exponent patterns
- fmt = numbers.format_scientific(123.45, '#.##E00 m/s', locale='en_US')
- self.assertEqual(fmt, '1.23E02 m/s')
- fmt = numbers.format_scientific(0.012345, '#.##E00 m/s', locale='en_US')
- self.assertEqual(fmt, '1.23E-02 m/s')
- fmt = numbers.format_scientific(decimal.Decimal('12345'), '#.##E+00 m/s',
- locale='en_US')
- self.assertEqual(fmt, '1.23E+04 m/s')
+ assert numbers.format_scientific(123.45, '#.##E00 m/s', locale='en_US') == '1.23E02 m/s'
+ assert numbers.format_scientific(0.012345, '#.##E00 m/s', locale='en_US') == '1.23E-02 m/s'
+ assert numbers.format_scientific(decimal.Decimal('12345'), '#.##E+00 m/s', locale='en_US') == '1.23E+04 m/s'
# 0 (see ticket #99)
- fmt = numbers.format_scientific(0, '#E0', locale='en_US')
- self.assertEqual(fmt, '0E0')
+ assert numbers.format_scientific(0, '#E0', locale='en_US') == '0E0'
def test_formatting_of_very_small_decimals(self):
# previously formatting very small decimals could lead to a type error
# because the Decimal->string conversion was too simple (see #214)
number = decimal.Decimal("7E-7")
- fmt = numbers.format_decimal(number, format="@@@", locale='en_US')
- self.assertEqual('0.000000700', fmt)
+ assert numbers.format_decimal(number, format="@@@", locale='en_US') == '0.000000700'
def test_group_separator(self):
- self.assertEqual('29567.12', numbers.format_decimal(29567.12,
- locale='en_US', group_separator=False))
- self.assertEqual('29567,12', numbers.format_decimal(29567.12,
- locale='fr_CA', group_separator=False))
- self.assertEqual('29567,12', numbers.format_decimal(29567.12,
- locale='pt_BR', group_separator=False))
- self.assertEqual(u'$1099.98', numbers.format_currency(1099.98, 'USD',
- locale='en_US', group_separator=False))
- self.assertEqual(u'101299,98\xa0€', numbers.format_currency(101299.98, 'EUR',
- locale='fr_CA', group_separator=False))
- self.assertEqual('101299.98 euros', numbers.format_currency(101299.98, 'EUR',
- locale='en_US', group_separator=False, format_type='name'))
- self.assertEqual(u'25123412\xa0%', numbers.format_percent(251234.1234, locale='sv_SE', group_separator=False))
-
- self.assertEqual(u'29,567.12', numbers.format_decimal(29567.12,
- locale='en_US', group_separator=True))
- self.assertEqual(u'29\xa0567,12', numbers.format_decimal(29567.12,
- locale='fr_CA', group_separator=True))
- self.assertEqual(u'29.567,12', numbers.format_decimal(29567.12,
- locale='pt_BR', group_separator=True))
- self.assertEqual(u'$1,099.98', numbers.format_currency(1099.98, 'USD',
- locale='en_US', group_separator=True))
- self.assertEqual(u'101\xa0299,98\xa0\u20ac', numbers.format_currency(101299.98, 'EUR',
- locale='fr_CA', group_separator=True))
- self.assertEqual(u'101,299.98 euros', numbers.format_currency(101299.98, 'EUR',
- locale='en_US', group_separator=True,
- format_type='name'))
- self.assertEqual(u'25\xa0123\xa0412\xa0%', numbers.format_percent(251234.1234, locale='sv_SE', group_separator=True))
+ assert numbers.format_decimal(29567.12, locale='en_US', group_separator=False) == '29567.12'
+ assert numbers.format_decimal(29567.12, locale='fr_CA', group_separator=False) == '29567,12'
+ assert numbers.format_decimal(29567.12, locale='pt_BR', group_separator=False) == '29567,12'
+ assert numbers.format_currency(1099.98, 'USD', locale='en_US', group_separator=False) == u'$1099.98'
+ assert numbers.format_currency(101299.98, 'EUR', locale='fr_CA', group_separator=False) == u'101299,98\xa0€'
+ assert numbers.format_currency(101299.98, 'EUR', locale='en_US', group_separator=False, format_type='name') == '101299.98 euros'
+ assert numbers.format_percent(251234.1234, locale='sv_SE', group_separator=False) == u'25123412\xa0%'
+
+ assert numbers.format_decimal(29567.12, locale='en_US', group_separator=True) == u'29,567.12'
+ assert numbers.format_decimal(29567.12, locale='fr_CA', group_separator=True) == u'29\xa0567,12'
+ assert numbers.format_decimal(29567.12, locale='pt_BR', group_separator=True) == u'29.567,12'
+ assert numbers.format_currency(1099.98, 'USD', locale='en_US', group_separator=True) == u'$1,099.98'
+ assert numbers.format_currency(101299.98, 'EUR', locale='fr_CA', group_separator=True) == u'101\xa0299,98\xa0€'
+ assert numbers.format_currency(101299.98, 'EUR', locale='en_US', group_separator=True, format_type='name') == u'101,299.98 euros'
+ assert numbers.format_percent(251234.1234, locale='sv_SE', group_separator=True) == u'25\xa0123\xa0412\xa0%'
class NumberParsingTestCase(unittest.TestCase):
def test_can_parse_decimals(self):
- self.assertEqual(decimal.Decimal('1099.98'),
- numbers.parse_decimal('1,099.98', locale='en_US'))
- self.assertEqual(decimal.Decimal('1099.98'),
- numbers.parse_decimal('1.099,98', locale='de'))
- self.assertRaises(numbers.NumberFormatError,
- lambda: numbers.parse_decimal('2,109,998', locale='de'))
+ assert decimal.Decimal('1099.98') == numbers.parse_decimal('1,099.98', locale='en_US')
+ assert decimal.Decimal('1099.98') == numbers.parse_decimal('1.099,98', locale='de')
+ with pytest.raises(numbers.NumberFormatError):
+ numbers.parse_decimal('2,109,998', locale='de')
def test_parse_decimal_strict_mode(self):
# Numbers with a misplaced grouping symbol should be rejected
- with self.assertRaises(numbers.NumberFormatError) as info:
+ with pytest.raises(numbers.NumberFormatError) as info:
numbers.parse_decimal('11.11', locale='de', strict=True)
- assert info.exception.suggestions == ['1.111', '11,11']
+ assert info.value.suggestions == ['1.111', '11,11']
# Numbers with two misplaced grouping symbols should be rejected
- with self.assertRaises(numbers.NumberFormatError) as info:
+ with pytest.raises(numbers.NumberFormatError) as info:
numbers.parse_decimal('80.00.00', locale='de', strict=True)
- assert info.exception.suggestions == ['800.000']
+ assert info.value.suggestions == ['800.000']
# Partially grouped numbers should be rejected
- with self.assertRaises(numbers.NumberFormatError) as info:
+ with pytest.raises(numbers.NumberFormatError) as info:
numbers.parse_decimal('2000,000', locale='en_US', strict=True)
- assert info.exception.suggestions == ['2,000,000', '2,000']
+ assert info.value.suggestions == ['2,000,000', '2,000']
# Numbers with duplicate grouping symbols should be rejected
- with self.assertRaises(numbers.NumberFormatError) as info:
+ with pytest.raises(numbers.NumberFormatError) as info:
numbers.parse_decimal('0,,000', locale='en_US', strict=True)
- assert info.exception.suggestions == ['0']
+ assert info.value.suggestions == ['0']
# Return only suggestion for 0 on strict
- with self.assertRaises(numbers.NumberFormatError) as info:
+ with pytest.raises(numbers.NumberFormatError) as info:
numbers.parse_decimal('0.00', locale='de', strict=True)
- assert info.exception.suggestions == ['0']
+ assert info.value.suggestions == ['0']
# Properly formatted numbers should be accepted
assert str(numbers.parse_decimal('1.001', locale='de', strict=True)) == '1001'
# Trailing zeroes should be accepted