Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions pycrate_asn1rt/setobj.py
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,7 @@ def is_empty(self):
return self._rv == [] and self._rr == []

def is_ext(self):
return self._er is not None
return self._ev is not None

def __contains__(self, v):
if self._CONTAIN_WEXT:
Expand Down Expand Up @@ -928,13 +928,14 @@ def intersect(self, S):
if not ret.in_root(v) and not ret.in_ext(v):
ret._ev.append(v)
# 4.3) add self and S root values not intersecting
for v in self.root:
# (root ranges are already part of ret._er, from 4.1)
for v in self._rv:
if not ret.in_root(v) and not ret.in_ext(v):
ret._ev.append(v)
for v in S.root:
for v in S._rv:
if not ret.in_root(v) and not ret.in_ext(v):
ret._ev.append(v)
ret._init()
ret._init(True, True)
return ret

def get_root_dyn(self):
Expand Down
18 changes: 18 additions & 0 deletions test/test_asn1rt.py
Original file line number Diff line number Diff line change
Expand Up @@ -2157,6 +2157,24 @@ def _test_rt_base():

return 0

def test_setobj_intersect():
# integer root ranges, for non-extensible and extensible sets
for ev in (None, []):
left = ASN1Set(rr=[ASN1RangeInt(0, 10)], ev=ev)
right = ASN1Set(rr=[ASN1RangeInt(5, 15)], ev=ev)
inter = left.intersect(right)
assert( [(r.lb, r.ub) for r in inter._rr] == [(5, 10)] )
assert( inter.in_root(5) and inter.in_root(10) )
assert( not inter.in_root(4) and not inter.in_root(11) )
assert( inter.is_ext() == (ev is not None) )
# individual root values outside the intersection go to the extension
left = ASN1Set(rv=[20], rr=[ASN1RangeInt(0, 10)], ev=[])
right = ASN1Set(rr=[ASN1RangeInt(5, 15)], ev=[])
inter = left.intersect(right)
assert( inter.in_root(7) and not inter.in_root(20) )
assert( inter.in_ext(20) )
return 0

def test_rt_base():
_load_rt_base()
_test_rt_base()
Expand Down
1 change: 1 addition & 0 deletions test/test_pycrate.py
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,7 @@ def test_asn1c_to_asn1(self):
# asn1rt
def test_asn1rt(self):
print('[<>] testing pycrate_asn1rt')
test_setobj_intersect()
test_rt_base()
test_rrc3g()
test_lteran()
Expand Down
Loading