[Python-checkins] python/nondist/sandbox/setobj test_set.py, 1.18,
1.19
rhettinger at users.sourceforge.net
rhettinger at users.sourceforge.net
Sat Nov 15 16:43:44 EST 2003
Update of /cvsroot/python/python/nondist/sandbox/setobj
In directory sc8-pr-cvs1:/tmp/cvs-serv13207
Modified Files:
test_set.py
Log Message:
Add tests from test_itertools.py that try-out many types of iterable
input to constructors and methods that accept iterables.
Index: test_set.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/setobj/test_set.py,v
retrieving revision 1.18
retrieving revision 1.19
diff -C2 -d -r1.18 -r1.19
*** test_set.py 15 Nov 2003 20:41:37 -0000 1.18
--- test_set.py 15 Nov 2003 21:43:42 -0000 1.19
***************
*** 994,997 ****
--- 994,1114 ----
self.assertEqual((a&b)&(a^b), zero)
+ # Tests derived from test_itertools.py =======================================
+
+ def R(seqn):
+ 'Regular generator'
+ for i in seqn:
+ yield i
+
+ class G:
+ 'Sequence using __getitem__'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ def __getitem__(self, i):
+ return self.seqn[i]
+
+ class I:
+ 'Sequence using iterator protocol'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ return self
+ def next(self):
+ if self.i >= len(self.seqn): raise StopIteration
+ v = self.seqn[self.i]
+ self.i += 1
+ return v
+
+ class Ig:
+ 'Sequence using iterator protocol defined with a generator'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ for val in self.seqn:
+ yield val
+
+ class X:
+ 'Missing __getitem__ and __iter__'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def next(self):
+ if self.i >= len(self.seqn): raise StopIteration
+ v = self.seqn[self.i]
+ self.i += 1
+ return v
+
+ class N:
+ 'Iterator missing next()'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ return self
+
+ class E:
+ 'Test propagation of exceptions'
+ def __init__(self, seqn):
+ self.seqn = seqn
+ self.i = 0
+ def __iter__(self):
+ return self
+ def next(self):
+ 3/0
+
+ class S:
+ 'Test immediate stop'
+ def __init__(self, seqn):
+ pass
+ def __iter__(self):
+ return self
+ def next(self):
+ raise StopIteration
+
+ from itertools import chain, imap
+ def L(seqn):
+ 'Test multiple tiers of iterators'
+ return chain(imap(lambda x:x, R(Ig(G(seqn)))))
+
+ class TestVariousIteratorArgs(unittest.TestCase):
+
+ def test_constructor(self):
+ for cons in (set, frozenset):
+ for s in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5)):
+ for g in (G, I, Ig, S, L, R):
+ self.assertEqual(list.sorted(cons(g(s))), list.sorted(g(s)))
+ self.assertRaises(TypeError, cons , X(s))
+ self.assertRaises(TypeError, cons , N(s))
+ self.assertRaises(ZeroDivisionError, cons , E(s))
+
+ def test_inline_methods(self):
+ s = set('november')
+ for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
+ for meth in (s.union, s.intersection, s.difference, s.symmetric_difference):
+ for g in (G, I, Ig, L, R):
+ expected = meth(data)
+ actual = meth(G(data))
+ self.assertEqual(list.sorted(actual), list.sorted(expected))
+ self.assertRaises(TypeError, meth, X(s))
+ self.assertRaises(TypeError, meth, N(s))
+ self.assertRaises(ZeroDivisionError, meth, E(s))
+
+ def test_inplace_methods(self):
+ for data in ("123", "", range(1000), ('do', 1.2), xrange(2000,2200,5), 'december'):
+ for methname in ('union_update', 'intersection_update',
+ 'difference_update', 'symmetric_difference_update'):
+ for g in (G, I, Ig, S, L, R):
+ s = set('january')
+ t = set('january')
+ getattr(s, methname)(list(g(data)))
+ getattr(t, methname)(g(data))
+ self.assertEqual(list.sorted(s), list.sorted(t))
+
+ self.assertRaises(TypeError, getattr(set('january'), methname), X(data))
+ self.assertRaises(TypeError, getattr(set('january'), methname), N(data))
+ self.assertRaises(ZeroDivisionError, getattr(set('january'), methname), E(data))
+
#==============================================================================
***************
*** 1028,1031 ****
--- 1145,1149 ----
TestCopyingNested,
TestIdentities,
+ TestVariousIteratorArgs,
)
More information about the Python-checkins
mailing list