diff options
author | Barry Warsaw <barry@python.org> | 1997-08-25 22:17:45 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1997-08-25 22:17:45 (GMT) |
commit | 09f9547393770d5b305ee217b1b650402662beda (patch) | |
tree | 0f786f8f311a2dbc84d9162e9c88e72c5247f743 /Lib/test | |
parent | 9525df03bf40916e2b874d58942a79753f1ca2c9 (diff) | |
download | cpython-09f9547393770d5b305ee217b1b650402662beda.zip cpython-09f9547393770d5b305ee217b1b650402662beda.tar.gz cpython-09f9547393770d5b305ee217b1b650402662beda.tar.bz2 |
regression test for new sequence unpacking semantics
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_unpack.py | 131 |
1 files changed, 131 insertions, 0 deletions
diff --git a/Lib/test/test_unpack.py b/Lib/test/test_unpack.py new file mode 100644 index 0000000..1f69504 --- /dev/null +++ b/Lib/test/test_unpack.py @@ -0,0 +1,131 @@ +from test_support import * + +t = (1, 2, 3) +l = [4, 5, 6] + +class Seq: + def __getitem__(self, i): + if i >= 0 and i < 3: return i + raise IndexError + +a = -1 +b = -1 +c = -1 + +# unpack tuple +if verbose: + print 'unpack tuple' +a, b, c = t +if a <> 1 or b <> 2 or c <> 3: + raise TestFailed + +# unpack list +if verbose: + print 'unpack list' +a, b, c = l +if a <> 4 or b <> 5 or c <> 6: + raise TestFailed + +# unpack implied tuple +if verbose: + print 'unpack implied tuple' +a, b, c = 7, 8, 9 +if a <> 7 or b <> 8 or c <> 9: + raise TestFailed + +# unpack string... fun! +if verbose: + print 'unpack string' +a, b, c = 'one' +if a <> 'o' or b <> 'n' or c <> 'e': + raise TestFailed + +# unpack generic sequence +if verbose: + print 'unpack sequence' +a, b, c = Seq() +if a <> 0 or b <> 1 or c <> 2: + raise TestFailed + +# now for some failures + +# unpacking non-sequence +if verbose: + print 'unpack non-sequence' +try: + a, b, c = 7 + raise TestFailed +except TypeError: + pass + + +# unpacking tuple of wrong size +if verbose: + print 'unpack tuple wrong size' +try: + a, b = t + raise TestFailed +except ValueError: + pass + +# unpacking list of wrong size +if verbose: + print 'unpack list wrong size' +try: + a, b = l + raise TestFailed +except ValueError: + pass + + +# unpacking sequence too short +if verbose: + print 'unpack sequence too short' +try: + a, b, c, d = Seq() + raise TestFailed +except ValueError: + pass + + +# unpacking sequence too long +if verbose: + print 'unpack sequence too long' +try: + a, b = Seq() + raise TestFailed +except ValueError: + pass + + +# unpacking a sequence where the test for too long raises a different +# kind of error +BozoError = 'BozoError' + +class BadSeq: + def __getitem__(self, i): + if i >= 0 and i < 3: + return i + elif i == 3: + raise BozoError + else: + raise IndexError + + +# trigger code while not expecting an IndexError +if verbose: + print 'unpack sequence too long, wrong error' +try: + a, b, c, d, e = BadSeq() + raise TestFailed +except BozoError: + pass + +# trigger code while expecting an IndexError +if verbose: + print 'unpack sequence too short, wrong error' +try: + a, b, c = BadSeq() + raise TestFailed +except BozoError: + pass |