diff --git a/firanka/series/__init__.py b/firanka/series/__init__.py index f41d2141fd379692412bbecadbaac4204e429fa4..3b3bbcdf59397899bf54eae56cc58f275b2abf5b 100644 --- a/firanka/series/__init__.py +++ b/firanka/series/__init__.py @@ -3,7 +3,11 @@ from __future__ import print_function, absolute_import, division import six import logging -logger = logging.getLogger(__name__) - from .exceptions import OutOfRangeError, EmptyDomainError +from .range import Range +__all__ = [ + 'OutOfRangeError', + 'EmptyDomainError', + 'Range' +] diff --git a/firanka/series/range.py b/firanka/series/range.py index 81a01239a2747ba33e3ebaf4731f9f1efc23aefe..bb921373f832506e77c7f8ecd2c24cf6ec85d0fa 100644 --- a/firanka/series/range.py +++ b/firanka/series/range.py @@ -5,6 +5,7 @@ import logging import re from satella.coding import for_argument import functools +import math logger = logging.getLogger(__name__) @@ -25,8 +26,8 @@ class Range(object): def __init__(self, *args): if len(args) == 1: rs, = args - assert rs.startswith('<') or rs.startswith('(') - assert rs.endswith('>') or rs.endswith(')') + assert rs[0] in '<(' + assert rs[-1] in '>)' lend_inclusive = rs[0] == '<' rend_inclusive = rs[-1] == '>' @@ -41,6 +42,11 @@ class Range(object): else: start, stop, lend_inclusive, rend_inclusive = args + if lend_inclusive and math.isinf(start): + raise ValueError('Greater or equal with infinity!') + if rend_inclusive and math.isinf(stop): + raise ValueError('Greater or equal with infinity!') + self.start = start self.stop = stop self.lend_inclusive = lend_inclusive diff --git a/tests/test_series/test_range.py b/tests/test_series/test_range.py index 8398c3c265036003108acdd3771b07ba118a5ca8..8acf5cd1e9db7fd4cd05533ea8898682c7c87c10 100644 --- a/tests/test_series/test_range.py +++ b/tests/test_series/test_range.py @@ -13,4 +13,13 @@ class TestRange(unittest.TestCase): def test_str(self): - self.assertEqual(str(Range(-1, 1, True, True)), '<-1;1>') \ No newline at end of file + self.assertEqual(str(Range(-1, 1, True, True)), '<-1;1>') + + def test_contains(self): + self.assertFalse(-1 in Range('<-10;-1)')) + self.assertTrue(-10 in Range('<-10;-1)')) + self.assertFalse(-10 in Range('(-10;-1>')) + self.assertTrue(-1 in Range('(-10;-1>')) + self.assertTrue(-5 in Range('(-10;-1>')) + self.assertFalse(-20 in Range('(-10;-1>')) + self.assertFalse(1 in Range('(-10;-1>'))