Skip to content

Commit d4ecdba

Browse files
committed
rangeset: Range support operator "&"
1 parent 07a0499 commit d4ecdba

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

rangeset/README.md

+18
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
- [rangeset.IntIncRange](#rangesetintincrange)
1111
- [rangeset.IntIncRangeSet](#rangesetintincrangeset)
1212
- [rangeset.Range](#rangesetrange)
13+
- [Range `&`](#range-&)
1314
- [Range.cmp](#rangecmp)
1415
- [Range.has(val)](#rangehasval)
1516
- [Range.is_adjacent](#rangeis_adjacent)
@@ -99,6 +100,23 @@ E.g. a range `[1, 3]` has 2 elements `1` and `2`, but `3` is not in this range.
99100
**return**:
100101
a `rangeset.Range` instance.
101102

103+
104+
### Range `&`
105+
106+
Overriding operator `&`.
107+
`a & b` is the same as `a.intersect(b)`.
108+
109+
**syntax**:
110+
`Range(1, 3) & Range(2, 4) # Range(2, 3)`.
111+
112+
**syntax**:
113+
`Range(1, 3) & [2, 4] # Range(2, 3)`.
114+
115+
**syntax**:
116+
`[1, 3] & Range(2, 4) # Range(2, 3)`.
117+
118+
119+
102120
### Range.cmp
103121

104122
**syntax**:

rangeset/rangeset.py

+5
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ def val(self):
159159
def set(self, v):
160160
self[2] = v
161161

162+
def __and__(self, b):
163+
return self.intersect(b)
164+
165+
def __rand__(self, b):
166+
return self.intersect(b)
162167

163168
class Range(ValueRange):
164169

rangeset/test/test_rangeset.py

+16
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,29 @@ def test_intersect(self):
191191
self.assertEqual(expected, a.intersect(rangeset.Range(*b)))
192192
self.assertEqual(expected, a.intersect(rangeset.ValueRange(*(b+['bar']))))
193193

194+
# __and__
195+
self.assertEqual(expected, a & b)
196+
self.assertEqual(expected, a & (b+['bar']))
197+
198+
# __rand__
199+
self.assertEqual(expected, b & a)
200+
self.assertEqual(expected, (b+['bar']) & a)
201+
194202
a = rangeset.ValueRange(*(a+['ahh']))
195203
if expected is not None:
196204
expected = expected + ['ahh']
197205

198206
self.assertEqual(expected, a.intersect(rangeset.Range(*b)))
199207
self.assertEqual(expected, a.intersect(rangeset.ValueRange(*(b+['bar']))))
200208

209+
# __and__
210+
self.assertEqual(expected, a & b)
211+
self.assertEqual(expected, a & (b+['bar']))
212+
213+
# __rand__
214+
self.assertEqual(expected, b & a)
215+
self.assertEqual(expected, (b+['bar']) & a)
216+
201217
def test_length(self):
202218
inf = float('inf')
203219
cases = (

0 commit comments

Comments
 (0)