bt2: _IntegerRangeSet.add(): make it possible to add a single value
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Sat, 10 Aug 2019 19:46:37 +0000 (15:46 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Tue, 13 Aug 2019 00:28:02 +0000 (20:28 -0400)
This patch makes it possible to do:

    my_range_set.add(23)

which is the equivalent of:

    my_range_set.add((23, 23))

It also makes it possible to do:

    bt2.SignedIntegerRangeSet(-17)
    bt2.UnsignedIntegerRangeSet(17)

which is the equivalent of:

    bt2.SignedIntegerRangeSet(-17, -17)
    bt2.UnsignedIntegerRangeSet(17, 17)

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I44bf1a257422fb9e74835a300eeda948a8e5d067
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1874
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
src/bindings/python/bt2/bt2/integer_range_set.py
tests/bindings/python/bt2/test_integer_range_set.py

index cee8051b51c7b0a3466b19c91367b9eb1f2c6c3b..09d7b08fcdce95fca6fe1ea059247da4f84f2f1d 100644 (file)
@@ -26,8 +26,12 @@ import bt2
 
 
 class _IntegerRange:
-    def __init__(self, lower, upper):
+    def __init__(self, lower, upper=None):
         self._check_type(lower)
+
+        if upper is None:
+            upper = lower
+
         self._check_type(upper)
 
         if lower > upper:
@@ -60,10 +64,12 @@ class _IntegerRange:
 
 
 class SignedIntegerRange(_IntegerRange):
+    _is_type = staticmethod(utils._is_int64)
     _check_type = staticmethod(utils._check_int64)
 
 
 class UnsignedIntegerRange(_IntegerRange):
+    _is_type = staticmethod(utils._is_uint64)
     _check_type = staticmethod(utils._check_uint64)
 
 
@@ -117,8 +123,11 @@ class _IntegerRangeSet(object._SharedObject, collections.abc.MutableSet):
 
     def add(self, rg):
         if type(rg) is not self._range_type:
-            # assume it's a simple pair (will raise if it's not)
-            rg = self._range_type(rg[0], rg[1])
+            if self._range_type._is_type(rg):
+                rg = self._range_type(rg)
+            else:
+                # assume it's a simple pair (will raise if it's not)
+                rg = self._range_type(rg[0], rg[1])
 
         status = self._add_range(self._ptr, rg.lower, rg.upper)
         utils._handle_func_status(status, 'cannot add range to range set object')
index 9188025add4983f3ec719b11535289bf37b12328..0e6940e5238be95aac72f828a443aca4b8fb1338 100644 (file)
@@ -33,6 +33,11 @@ class _IntegerRangeTestCase:
         self.assertEqual(rg.lower, self._def_lower)
         self.assertEqual(rg.upper, self._def_lower)
 
+    def test_create_single(self):
+        rg = self._CLS(self._def_lower)
+        self.assertEqual(rg.lower, self._def_lower)
+        self.assertEqual(rg.upper, self._def_lower)
+
     def test_create_wrong_type_lower(self):
         with self.assertRaises(TypeError):
             rg = self._CLS(19.3, self._def_upper)
@@ -122,13 +127,18 @@ class _IntegerRangeSetTestCase:
         self.assertIn(self._range2, rs)
         self.assertIn(self._range3, rs)
 
+    def test_create_single(self):
+        rs = self._CLS((self._range_same.lower,))
+        self.assertEqual(len(rs), 1)
+        self.assertIn(self._range_same, rs)
+
     def test_create_non_iter(self):
         with self.assertRaises(TypeError):
             self._rs = self._CLS(23)
 
     def test_create_wrong_elem_type(self):
         with self.assertRaises(TypeError):
-            self._rs = self._CLS((self._range1, self._range2, 17))
+            self._rs = self._CLS((self._range1, self._range2, 'lel'))
 
     def test_len(self):
         self.assertEqual(len(self._rs), 3)
@@ -202,6 +212,7 @@ class UnsignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase, unittest.TestCas
         self._range1 = bt2.UnsignedIntegerRange(4, 192)
         self._range2 = bt2.UnsignedIntegerRange(17, 228)
         self._range3 = bt2.UnsignedIntegerRange(1000, 2000)
+        self._range_same = bt2.UnsignedIntegerRange(1300, 1300)
         super().setUp()
 
 
@@ -212,4 +223,5 @@ class SignedIntegerRangeSetTestCase(_IntegerRangeSetTestCase, unittest.TestCase)
         self._range1 = bt2.SignedIntegerRange(-1484, -17)
         self._range2 = bt2.SignedIntegerRange(-101, 1500)
         self._range3 = bt2.SignedIntegerRange(1948, 2019)
+        self._range_same = bt2.SignedIntegerRange(-1300, -1300)
         super().setUp()
This page took 0.02715 seconds and 4 git commands to generate.