blob: b55057de79dfe299deb6ddb68f954f3da94c4642 [file] [log] [blame]
Walter Dörwald1f5947b2007-05-22 16:52:54 +00001from test.test_support import TestFailed
Guido van Rossum24512e62000-03-06 21:00:29 +00002
3class base_set:
4
Fred Drake004d5e62000-10-23 17:22:08 +00005 def __init__(self, el):
6 self.el = el
Guido van Rossum24512e62000-03-06 21:00:29 +00007
8class set(base_set):
9
Fred Drake004d5e62000-10-23 17:22:08 +000010 def __contains__(self, el):
11 return self.el == el
Guido van Rossum24512e62000-03-06 21:00:29 +000012
13class seq(base_set):
14
Fred Drake004d5e62000-10-23 17:22:08 +000015 def __getitem__(self, n):
16 return [self.el][n]
Guido van Rossum24512e62000-03-06 21:00:29 +000017
18def check(ok, *args):
19 if not ok:
Collin Winter3add4d72007-08-29 23:37:32 +000020 raise TestFailed(" ".join(map(str, args)))
Guido van Rossum24512e62000-03-06 21:00:29 +000021
22a = base_set(1)
23b = set(1)
24c = seq(1)
25
26check(1 in b, "1 not in set(1)")
27check(0 not in b, "0 in set(1)")
28check(1 in c, "1 not in seq(1)")
29check(0 not in c, "0 in seq(1)")
30
31try:
Fred Drake004d5e62000-10-23 17:22:08 +000032 1 in a
33 check(0, "in base_set did not raise error")
Tim Petersde9725f2001-05-05 10:06:17 +000034except TypeError:
Fred Drake004d5e62000-10-23 17:22:08 +000035 pass
Guido van Rossum24512e62000-03-06 21:00:29 +000036
37try:
Fred Drake004d5e62000-10-23 17:22:08 +000038 1 not in a
39 check(0, "not in base_set did not raise error")
Tim Petersde9725f2001-05-05 10:06:17 +000040except TypeError:
Fred Drake004d5e62000-10-23 17:22:08 +000041 pass
Guido van Rossumda2361a2000-03-07 15:52:01 +000042
43# Test char in string
44
45check('c' in 'abc', "'c' not in 'abc'")
46check('d' not in 'abc', "'d' in 'abc'")
47
Barry Warsaw817918c2002-08-06 16:58:21 +000048check('' in '', "'' not in ''")
49check('' in 'abc', "'' not in 'abc'")
Guido van Rossumda2361a2000-03-07 15:52:01 +000050
51try:
Fred Drake004d5e62000-10-23 17:22:08 +000052 None in 'abc'
53 check(0, "None in 'abc' did not raise error")
Guido van Rossumda2361a2000-03-07 15:52:01 +000054except TypeError:
Fred Drake004d5e62000-10-23 17:22:08 +000055 pass
Guido van Rossum45ad3c42000-04-10 13:52:13 +000056
Guido van Rossum45ad3c42000-04-10 13:52:13 +000057
Jeremy Hylton035a07e2000-04-27 21:40:08 +000058# A collection of tests on builtin sequence types
Guido van Rossum805365e2007-05-07 22:24:25 +000059a = list(range(10))
Jeremy Hylton035a07e2000-04-27 21:40:08 +000060for i in a:
Walter Dörwald70a6b492004-02-12 17:35:32 +000061 check(i in a, "%r not in %r" % (i, a))
62check(16 not in a, "16 not in %r" % (a,))
63check(a not in a, "%s not in %r" % (a, a))
Jeremy Hylton035a07e2000-04-27 21:40:08 +000064
65a = tuple(a)
66for i in a:
Walter Dörwald70a6b492004-02-12 17:35:32 +000067 check(i in a, "%r not in %r" % (i, a))
68check(16 not in a, "16 not in %r" % (a,))
69check(a not in a, "%r not in %r" % (a, a))
Jeremy Hylton035a07e2000-04-27 21:40:08 +000070
71class Deviant1:
Fred Drake004d5e62000-10-23 17:22:08 +000072 """Behaves strangely when compared
Jeremy Hylton035a07e2000-04-27 21:40:08 +000073
Fred Drake004d5e62000-10-23 17:22:08 +000074 This class is designed to make sure that the contains code
75 works when the list is modified during the check.
76 """
Jeremy Hylton035a07e2000-04-27 21:40:08 +000077
Guido van Rossum805365e2007-05-07 22:24:25 +000078 aList = list(range(15))
Fred Drake004d5e62000-10-23 17:22:08 +000079
80 def __cmp__(self, other):
81 if other == 12:
82 self.aList.remove(12)
83 self.aList.remove(13)
84 self.aList.remove(14)
85 return 1
Jeremy Hylton035a07e2000-04-27 21:40:08 +000086
87check(Deviant1() not in Deviant1.aList, "Deviant1 failed")
88
89class Deviant2:
Fred Drake004d5e62000-10-23 17:22:08 +000090 """Behaves strangely when compared
Jeremy Hylton035a07e2000-04-27 21:40:08 +000091
Fred Drake004d5e62000-10-23 17:22:08 +000092 This class raises an exception during comparison. That in
93 turn causes the comparison to fail with a TypeError.
94 """
Jeremy Hylton035a07e2000-04-27 21:40:08 +000095
Fred Drake004d5e62000-10-23 17:22:08 +000096 def __cmp__(self, other):
97 if other == 4:
Collin Winter3add4d72007-08-29 23:37:32 +000098 raise RuntimeError("gotcha")
Jeremy Hylton035a07e2000-04-27 21:40:08 +000099
100try:
Fred Drake004d5e62000-10-23 17:22:08 +0000101 check(Deviant2() not in a, "oops")
Jeremy Hylton035a07e2000-04-27 21:40:08 +0000102except TypeError:
Fred Drake004d5e62000-10-23 17:22:08 +0000103 pass