test_digits.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from sympy.ntheory import count_digits, digits, is_palindromic
  2. from sympy.core.intfunc import num_digits
  3. from sympy.testing.pytest import raises
  4. def test_num_digits():
  5. # depending on whether one rounds up or down or uses log or log10,
  6. # one or more of these will fail if you don't check for the off-by
  7. # one condition
  8. assert num_digits(2, 2) == 2
  9. assert num_digits(2**48 - 1, 2) == 48
  10. assert num_digits(1000, 10) == 4
  11. assert num_digits(125, 5) == 4
  12. assert num_digits(100, 16) == 2
  13. assert num_digits(-1000, 10) == 4
  14. # if changes are made to the function, this structured test over
  15. # this range will expose problems
  16. for base in range(2, 100):
  17. for e in range(1, 100):
  18. n = base**e
  19. assert num_digits(n, base) == e + 1
  20. assert num_digits(n + 1, base) == e + 1
  21. assert num_digits(n - 1, base) == e
  22. def test_digits():
  23. assert all(digits(n, 2)[1:] == [int(d) for d in format(n, 'b')]
  24. for n in range(20))
  25. assert all(digits(n, 8)[1:] == [int(d) for d in format(n, 'o')]
  26. for n in range(20))
  27. assert all(digits(n, 16)[1:] == [int(d, 16) for d in format(n, 'x')]
  28. for n in range(20))
  29. assert digits(2345, 34) == [34, 2, 0, 33]
  30. assert digits(384753, 71) == [71, 1, 5, 23, 4]
  31. assert digits(93409, 10) == [10, 9, 3, 4, 0, 9]
  32. assert digits(-92838, 11) == [-11, 6, 3, 8, 2, 9]
  33. assert digits(35, 10) == [10, 3, 5]
  34. assert digits(35, 10, 3) == [10, 0, 3, 5]
  35. assert digits(-35, 10, 4) == [-10, 0, 0, 3, 5]
  36. raises(ValueError, lambda: digits(2, 2, 1))
  37. def test_count_digits():
  38. assert count_digits(55, 2) == {1: 5, 0: 1}
  39. assert count_digits(55, 10) == {5: 2}
  40. n = count_digits(123)
  41. assert n[4] == 0 and type(n[4]) is int
  42. def test_is_palindromic():
  43. assert is_palindromic(-11)
  44. assert is_palindromic(11)
  45. assert is_palindromic(0o121, 8)
  46. assert not is_palindromic(123)