symbian-qemu-0.9.1-12/python-win32-2.6.1/lib/test/crashers/iter.py
author Mike Kinghan <mikek@symbian.org>
Thu, 25 Nov 2010 14:28:39 +0000
branchGCC_SURGE
changeset 135 10852f1a0ae9
parent 1 2fb8b9db1c86
permissions -rw-r--r--
Merge a pointless head that got away.

# Calls to PyIter_Next, or direct calls to tp_iternext, on an object
# which might no longer be an iterable because its 'next' method was
# removed.  These are all variants of Issue3720.

"""
Run this script with an argument between 1 and <N> to test for
different crashes.
"""
N = 8

import sys

class Foo(object):
    def __iter__(self):
        return self
    def next(self):
        del Foo.next
        return (1, 2)

def case1():
    list(enumerate(Foo()))

def case2():
    x, y = Foo()

def case3():
    filter(None, Foo())

def case4():
    map(None, Foo(), Foo())

def case5():
    max(Foo())

def case6():
    sum(Foo(), ())

def case7():
    dict(Foo())

def case8():
    sys.stdout.writelines(Foo())

# etc...


if __name__ == '__main__':
    if len(sys.argv) < 2:
        print __doc__.replace('<N>', str(N))
    else:
        n = int(sys.argv[1])
        func = globals()['case%d' % n]
        func()