test_contains.py 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import pytest
  2. from pandas import (
  3. Interval,
  4. Timedelta,
  5. Timestamp,
  6. )
  7. class TestContains:
  8. def test_contains(self):
  9. interval = Interval(0, 1)
  10. assert 0.5 in interval
  11. assert 1 in interval
  12. assert 0 not in interval
  13. interval_both = Interval(0, 1, "both")
  14. assert 0 in interval_both
  15. assert 1 in interval_both
  16. interval_neither = Interval(0, 1, closed="neither")
  17. assert 0 not in interval_neither
  18. assert 0.5 in interval_neither
  19. assert 1 not in interval_neither
  20. def test_contains_interval(self, inclusive_endpoints_fixture):
  21. interval1 = Interval(0, 1, "both")
  22. interval2 = Interval(0, 1, inclusive_endpoints_fixture)
  23. assert interval1 in interval1
  24. assert interval2 in interval2
  25. assert interval2 in interval1
  26. assert interval1 not in interval2 or inclusive_endpoints_fixture == "both"
  27. def test_contains_infinite_length(self):
  28. interval1 = Interval(0, 1, "both")
  29. interval2 = Interval(float("-inf"), float("inf"), "neither")
  30. assert interval1 in interval2
  31. assert interval2 not in interval1
  32. def test_contains_zero_length(self):
  33. interval1 = Interval(0, 1, "both")
  34. interval2 = Interval(-1, -1, "both")
  35. interval3 = Interval(0.5, 0.5, "both")
  36. assert interval2 not in interval1
  37. assert interval3 in interval1
  38. assert interval2 not in interval3 and interval3 not in interval2
  39. assert interval1 not in interval2 and interval1 not in interval3
  40. @pytest.mark.parametrize(
  41. "type1",
  42. [
  43. (0, 1),
  44. (Timestamp(2000, 1, 1, 0), Timestamp(2000, 1, 1, 1)),
  45. (Timedelta("0h"), Timedelta("1h")),
  46. ],
  47. )
  48. @pytest.mark.parametrize(
  49. "type2",
  50. [
  51. (0, 1),
  52. (Timestamp(2000, 1, 1, 0), Timestamp(2000, 1, 1, 1)),
  53. (Timedelta("0h"), Timedelta("1h")),
  54. ],
  55. )
  56. def test_contains_mixed_types(self, type1, type2):
  57. interval1 = Interval(*type1)
  58. interval2 = Interval(*type2)
  59. if type1 == type2:
  60. assert interval1 in interval2
  61. else:
  62. msg = "^'<=' not supported between instances of"
  63. with pytest.raises(TypeError, match=msg):
  64. interval1 in interval2