from testutils import assert_raises def test_container(x): assert 3 in x assert 4 not in x assert list(x) == list(iter(x)) assert list(x) == [0, 1, 2, 3] assert [*x] == [0, 1, 2, 3] lst = [] lst.extend(x) assert lst == [0, 1, 2, 3] class C: def __iter__(self): return iter([0, 1, 2, 3]) test_container(C()) class C: def __getitem__(self, x): return (0, 1, 2, 3)[x] # raises IndexError on x==4 test_container(C()) class C: def __getitem__(self, x): if x > 3: raise StopIteration return x test_container(C()) class C: pass assert_raises(TypeError, lambda: 5 in C()) assert_raises(TypeError, iter, C) it = iter([1,2,3,4,5]) call_it = iter(lambda: next(it), 4) assert list(call_it) == [1,2,3]