From 1db2846beaf4e6dbec590351158f079dcece5c4f Mon Sep 17 00:00:00 2001
From: Piotr Maslanka <piotr.maslanka@henrietta.com.pl>
Date: Sat, 9 Dec 2017 01:19:29 +0100
Subject: [PATCH] fix range

---
 firanka/series/exceptions.py     |  4 +++-
 firanka/series/range.py          |  7 +++----
 firanka/series/series.py         |  4 ++--
 tests/test_series/test_range.py  |  3 ++-
 tests/test_series/test_series.py | 16 ++++++++--------
 5 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/firanka/series/exceptions.py b/firanka/series/exceptions.py
index 1144a1d..f8d6a28 100644
--- a/firanka/series/exceptions.py
+++ b/firanka/series/exceptions.py
@@ -5,7 +5,9 @@ import logging
 
 
 class FirankaError(Exception):
-    pass
+    """
+    Base class for firanka's exceptions
+    """
 
 
 class NotInDomainError(FirankaError, ValueError):
diff --git a/firanka/series/range.py b/firanka/series/range.py
index dc1e4a1..82efa38 100644
--- a/firanka/series/range.py
+++ b/firanka/series/range.py
@@ -53,11 +53,10 @@ class Range(object):
         :type x: index or a Range
         """
 
-        if isinstance(x, (Range, six.text_type)):
-            if isinstance(x, six.text_type):
-                x = Range(x)
-            print('does ', self, 'contain', x)
+        if isinstance(x, six.string_types):
+            x = Range(x)
 
+        if isinstance(x, Range):
             if x.start == self.start:
                 if x.left_inc ^ self.left_inc:
                     return False
diff --git a/firanka/series/series.py b/firanka/series/series.py
index c819859..331827a 100644
--- a/firanka/series/series.py
+++ b/firanka/series/series.py
@@ -63,13 +63,13 @@ class Series(object):
         if len(points) == 0:
             return DiscreteSeries([])
 
-        if domain is None:
-            domain = Range(points[0], points[-1], True, True)
+        domain = domain or Range(min(points), max(points), True, True)
 
         if domain not in self.domain:
             raise NotInDomainError('points not inside this series!')
 
         data = [(i, self[i]) for i in points]
+        data.sort()
         return DiscreteSeries(data, domain)
 
     def join(self, series, fun):
diff --git a/tests/test_series/test_range.py b/tests/test_series/test_range.py
index 0a3c5b1..6a6652f 100644
--- a/tests/test_series/test_range.py
+++ b/tests/test_series/test_range.py
@@ -49,4 +49,5 @@ class TestRange(unittest.TestCase):
         self.assertFalse(-20 in Range('(-10;-1>'))
         self.assertFalse(1 in Range('(-10;-1>'))
 
-        self.assertTrue(Range('<-5;5>') in Range('<-10;10>'))
\ No newline at end of file
+        self.assertTrue(Range('<-5;5>') in Range('<-10;10>'))
+        self.assertTrue('(-1;6)' in Range(-10.0, 10.0, True, False))
diff --git a/tests/test_series/test_series.py b/tests/test_series/test_series.py
index 7036336..98e95c0 100644
--- a/tests/test_series/test_series.py
+++ b/tests/test_series/test_series.py
@@ -2,7 +2,7 @@
 from __future__ import print_function, absolute_import, division
 import six
 import unittest
-from firanka.series import DiscreteSeries, FunctionBasedSeries, Range, ModuloSeries
+from firanka.series import DiscreteSeries, FunctionBasedSeries, Range, ModuloSeries, NotInDomainError
 
 
 class TestDiscreteSeries(unittest.TestCase):
@@ -14,15 +14,15 @@ class TestDiscreteSeries(unittest.TestCase):
         self.assertEqual(s[0.5], 0)
         self.assertEqual(s[1], 1)
 
-        self.assertRaises(ValueError, lambda: s[-1])
-        self.assertRaises(ValueError, lambda: s[2.5])
+        self.assertRaises(NotInDomainError, lambda: s[-1])
+        self.assertRaises(NotInDomainError, lambda: s[2.5])
 
         s = DiscreteSeries([[0,0], [1,1], [2,2]], domain=Range(0,3,True,True))
         self.assertEqual(s[0], 0)
         self.assertEqual(s[0.5], 0)
         self.assertEqual(s[1], 1)
 
-        self.assertRaises(ValueError, lambda: s[-1])
+        self.assertRaises(NotInDomainError, lambda: s[-1])
         self.assertEqual(s[2.5], 2)
 
     def test_translation(self):
@@ -39,8 +39,8 @@ class TestDiscreteSeries(unittest.TestCase):
 
         self.assertEqual(sp[0.5], 0)
         self.assertEqual(sp[1.5], 1)
-        self.assertRaises(ValueError, lambda: sp[0])
-        self.assertRaises(ValueError, lambda: sp[2])
+        self.assertRaises(NotInDomainError, lambda: sp[0])
+        self.assertRaises(NotInDomainError, lambda: sp[2])
         self.assertEqual(sp.domain.start, 0.5)
         self.assertEqual(sp.domain.stop, 1.5)
 
@@ -97,8 +97,8 @@ class TestFunctionBasedSeries(unittest.TestCase):
 
         self.assertEqual(sp[0.5], 0.5)
         self.assertEqual(sp[1.5], 1.5)
-        self.assertRaises(ValueError, lambda: sp[0])
-        self.assertRaises(ValueError, lambda: sp[2])
+        self.assertRaises(NotInDomainError, lambda: sp[0])
+        self.assertRaises(NotInDomainError, lambda: sp[2])
         self.assertEqual(sp.domain.start, 0.5)
         self.assertEqual(sp.domain.stop, 1.5)
 
-- 
GitLab