def test_while(): cnt = count() out = glom(cnt, Iter().takewhile(lambda x: x < 3)) assert list(out) == [0, 1, 2] assert next(cnt) == 4 assert repr(Iter().takewhile(T.a) == 'Iter().takewhile(T.a)') range_iter = iter(range(7)) out = glom(range_iter, Iter().dropwhile(lambda x: x < 3 or x > 5)) assert list(out) == [3, 4, 5, 6] # 6 still here despite the x>5 above out = glom(range(10), Iter().dropwhile(lambda x: x >= 0).limit(10)) assert list(out) == [] out = glom(range(8), Iter().dropwhile((T.bit_length(), lambda x: x < 3))) assert list(out) == [4, 5, 6, 7] assert repr(Iter().dropwhile(T.a) == 'Iter().dropwhile(T.a)')
def test_corner_cases(): target = range(5) # immediate stop dict assert glom(target, Group({(lambda t: STOP): [T]})) == {} # immediate stop list assert glom(target, Group([lambda t: STOP])) == [] # dict key SKIP assert glom(target, Group({(lambda t: SKIP if t < 3 else t): T})) == { 3: 3, 4: 4 } # dict val SKIP assert glom(target, Group({T: lambda t: t if t % 2 else SKIP})) == { 3: 3, 1: 1 } # list val SKIP assert glom(target, Group([lambda t: t if t % 2 else SKIP])) == [1, 3] # embedded auto spec (lol @ 0 being 0 bit length) assert glom(target, Group({Auto(('bit_length', T())): [T]})) == { 0: [0], 1: [1], 2: [2, 3], 3: [4] } # no dicts inside lists in Group mode with raises(BadSpec): assert glom(target, Group([{T: T}])) # check only supported types with raises(BadSpec): assert glom(target, Group('no string support yet')) # bucket ints by their bit length and then odd/even, limited to 3 per bucket spec = Group({T.bit_length(): {lambda t: t % 2: Limit(3)}}) res = glom(range(20), spec) assert res == { 0: { 0: [0] }, 1: { 1: [1] }, 2: { 0: [2], 1: [3] }, 3: { 0: [4, 6], 1: [5, 7] }, 4: { 0: [8, 10, 12], 1: [9, 11, 13] } } return