assert list(zip(["a", "b", "c"], range(3), [9, 8, 7, 99])) == [
    ("a", 0, 9),
    ("b", 1, 8),
    ("c", 2, 7),
]

assert list(zip(["a", "b", "c"])) == [("a",), ("b",), ("c",)]
assert list(zip()) == []

assert list(zip(*zip(["a", "b", "c"], range(1, 4)))) == [("a", "b", "c"), (1, 2, 3)]


# test infinite iterator
class Counter(object):
    def __init__(self, counter=0):
        self.counter = counter

    def __next__(self):
        self.counter += 1
        return self.counter

    def __iter__(self):
        return self


it = zip(Counter(), Counter(3))
assert next(it) == (1, 4)
assert next(it) == (2, 5)
