[Python-checkins] CVS: python/dist/src/Lib/test test_descr.py,1.25,1.26

Guido van Rossum gvanrossum@users.sourceforge.net
Thu, 30 Aug 2001 13:06:11 -0700


Update of /cvsroot/python/python/dist/src/Lib/test
In directory usw-pr-cvs1:/tmp/cvs-serv30722

Modified Files:
	test_descr.py 
Log Message:
Add testcases for inheritance from tricky builtins (numbers, strings,
tuples).


Index: test_descr.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/test/test_descr.py,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** test_descr.py	2001/08/29 15:48:43	1.25
--- test_descr.py	2001/08/30 20:06:08	1.26
***************
*** 1121,1124 ****
--- 1121,1197 ----
      verify (D().meth(4) == "D(4)C(4)B(4)A(4)")
  
+ def inherits():
+     if verbose: print "Testing inheritance from basic types..."
+ 
+     class hexint(int):
+         def __repr__(self):
+             return hex(self)
+         def __add__(self, other):
+             return hexint(int.__add__(self, other))
+         # (Note that overriding __radd__ doesn't work,
+         # because the int type gets first dibs.)
+     verify(repr(hexint(7) + 9) == "0x10")
+     verify(repr(hexint(1000) + 7) == "0x3ef")
+ 
+     class octlong(long):
+         __slots__ = []
+         def __str__(self):
+             s = oct(self)
+             if s[-1] == 'L':
+                 s = s[:-1]
+             return s
+         def __add__(self, other):
+             return self.__class__(super(octlong, self).__add__(other))
+         __radd__ = __add__
+     verify(str(octlong(3) + 5) == "010")
+     # (Note that overriding __radd__ here only seems to work
+     # because the example uses a short int left argument.)
+     verify(str(5 + octlong(3000)) == "05675")
+ 
+     class precfloat(float):
+         __slots__ = ['prec']
+         def __init__(self, value=0.0, prec=12):
+             self.prec = int(prec)
+             float.__init__(value)
+         def __repr__(self):
+             return "%.*g" % (self.prec, self)
+     verify(repr(precfloat(1.1)) == "1.1")
+ 
+     class madtuple(tuple):
+         _rev = None
+         def rev(self):
+             if self._rev is not None:
+                 return self._rev
+             L = list(self)
+             L.reverse()
+             self._rev = self.__class__(L)
+             return self._rev
+     a = madtuple((1,2,3,4,5,6,7,8,9,0))
+     verify(a.rev() == madtuple((0,9,8,7,6,5,4,3,2,1)))
+     verify(a.rev().rev() == madtuple((1,2,3,4,5,6,7,8,9,0)))
+     for i in range(512):
+         t = madtuple(range(i))
+         u = t.rev()
+         v = u.rev()
+         verify(v == t)
+ 
+     class madstring(str):
+         _rev = None
+         def rev(self):
+             if self._rev is not None:
+                 return self._rev
+             L = list(self)
+             L.reverse()
+             self._rev = self.__class__("".join(L))
+             return self._rev
+     s = madstring("abcdefghijklmnopqrstuvwxyz")
+     verify(s.rev() == madstring("zyxwvutsrqponmlkjihgfedcba"))
+     verify(s.rev().rev() == madstring("abcdefghijklmnopqrstuvwxyz"))
+     for i in range(256):
+         s = madstring("".join(map(chr, range(i))))
+         t = s.rev()
+         u = t.rev()
+         verify(u == s)
+ 
  def all():
      lists()
***************
*** 1152,1155 ****
--- 1225,1229 ----
      getsets()
      supers()
+     inherits()
  
  all()