diff --git a/firanka/series/range.py b/firanka/series/range.py index ffc085940b19dde12a3f95dc48bcbd186b1dd1dc..3779a143742c996ef6d567f5e8f1702d8e33450a 100644 --- a/firanka/series/range.py +++ b/firanka/series/range.py @@ -24,21 +24,26 @@ class Range(object): """ def __init__(self, *args): if len(args) == 1: - rs, = args - if (rs[0] not in '<(') or (rs[-1] not in '>)'): - raise ValueError('Must start with < or ( and end with ) or >') - - lend_inclusive = rs[0] == '<' - rend_inclusive = rs[-1] == '>' - - rs = rs[1:-1] - start, stop = map(float, rs.split(';')) - elif isinstance(args[0], Range): - start = args[0].range - stop = args[0].stop - lend_inclusive = args[0].lend_inclusive - rend_inclusive = args[0].rend_inclusive + if isinstance(args[0], type(self)): + start = args[0].start + stop = args[0].stop + lend_inclusive = args[0].lend_inclusive + rend_inclusive = args[0].rend_inclusive + else: + rs, = args + + if rs[0] not in '<(': raise ValueError('Must start with ( or <') + if rs[-1] not in '>)': raise ValueError('Must end with ) or >') + if ';' not in rs: raise ValueError('Separator ; required') + + lend_inclusive = rs[0] == '<' + rend_inclusive = rs[-1] == '>' + + rs = rs[1:-1] + start, stop = rs.split(';') + start = float(start) + stop = float(stop) else: start, stop, lend_inclusive, rend_inclusive = args @@ -69,7 +74,6 @@ class Range(object): return self.stop - self.start def __repr__(self): - return str(self) return 'Range(%s, %s, %s, %s)' % (repr(self.start), repr(self.stop), repr(self.lend_inclusive), repr(self.rend_inclusive)) def __bool__(self): @@ -86,7 +90,6 @@ class Range(object): @pre_range def intersection(self, y): - print(str(self), str(y)) if self.start > y.start: return y.intersection(self) diff --git a/setup.py b/setup.py index ca77cdecdba9f030770e6248a99bce40a8170bc5..42ca61aceac6b30a55e1a3d44ecb83db4d15e23d 100644 --- a/setup.py +++ b/setup.py @@ -4,6 +4,7 @@ from setuptools import setup, find_packages from firanka import __version__ setup( + name='firanka', version=__version__, packages=find_packages(exclude=['tests.*', 'tests']), tests_require=["nose", 'coverage>=4.0,<4.4'], diff --git a/tests/test_series/test_range.py b/tests/test_series/test_range.py index f0eca7083180a8acd4206dcb83ae47851339edc0..5fa18b72030becac9cb876d3fa3dfbf8af8543d2 100644 --- a/tests/test_series/test_range.py +++ b/tests/test_series/test_range.py @@ -5,11 +5,17 @@ import unittest from firanka.series import Range + class TestRange(unittest.TestCase): + + def do_intersect(self, a, b, val): + self.assertEqual(bool(Range(a).intersection(b)), val) + self.assertEqual(bool(Range(b).intersection(a)), val) + def test_intersection(self): - self.assertFalse(Range(-10, -1, True, True).intersection('<2;3>')) - self.assertFalse(Range(-10, -1, True, False).intersection('(-1;3>')) - self.assertFalse(Range('<-10;-1)').intersection('<-1;1>')) + self.do_intersect(Range(-10, -1, True, True), '<2;3>', False) + self.do_intersect(Range(-10, -1, True, False), '(-1;3>', False) + self.do_intersect('<-10;-1)', '<-1;1>', False) def test_str(self): self.assertEqual(str(Range(-1, 1, True, True)), '<-1;1>')