# HG changeset patch # User Paul Boddie # Date 1480291210 -3600 # Node ID 7267486338ae59baee7b39fe31bfa5e536236877 # Parent cc05fadb5fb43d1392612ac93c1992270cd5885d Expanded and improved the tests. diff -r cc05fadb5fb4 -r 7267486338ae tests/aliases.py --- a/tests/aliases.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/aliases.py Mon Nov 28 01:00:10 2016 +0100 @@ -4,8 +4,8 @@ D = C # alias for C -print C # "__main__.C" -print D # "__main__.C" +print C # __main__.C +print D # __main__.C class E: def m(self): @@ -13,8 +13,8 @@ F = E # alias for E -print E # "__main__.E" -print F # "__main__.E" +print E # __main__.E +print F # __main__.E def f(): c = C @@ -22,20 +22,20 @@ cm = C.m dm = D.m # C.m - print c # "__main__.C" - print d # "__main__.C" - print cm # "__main__.C.m" - print dm # "__main__.C.m" + print c # __main__.C + print d # __main__.C + print cm # __main__.C.m + print dm # __main__.C.m c = E d = F # E cm = E.m dm = F.m # E.m - print c # "__main__.E" - print d # "__main__.E" - print cm # "__main__.E.m" - print dm # "__main__.E.m" + print c # __main__.E + print d # __main__.E + print cm # __main__.E.m + print dm # __main__.E.m f() @@ -44,17 +44,17 @@ Em = E.m Fm = F.m -print Cm # "__main__.C.m" -print Dm # "__main__.C.m" -print Em # "__main__.E.m" -print Fm # "__main__.E.m" +print Cm # __main__.C.m +print Dm # __main__.C.m +print Em # __main__.E.m +print Fm # __main__.E.m def g(): Cm = E.m Dm = F.m # E.m - print Cm # "__main__.E.m" - print Dm # "__main__.E.m" + print Cm # __main__.E.m + print Dm # __main__.E.m g() @@ -63,36 +63,36 @@ Em = C.m Fm = D.m # C.m - print Em # "__main__.C.m" - print Fm # "__main__.C.m" + print Em # __main__.C.m + print Fm # __main__.C.m h() -print Em # "__main__.C.m" -print Fm # "__main__.C.m" +print Em # __main__.C.m +print Fm # __main__.C.m Ci = C() Ei = E() -print Ci # "<__main__.C instance>" -print Ei # "<__main__.E instance>" +print Ci # <__main__.C instance> +print Ei # <__main__.E instance> def i(): c = Ci - print c # "<__main__.C instance>" + print c # <__main__.C instance> c = Ei - print c # "<__main__.E instance>" + print c # <__main__.E instance> i() def j(): global Ei Ei = C() - print Ei # "<__main__.C instance>" + print Ei # <__main__.C instance> j() -print Ei # "<__main__.C instance>" +print Ei # <__main__.C instance> L = [] M = [1] diff -r cc05fadb5fb4 -r 7267486338ae tests/builtin_names.py --- a/tests/builtin_names.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/builtin_names.py Mon Nov 28 01:00:10 2016 +0100 @@ -1,2 +1,4 @@ def f(): - StopIteration + return StopIteration + +print f() diff -r cc05fadb5fb4 -r 7267486338ae tests/chain.py --- a/tests/chain.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/chain.py Mon Nov 28 01:00:10 2016 +0100 @@ -31,9 +31,18 @@ g = C.D.E.n h = C.D.p + print c # __main__.C + print d # __main__.C.D + print e # __main__.C.D.E + print f # __main__.C.D.E.m + print g # 123 + print h # "456" + def static_via_constant(): i = C.D.p.__len__ + print i # __builtins__.str.basestring.__len__ + def assign(): C.D.q = 987 @@ -46,12 +55,17 @@ def broken(): inst2 = C.D.F() l = inst2.u().__len__ + return l static() static_via_constant() assign() -result1 = indirect() -broken() +print indirect() # __builtins__.str.basestring.__len__ +print indirect()() # 3 +print broken() # __builtins__.str.basestring.__len__ +print broken()() # 3 + +print C.D.q # 987 # Static chains. @@ -62,21 +76,36 @@ g = C.D.E.n h = C.D.p +print c # __main__.C +print d # __main__.C.D +print e # __main__.C.D.E +print f # __main__.C.D.E.m +print g # 123 +print h # "456" + # Static via constant. i = C.D.p.__len__ +print i # __builtins__.str.basestring.__len__ +print i() # 3 + # Static assignment. -C.D.q = 987 +C.D.q = 654 + +print C.D.q # 654 # Indirect accesses. inst = e() method = inst.m -result2 = method("5") +print method("5") # __builtins__.str.basestring.__len__ +print method("5")() # 3 # Broken chains. inst2 = C.D.F() l = inst2.u().__len__ +print l # __builtins__.str.basestring.__len__ +print l() # 3 diff -r cc05fadb5fb4 -r 7267486338ae tests/consts.py --- a/tests/consts.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/consts.py Mon Nov 28 01:00:10 2016 +0100 @@ -2,15 +2,20 @@ s = "test" m = s.__len__ n = "test".__len__ - print m() + print m # __builtins__.str.basestring.__len__ + print m() # 4 + print n # __builtins__.str.basestring.__len__ print n() def g(): - l = [1] + l = [1, 2] m = l.__len__ - n = [1].__len__ - print m() - print n() + n = [1, 2].__len__ + print l # [1, 2] + print m # __builtins__.list.list.__len__ + print m() # 2 + print n # __builtins__.list.list.__len__ + print n() # 2 f() g() diff -r cc05fadb5fb4 -r 7267486338ae tests/contexts.py --- a/tests/contexts.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/contexts.py Mon Nov 28 01:00:10 2016 +0100 @@ -9,25 +9,39 @@ c = C([1]) x = c.x f = c.x.__len__ -print f() # 1 +print c # <__main__.C instance> +print x # [1] +print f # __builtins__.list.list.__len__ +print f() # 1 y = c.l g = c.l.__len__ -print g() # 5 +print y # [2, 4, 6, 8, 10] +print g # __builtins__.list.list.__len__ +print g() # 5 yy = C.l gg = C.l.__len__ -print gg() # 5 +print yy # [2, 4, 6, 8, 10] +print gg # __builtins__.list.list.__len__ +print gg() # 5 z = c.s h = c.s.__len__ -print h() # 4 +print z # test +print h # __builtins__.str.basestring.__len__ +print h() # 4 zz = C.s hh = C.s.__len__ -print hh() # 4 +print zz # test +print hh # __builtins__.str.basestring.__len__ +print hh() # 4 a = c.y b = c.z i = c.z.__len__ -print i() # 11 +print a # 3 +print b # zebra libre +print i # __builtins__.str.basestring.__len__ +print i() # 11 diff -r cc05fadb5fb4 -r 7267486338ae tests/global_names.py --- a/tests/global_names.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/global_names.py Mon Nov 28 01:00:10 2016 +0100 @@ -3,9 +3,24 @@ def f(): x = g.x + print x # 3 y = g + print y # __main__.C return y.x +def i(): + x = h.x + y = h + return y + g = C result = f() -print result # 3 +print result # 3 + +h = C +print i() # __main__.C +print i().x # 3 + +h = C() +print i() # <__main__.C instance> +print i().x # 3 diff -r cc05fadb5fb4 -r 7267486338ae tests/list.py --- a/tests/list.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/list.py Mon Nov 28 01:00:10 2016 +0100 @@ -1,16 +1,26 @@ l = [1, 2, 3] l.append("four") -print len(l) -print l[0] -print l[1] -print l[2] -print l[3] -print l[-1] -print l[-2] -print l[-3] -print l[-4] -print l +print len(l) # 3 +print l[0] # 1 +print l[1] # 2 +print l[2] # 3 +print l[3] # four +print l[-1] # four +print l[-2] # 3 +print l[-3] # 2 +print l[-4] # 1 +print l # [1, 2, 3, "four"] t = (1, 2, 3, "four") l = list(t) -print l +print l # [1, 2, 3, "four"] + +try: + print l[4] # should raise an exception +except IndexError, exc: + print "l[4]: failed with argument", exc.index + +try: + print l[-5] # should raise an exception +except IndexError, exc: + print "l[-5]: failed with argument", exc.index diff -r cc05fadb5fb4 -r 7267486338ae tests/nested.py --- a/tests/nested.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/nested.py Mon Nov 28 01:00:10 2016 +0100 @@ -7,9 +7,9 @@ return h return g -result = f(1)(2)(3) -print result[0] -print result[1] -print result[2] -print result[3] -assert result == (1, 2, 3, 4) +fn = f(1) +print fn # __main__.f.$l0 +print fn(2) # __main__.f.$l0.$l0 +print fn(2)(3) # (1, 2, 3, 4) +print fn(2)(3, 5) # (5, 2, 3, 4) +print fn(2)(3, 5, 6) # (5, 6, 3, 4) diff -r cc05fadb5fb4 -r 7267486338ae tests/nested_lambda.py --- a/tests/nested_lambda.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/nested_lambda.py Mon Nov 28 01:00:10 2016 +0100 @@ -1,12 +1,17 @@ a = 4 def f(x): + # f.$l0 f.$l0.$l0 g = lambda y, x=x: lambda z, x=x, y=y: (x, y, z, a) return g +print f # __main__.f +print f(1) # __main__.f.$l0 +print f(1)(2) # __main__.f.$l0.$l0 + result = f(1)(2)(3) print result[0] print result[1] print result[2] print result[3] -assert result == (1, 2, 3, 4) +print result # (1, 2, 3, 4) diff -r cc05fadb5fb4 -r 7267486338ae tests/nested_mixed.py --- a/tests/nested_mixed.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/nested_mixed.py Mon Nov 28 01:00:10 2016 +0100 @@ -1,15 +1,23 @@ a = 4 def f(x): + + # Test function initialisation (f.$l0). + def g(y, x=x): + + # Test function initialisation (f.$l0.$l0). + def h(a, z, x=x, y=y): return x, y, z, a # parameter a overrides global scope + return h + return g -result = f(1)(2)(5, 3) -print result[0] -print result[1] -print result[2] -print result[3] -assert result == (1, 2, 3, 5) +fn = f(1) +print fn # __main__.f.$l0 +print fn(2) # __main__.f.$l0.$l0 +print fn(2)(5, 3) # (1, 2, 3, 5) +print fn(2)(5, 3, 6) # (6, 2, 3, 5) +print fn(2)(5, 3, 6, 7) # (6, 7, 3, 5) diff -r cc05fadb5fb4 -r 7267486338ae tests/nested_mixed_names.py --- a/tests/nested_mixed_names.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/nested_mixed_names.py Mon Nov 28 01:00:10 2016 +0100 @@ -2,22 +2,66 @@ def c(self): return 1 -class D: +class D(C): def d(self): return 3 a = 4 +l = [] def f(x): - x.c() + + # Test global mutation. + + l.append(x.c()) + + # Test function initialisation. + def g(y, x=x): # x must be introduced as default here if y: x = D() return x.d(), y, a # UnboundLocalError in Python (if y is a false value) + return g -result = f(C())(2) -print result[0] -print result[1] -print result[2] -assert result == (3, 2, 4) +# Provide a default instance for a function to be obtained. + +fn = f(C()) +print l # [1] +print fn # __main__.f.$l0 +try: + print fn(2) # should fail due to g requiring an object providing d +except TypeError: + print "fn(2): fn initialised with an inappropriate object" + +try: + print fn(0) # should fail due to g requiring an object providing d +except TypeError: + print "fn(0): fn initialised with an inappropriate object" + +# Override the default when calling the function. + +print fn(2, D()) # (3, 2, 4) +print fn(0, D()) # (3, 0, 4) + +# Provide a more suitable default instance for the function. + +fn = f(D()) +print l # [1, 1] +print fn(2) # (3, 2, 4) +print fn(0) # (3, 0, 4) +print fn(0, D()) # (3, 0, 4) + +# Override with an unsuitable object even though it would be ignored. + +try: + print fn(1, C()) +except TypeError: + print "fn(1, C()): an unsuitable argument was given." + +# Override with an unsuitable object. + +try: + print fn(0, C()) +except TypeError: + print "fn(0, C()): an unsuitable argument was given." diff -r cc05fadb5fb4 -r 7267486338ae tests/tuple.py --- a/tests/tuple.py Mon Nov 28 00:59:41 2016 +0100 +++ b/tests/tuple.py Mon Nov 28 01:00:10 2016 +0100 @@ -1,15 +1,25 @@ l = (1, 2, 3, "four") -print len(l) -print l[0] -print l[1] -print l[2] -print l[3] -print l[-1] -print l[-2] -print l[-3] -print l[-4] -print l +print len(l) # 4 +print l[0] # 1 +print l[1] # 2 +print l[2] # 3 +print l[3] # four +print l[-1] # four +print l[-2] # 3 +print l[-3] # 2 +print l[-4] # 1 +print l # (1, 2, 3, "four") l = [1, 2, 3, "four"] t = tuple(l) -print t +print t # (1, 2, 3, "four") + +try: + print t[4] # should raise an exception +except IndexError, exc: + print "t[4]: failed with argument", exc.index + +try: + print t[-5] # should raise an exception +except IndexError, exc: + print "t[-5]: failed with argument", exc.index