test_numberformat.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. from decimal import Decimal
  2. from sys import float_info
  3. from unittest import TestCase
  4. from django.utils.numberformat import format as nformat
  5. class TestNumberFormat(TestCase):
  6. def test_format_number(self):
  7. self.assertEqual(nformat(1234, '.'), '1234')
  8. self.assertEqual(nformat(1234.2, '.'), '1234.2')
  9. self.assertEqual(nformat(1234, '.', decimal_pos=2), '1234.00')
  10. self.assertEqual(nformat(1234, '.', grouping=2, thousand_sep=','),
  11. '1234')
  12. self.assertEqual(nformat(1234, '.', grouping=2, thousand_sep=',',
  13. force_grouping=True), '12,34')
  14. self.assertEqual(nformat(-1234.33, '.', decimal_pos=1), '-1234.3')
  15. def test_format_string(self):
  16. self.assertEqual(nformat('1234', '.'), '1234')
  17. self.assertEqual(nformat('1234.2', '.'), '1234.2')
  18. self.assertEqual(nformat('1234', '.', decimal_pos=2), '1234.00')
  19. self.assertEqual(nformat('1234', '.', grouping=2, thousand_sep=','),
  20. '1234')
  21. self.assertEqual(nformat('1234', '.', grouping=2, thousand_sep=',',
  22. force_grouping=True), '12,34')
  23. self.assertEqual(nformat('-1234.33', '.', decimal_pos=1), '-1234.3')
  24. def test_large_number(self):
  25. most_max = ('{}179769313486231570814527423731704356798070567525844996'
  26. '598917476803157260780028538760589558632766878171540458953'
  27. '514382464234321326889464182768467546703537516986049910576'
  28. '551282076245490090389328944075868508455133942304583236903'
  29. '222948165808559332123348274797826204144723168738177180919'
  30. '29988125040402618412485836{}')
  31. most_max2 = ('{}35953862697246314162905484746340871359614113505168999'
  32. '31978349536063145215600570775211791172655337563430809179'
  33. '07028764928468642653778928365536935093407075033972099821'
  34. '15310256415249098018077865788815173701691026788460916647'
  35. '38064458963316171186642466965495956524082894463374763543'
  36. '61838599762500808052368249716736')
  37. int_max = int(float_info.max)
  38. self.assertEqual(nformat(int_max, '.'), most_max.format('', '8'))
  39. self.assertEqual(nformat(int_max + 1, '.'), most_max.format('', '9'))
  40. self.assertEqual(nformat(int_max * 2, '.'), most_max2.format(''))
  41. self.assertEqual(nformat(0 - int_max, '.'), most_max.format('-', '8'))
  42. self.assertEqual(nformat(-1 - int_max, '.'), most_max.format('-', '9'))
  43. self.assertEqual(nformat(-2 * int_max, '.'), most_max2.format('-'))
  44. def test_decimal_numbers(self):
  45. self.assertEqual(nformat(Decimal('1234'), '.'), '1234')
  46. self.assertEqual(nformat(Decimal('1234.2'), '.'), '1234.2')
  47. self.assertEqual(nformat(Decimal('1234'), '.', decimal_pos=2), '1234.00')
  48. self.assertEqual(nformat(Decimal('1234'), '.', grouping=2, thousand_sep=','), '1234')
  49. self.assertEqual(nformat(Decimal('1234'), '.', grouping=2, thousand_sep=',', force_grouping=True), '12,34')
  50. self.assertEqual(nformat(Decimal('-1234.33'), '.', decimal_pos=1), '-1234.3')
  51. self.assertEqual(nformat(Decimal('0.00000001'), '.', decimal_pos=8), '0.00000001')