# coding=UTF-8 from __future__ import print_function, absolute_import, division import unittest from firanka.series import Range class TestRange(unittest.TestCase): def do_intersect(self, a, b, val): if type(val) == bool: p = Range(a).intersection(b) if p.is_empty() != val: self.fail('%s ^ %s [=> %s] != %s' % (Range(a), Range(b), p, val)) p = Range(b).intersection(a) if p.is_empty() != val: self.fail('%s ^ %s [=> %s] != %s' % (Range(b), Range(a), p, val)) else: self.assertEqual(Range(a).intersection(b), Range(val)) self.assertEqual(Range(b).intersection(a), Range(val)) def test_isempty(self): self.assertTrue(Range(-1,-1,False,False).is_empty()) self.assertFalse(Range(-1,-1,False,True).is_empty()) self.assertEqual(Range(0,0,False,False), Range(2,2,False,False)) def test_intersection(self): self.do_intersect('<-10;1>', '<2;3>', True) self.do_intersect('<10;1)', '(-1;3>', True) 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) self.assertEqual(eval(repr(p)),p) self.assertEqual(str(Range(-1, 1, True, True)), '<-1;1>') def test_constructor(self): self.assertRaises(ValueError, lambda: Range('#2;3>')) self.assertRaises(ValueError, lambda: Range('(2;3!')) self.assertRaises(ValueError, lambda: Range('<-inf;3)')) self.assertEqual(Range(1,2,True,False), Range('<1;2)')) 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>')) self.assertTrue(Range('<-5;5>') in Range('<-10;10>')) self.assertTrue('(-1;6)' in Range(-10.0, 10.0, True, False))