@@ -457,6 +457,19 @@ def __iter__(self):
457
457
sage: list(islice(iter(U), 5)) # not tested, hangs
458
458
sage: list(islice(iter(U), 4))
459
459
[(0, 1), (0, 2), (1, 1), (1, 2)]
460
+
461
+ Coverage test in case some element sets does not know it is finite
462
+ but correctly raises :exc:`StopIteration` during iteration::
463
+
464
+ sage: from sage.sets.set import Set_object
465
+ sage: class UnknowinglyFiniteSet(Set_object):
466
+ ....: def is_finite(self):
467
+ ....: return False
468
+ sage: [*UnknowinglyFiniteSet([1, 2, 3])]
469
+ sage: [*iter(UnknowinglyFiniteSet([1, 2, 3]))]
470
+ sage: list(islice(DisjointUnionEnumeratedSets(
471
+ ....: (UnknowinglyFiniteSet(frozenset([1,2,3])), UnknowinglyFiniteSet(frozenset([4,5,6])))), 7))
472
+ [1, 2, 4, 3, 5, 6]
460
473
"""
461
474
def wrap_element (el , k ):
462
475
nonlocal self
@@ -481,7 +494,7 @@ def wrap_element(el, k):
481
494
el_set = self ._family [k ]
482
495
try :
483
496
is_finite = el_set .is_finite ()
484
- except (AttributeError , NotImplementedError ):
497
+ except (AttributeError , TypeError , NotImplementedError ):
485
498
is_finite = False
486
499
if is_finite :
487
500
for el in el_set :
0 commit comments