]> granicus.if.org Git - python/commitdiff
Add testcases for inheritance from tricky builtins (numbers, strings,
authorGuido van Rossum <guido@python.org>
Thu, 30 Aug 2001 20:06:08 +0000 (20:06 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 30 Aug 2001 20:06:08 +0000 (20:06 +0000)
tuples).

Lib/test/test_descr.py

index 54b03b2f9bc03f72fa27e36df64ba0c539c72a50..ec966a13d53f0fe919e1385352527f1010b758ba 100644 (file)
@@ -1120,6 +1120,79 @@ def supers():
 
     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()
     dicts()
@@ -1151,6 +1224,7 @@ def all():
     weakrefs()
     getsets()
     supers()
+    inherits()
 
 all()