def test_span_minus_non_overlapping_gives_span(self): ''' -------------------+++++++++++++++++++ ++++++++++++++++++-------------------- -------------------+++++++++++++++++++ ''' self.assertEqual(span_utils.difference([20, 40], [0, 19]), [[20, 40]]) ''' +++++++++++++++++++------------------- --------------------++++++++++++++++++ -------------------+++++++++++++++++++ ''' self.assertEqual(span_utils.difference([0, 20], [21, 40]), [[0, 20]])
def test_right_overlapping_spans_have_one_different_chunk(self): ''' ----------++++++++++++++++++++-------- ------------------++++++++++++++++++++ ----------++++++++-------------------- ''' self.assertEqual(span_utils.difference([10, 30], [20, 40]), [[10, 20]])
def test_span_minus_centered_smaller_span_gives_two_different_chunks(self): ''' ++++++++++++++++++++++++++++++++++++++ ---------+++++++++++++++++++---------- +++++++++-------------------++++++++++ ''' self.assertEqual(span_utils.difference([0, 40], [20, 30]), [[0, 20], [30, 40]])
def __sub__(self, other): if type(other) is timedelta: return span_utils.shift(self, -other) else: return span_utils.difference(self, other)
def test_two_identical_spans_have_no_difference(self): self.assertEqual(span_utils.difference([1, 2], [1, 2]), [])
def test_invalid_span_raises(self, span1, span2): with self.assertRaises(TypeError): span_utils.difference(span1, span2)