test_schur_number.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from sympy.core import S, Rational
  2. from sympy.combinatorics.schur_number import schur_partition, SchurNumber
  3. from sympy.core.random import _randint
  4. from sympy.testing.pytest import raises
  5. from sympy.core.symbol import symbols
  6. def _sum_free_test(subset):
  7. """
  8. Checks if subset is sum-free(There are no x,y,z in the subset such that
  9. x + y = z)
  10. """
  11. for i in subset:
  12. for j in subset:
  13. assert (i + j in subset) is False
  14. def test_schur_partition():
  15. raises(ValueError, lambda: schur_partition(S.Infinity))
  16. raises(ValueError, lambda: schur_partition(-1))
  17. raises(ValueError, lambda: schur_partition(0))
  18. assert schur_partition(2) == [[1, 2]]
  19. random_number_generator = _randint(1000)
  20. for _ in range(5):
  21. n = random_number_generator(1, 1000)
  22. result = schur_partition(n)
  23. t = 0
  24. numbers = []
  25. for item in result:
  26. _sum_free_test(item)
  27. """
  28. Checks if the occurrence of all numbers is exactly one
  29. """
  30. t += len(item)
  31. for l in item:
  32. assert (l in numbers) is False
  33. numbers.append(l)
  34. assert n == t
  35. x = symbols("x")
  36. raises(ValueError, lambda: schur_partition(x))
  37. def test_schur_number():
  38. first_known_schur_numbers = {1: 1, 2: 4, 3: 13, 4: 44, 5: 160}
  39. for k in first_known_schur_numbers:
  40. assert SchurNumber(k) == first_known_schur_numbers[k]
  41. assert SchurNumber(S.Infinity) == S.Infinity
  42. assert SchurNumber(0) == 0
  43. raises(ValueError, lambda: SchurNumber(0.5))
  44. n = symbols("n")
  45. assert SchurNumber(n).lower_bound() == 3**n/2 - Rational(1, 2)
  46. assert SchurNumber(8).lower_bound() == 5039