From 7a2a232886db556f09e7ea7123e44adaa2690cb3 Mon Sep 17 00:00:00 2001 From: Philippe Proulx Date: Sat, 10 Aug 2019 15:46:37 -0400 Subject: [PATCH] bt2: _IntegerRangeSet.add(): make it possible to add a single value 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 Change-Id: I44bf1a257422fb9e74835a300eeda948a8e5d067 Reviewed-on: https://review.lttng.org/c/babeltrace/+/1874 Tested-by: jenkins Reviewed-by: Simon Marchi --- src/bindings/python/bt2/bt2/integer_range_set.py | 15 ++++++++++++--- .../bindings/python/bt2/test_integer_range_set.py | 14 +++++++++++++- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/bindings/python/bt2/bt2/integer_range_set.py b/src/bindings/python/bt2/bt2/integer_range_set.py index cee8051b..09d7b08f 100644 --- a/src/bindings/python/bt2/bt2/integer_range_set.py +++ b/src/bindings/python/bt2/bt2/integer_range_set.py @@ -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') diff --git a/tests/bindings/python/bt2/test_integer_range_set.py b/tests/bindings/python/bt2/test_integer_range_set.py index 9188025a..0e6940e5 100644 --- a/tests/bindings/python/bt2/test_integer_range_set.py +++ b/tests/bindings/python/bt2/test_integer_range_set.py @@ -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() -- 2.34.1