[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