From 294317cfa394f532660f5ce950eae5b5de84ee53 Mon Sep 17 00:00:00 2001
From: Piotr Maslanka <piotr.maslanka@henrietta.com.pl>
Date: Sat, 9 Dec 2017 01:36:51 +0100
Subject: [PATCH] bug in ranges found

---
 firanka/series/__init__.py       | 3 ++-
 firanka/series/range.py          | 4 ++--
 firanka/series/series.py         | 8 +++++++-
 tests/test_series/test_range.py  | 1 +
 tests/test_series/test_series.py | 8 ++++++++
 5 files changed, 20 insertions(+), 4 deletions(-)

diff --git a/firanka/series/__init__.py b/firanka/series/__init__.py
index 4335115..ea3c4b2 100644
--- a/firanka/series/__init__.py
+++ b/firanka/series/__init__.py
@@ -5,7 +5,7 @@ import logging
 
 from .exceptions import NotInDomainError, FirankaError
 from .range import Range, REAL_SET
-from .series import DiscreteSeries, FunctionBasedSeries, ModuloSeries
+from .series import DiscreteSeries, FunctionBasedSeries, ModuloSeries, Series
 
 
 __all__ = [
@@ -16,4 +16,5 @@ __all__ = [
     'FunctionBasedSeries',
     'DiscreteSeries',
     'ModuloSeries',
+    'Series',
 ]
diff --git a/firanka/series/range.py b/firanka/series/range.py
index 82efa38..1dc6323 100644
--- a/firanka/series/range.py
+++ b/firanka/series/range.py
@@ -107,14 +107,14 @@ class Range(object):
 
         if self.start == y.start:
             start = self.start
-            left_inc = self.left_inc or y.left_inc
+            left_inc = self.left_inc and y.left_inc
         else:
             start = y.start
             left_inc = y.left_inc
 
         if self.stop == y.stop:
             stop = self.stop
-            right_inc = self.right_inc or y.right_inc
+            right_inc = self.right_inc and y.right_inc
         else:
             p, q = (self, y) if self.stop < y.stop else (y, self)
             stop = p.stop
diff --git a/firanka/series/series.py b/firanka/series/series.py
index ae7372b..aea3798 100644
--- a/firanka/series/series.py
+++ b/firanka/series/series.py
@@ -10,6 +10,12 @@ from .exceptions import NotInDomainError
 
 
 class Series(object):
+    """
+    Abstract, base class for series.
+
+    Your series needs to override just _get_for(x: float) -> v
+    for minimum functionality
+    """
 
     def __init__(self, domain):
         if not isinstance(domain, Range):
@@ -39,7 +45,7 @@ class Series(object):
             return self._get_for(item)
 
     def _get_for(self, item):
-        raise NotImplementedError
+        raise NotImplementedError('This is abstract, override me!')
 
     def eval_points(self, points):
         """
diff --git a/tests/test_series/test_range.py b/tests/test_series/test_range.py
index 6a6652f..068b0b8 100644
--- a/tests/test_series/test_range.py
+++ b/tests/test_series/test_range.py
@@ -28,6 +28,7 @@ class TestRange(unittest.TestCase):
         self.do_intersect('<-10;-1)', '<-1;1>', True)
         self.do_intersect('<-10;-1)', '(-1;3>', True)
         self.do_intersect('<-10;2)', '<1;5>', '<1;2)')
+        self.do_intersect('<-5;5>', '(-5;5)', '(-5;5)')
 
     def test_str_and_repr_and_bool(self):
         p = Range(-1,1,True,True)
diff --git a/tests/test_series/test_series.py b/tests/test_series/test_series.py
index 232d557..c7451f8 100644
--- a/tests/test_series/test_series.py
+++ b/tests/test_series/test_series.py
@@ -32,6 +32,11 @@ class TestDiscreteSeries(unittest.TestCase):
         self.assertEqual(s[3.5], 0)
         self.assertEqual(s[4], 1)
 
+    def test_slice_outdomain(self):
+        series = DiscreteSeries([[0, 0], [1, 1], [2, 2]])
+
+        self.assertRaises(NotInDomainError, lambda: series[-1:2])
+
     def test_slice(self):
         series = DiscreteSeries([[0, 0], [1, 1], [2, 2]])
 
@@ -89,6 +94,9 @@ class TestDiscreteSeries(unittest.TestCase):
         self.assertIsInstance(sa, DiscreteSeries)
         self.assertEqual(sa.data, [(i, i**2) for i in PTS])
 
+        empty = FunctionBasedSeries(lambda x: x**2, '<-10;10)').discretize([])
+        self.assertTrue(empty.domain.is_empty())
+
 class TestFunctionBasedSeries(unittest.TestCase):
     def test_slice(self):
         series = FunctionBasedSeries(lambda x: x, '<0;2>')
-- 
GitLab