1.1 --- a/tests/aliases.py Mon Nov 28 00:59:41 2016 +0100
1.2 +++ b/tests/aliases.py Mon Nov 28 01:00:10 2016 +0100
1.3 @@ -4,8 +4,8 @@
1.4
1.5 D = C # alias for C
1.6
1.7 -print C # "__main__.C"
1.8 -print D # "__main__.C"
1.9 +print C # __main__.C
1.10 +print D # __main__.C
1.11
1.12 class E:
1.13 def m(self):
1.14 @@ -13,8 +13,8 @@
1.15
1.16 F = E # alias for E
1.17
1.18 -print E # "__main__.E"
1.19 -print F # "__main__.E"
1.20 +print E # __main__.E
1.21 +print F # __main__.E
1.22
1.23 def f():
1.24 c = C
1.25 @@ -22,20 +22,20 @@
1.26 cm = C.m
1.27 dm = D.m # C.m
1.28
1.29 - print c # "__main__.C"
1.30 - print d # "__main__.C"
1.31 - print cm # "__main__.C.m"
1.32 - print dm # "__main__.C.m"
1.33 + print c # __main__.C
1.34 + print d # __main__.C
1.35 + print cm # __main__.C.m
1.36 + print dm # __main__.C.m
1.37
1.38 c = E
1.39 d = F # E
1.40 cm = E.m
1.41 dm = F.m # E.m
1.42
1.43 - print c # "__main__.E"
1.44 - print d # "__main__.E"
1.45 - print cm # "__main__.E.m"
1.46 - print dm # "__main__.E.m"
1.47 + print c # __main__.E
1.48 + print d # __main__.E
1.49 + print cm # __main__.E.m
1.50 + print dm # __main__.E.m
1.51
1.52 f()
1.53
1.54 @@ -44,17 +44,17 @@
1.55 Em = E.m
1.56 Fm = F.m
1.57
1.58 -print Cm # "__main__.C.m"
1.59 -print Dm # "__main__.C.m"
1.60 -print Em # "__main__.E.m"
1.61 -print Fm # "__main__.E.m"
1.62 +print Cm # __main__.C.m
1.63 +print Dm # __main__.C.m
1.64 +print Em # __main__.E.m
1.65 +print Fm # __main__.E.m
1.66
1.67 def g():
1.68 Cm = E.m
1.69 Dm = F.m # E.m
1.70
1.71 - print Cm # "__main__.E.m"
1.72 - print Dm # "__main__.E.m"
1.73 + print Cm # __main__.E.m
1.74 + print Dm # __main__.E.m
1.75
1.76 g()
1.77
1.78 @@ -63,36 +63,36 @@
1.79 Em = C.m
1.80 Fm = D.m # C.m
1.81
1.82 - print Em # "__main__.C.m"
1.83 - print Fm # "__main__.C.m"
1.84 + print Em # __main__.C.m
1.85 + print Fm # __main__.C.m
1.86
1.87 h()
1.88
1.89 -print Em # "__main__.C.m"
1.90 -print Fm # "__main__.C.m"
1.91 +print Em # __main__.C.m
1.92 +print Fm # __main__.C.m
1.93
1.94 Ci = C()
1.95 Ei = E()
1.96
1.97 -print Ci # "<__main__.C instance>"
1.98 -print Ei # "<__main__.E instance>"
1.99 +print Ci # <__main__.C instance>
1.100 +print Ei # <__main__.E instance>
1.101
1.102 def i():
1.103 c = Ci
1.104 - print c # "<__main__.C instance>"
1.105 + print c # <__main__.C instance>
1.106 c = Ei
1.107 - print c # "<__main__.E instance>"
1.108 + print c # <__main__.E instance>
1.109
1.110 i()
1.111
1.112 def j():
1.113 global Ei
1.114 Ei = C()
1.115 - print Ei # "<__main__.C instance>"
1.116 + print Ei # <__main__.C instance>
1.117
1.118 j()
1.119
1.120 -print Ei # "<__main__.C instance>"
1.121 +print Ei # <__main__.C instance>
1.122
1.123 L = []
1.124 M = [1]
2.1 --- a/tests/builtin_names.py Mon Nov 28 00:59:41 2016 +0100
2.2 +++ b/tests/builtin_names.py Mon Nov 28 01:00:10 2016 +0100
2.3 @@ -1,2 +1,4 @@
2.4 def f():
2.5 - StopIteration
2.6 + return StopIteration
2.7 +
2.8 +print f()
3.1 --- a/tests/chain.py Mon Nov 28 00:59:41 2016 +0100
3.2 +++ b/tests/chain.py Mon Nov 28 01:00:10 2016 +0100
3.3 @@ -31,9 +31,18 @@
3.4 g = C.D.E.n
3.5 h = C.D.p
3.6
3.7 + print c # __main__.C
3.8 + print d # __main__.C.D
3.9 + print e # __main__.C.D.E
3.10 + print f # __main__.C.D.E.m
3.11 + print g # 123
3.12 + print h # "456"
3.13 +
3.14 def static_via_constant():
3.15 i = C.D.p.__len__
3.16
3.17 + print i # __builtins__.str.basestring.__len__
3.18 +
3.19 def assign():
3.20 C.D.q = 987
3.21
3.22 @@ -46,12 +55,17 @@
3.23 def broken():
3.24 inst2 = C.D.F()
3.25 l = inst2.u().__len__
3.26 + return l
3.27
3.28 static()
3.29 static_via_constant()
3.30 assign()
3.31 -result1 = indirect()
3.32 -broken()
3.33 +print indirect() # __builtins__.str.basestring.__len__
3.34 +print indirect()() # 3
3.35 +print broken() # __builtins__.str.basestring.__len__
3.36 +print broken()() # 3
3.37 +
3.38 +print C.D.q # 987
3.39
3.40 # Static chains.
3.41
3.42 @@ -62,21 +76,36 @@
3.43 g = C.D.E.n
3.44 h = C.D.p
3.45
3.46 +print c # __main__.C
3.47 +print d # __main__.C.D
3.48 +print e # __main__.C.D.E
3.49 +print f # __main__.C.D.E.m
3.50 +print g # 123
3.51 +print h # "456"
3.52 +
3.53 # Static via constant.
3.54
3.55 i = C.D.p.__len__
3.56
3.57 +print i # __builtins__.str.basestring.__len__
3.58 +print i() # 3
3.59 +
3.60 # Static assignment.
3.61
3.62 -C.D.q = 987
3.63 +C.D.q = 654
3.64 +
3.65 +print C.D.q # 654
3.66
3.67 # Indirect accesses.
3.68
3.69 inst = e()
3.70 method = inst.m
3.71 -result2 = method("5")
3.72 +print method("5") # __builtins__.str.basestring.__len__
3.73 +print method("5")() # 3
3.74
3.75 # Broken chains.
3.76
3.77 inst2 = C.D.F()
3.78 l = inst2.u().__len__
3.79 +print l # __builtins__.str.basestring.__len__
3.80 +print l() # 3
4.1 --- a/tests/consts.py Mon Nov 28 00:59:41 2016 +0100
4.2 +++ b/tests/consts.py Mon Nov 28 01:00:10 2016 +0100
4.3 @@ -2,15 +2,20 @@
4.4 s = "test"
4.5 m = s.__len__
4.6 n = "test".__len__
4.7 - print m()
4.8 + print m # __builtins__.str.basestring.__len__
4.9 + print m() # 4
4.10 + print n # __builtins__.str.basestring.__len__
4.11 print n()
4.12
4.13 def g():
4.14 - l = [1]
4.15 + l = [1, 2]
4.16 m = l.__len__
4.17 - n = [1].__len__
4.18 - print m()
4.19 - print n()
4.20 + n = [1, 2].__len__
4.21 + print l # [1, 2]
4.22 + print m # __builtins__.list.list.__len__
4.23 + print m() # 2
4.24 + print n # __builtins__.list.list.__len__
4.25 + print n() # 2
4.26
4.27 f()
4.28 g()
5.1 --- a/tests/contexts.py Mon Nov 28 00:59:41 2016 +0100
5.2 +++ b/tests/contexts.py Mon Nov 28 01:00:10 2016 +0100
5.3 @@ -9,25 +9,39 @@
5.4 c = C([1])
5.5 x = c.x
5.6 f = c.x.__len__
5.7 -print f() # 1
5.8 +print c # <__main__.C instance>
5.9 +print x # [1]
5.10 +print f # __builtins__.list.list.__len__
5.11 +print f() # 1
5.12
5.13 y = c.l
5.14 g = c.l.__len__
5.15 -print g() # 5
5.16 +print y # [2, 4, 6, 8, 10]
5.17 +print g # __builtins__.list.list.__len__
5.18 +print g() # 5
5.19
5.20 yy = C.l
5.21 gg = C.l.__len__
5.22 -print gg() # 5
5.23 +print yy # [2, 4, 6, 8, 10]
5.24 +print gg # __builtins__.list.list.__len__
5.25 +print gg() # 5
5.26
5.27 z = c.s
5.28 h = c.s.__len__
5.29 -print h() # 4
5.30 +print z # test
5.31 +print h # __builtins__.str.basestring.__len__
5.32 +print h() # 4
5.33
5.34 zz = C.s
5.35 hh = C.s.__len__
5.36 -print hh() # 4
5.37 +print zz # test
5.38 +print hh # __builtins__.str.basestring.__len__
5.39 +print hh() # 4
5.40
5.41 a = c.y
5.42 b = c.z
5.43 i = c.z.__len__
5.44 -print i() # 11
5.45 +print a # 3
5.46 +print b # zebra libre
5.47 +print i # __builtins__.str.basestring.__len__
5.48 +print i() # 11
6.1 --- a/tests/global_names.py Mon Nov 28 00:59:41 2016 +0100
6.2 +++ b/tests/global_names.py Mon Nov 28 01:00:10 2016 +0100
6.3 @@ -3,9 +3,24 @@
6.4
6.5 def f():
6.6 x = g.x
6.7 + print x # 3
6.8 y = g
6.9 + print y # __main__.C
6.10 return y.x
6.11
6.12 +def i():
6.13 + x = h.x
6.14 + y = h
6.15 + return y
6.16 +
6.17 g = C
6.18 result = f()
6.19 -print result # 3
6.20 +print result # 3
6.21 +
6.22 +h = C
6.23 +print i() # __main__.C
6.24 +print i().x # 3
6.25 +
6.26 +h = C()
6.27 +print i() # <__main__.C instance>
6.28 +print i().x # 3
7.1 --- a/tests/list.py Mon Nov 28 00:59:41 2016 +0100
7.2 +++ b/tests/list.py Mon Nov 28 01:00:10 2016 +0100
7.3 @@ -1,16 +1,26 @@
7.4 l = [1, 2, 3]
7.5 l.append("four")
7.6 -print len(l)
7.7 -print l[0]
7.8 -print l[1]
7.9 -print l[2]
7.10 -print l[3]
7.11 -print l[-1]
7.12 -print l[-2]
7.13 -print l[-3]
7.14 -print l[-4]
7.15 -print l
7.16 +print len(l) # 3
7.17 +print l[0] # 1
7.18 +print l[1] # 2
7.19 +print l[2] # 3
7.20 +print l[3] # four
7.21 +print l[-1] # four
7.22 +print l[-2] # 3
7.23 +print l[-3] # 2
7.24 +print l[-4] # 1
7.25 +print l # [1, 2, 3, "four"]
7.26
7.27 t = (1, 2, 3, "four")
7.28 l = list(t)
7.29 -print l
7.30 +print l # [1, 2, 3, "four"]
7.31 +
7.32 +try:
7.33 + print l[4] # should raise an exception
7.34 +except IndexError, exc:
7.35 + print "l[4]: failed with argument", exc.index
7.36 +
7.37 +try:
7.38 + print l[-5] # should raise an exception
7.39 +except IndexError, exc:
7.40 + print "l[-5]: failed with argument", exc.index
8.1 --- a/tests/nested.py Mon Nov 28 00:59:41 2016 +0100
8.2 +++ b/tests/nested.py Mon Nov 28 01:00:10 2016 +0100
8.3 @@ -7,9 +7,9 @@
8.4 return h
8.5 return g
8.6
8.7 -result = f(1)(2)(3)
8.8 -print result[0]
8.9 -print result[1]
8.10 -print result[2]
8.11 -print result[3]
8.12 -assert result == (1, 2, 3, 4)
8.13 +fn = f(1)
8.14 +print fn # __main__.f.$l0
8.15 +print fn(2) # __main__.f.$l0.$l0
8.16 +print fn(2)(3) # (1, 2, 3, 4)
8.17 +print fn(2)(3, 5) # (5, 2, 3, 4)
8.18 +print fn(2)(3, 5, 6) # (5, 6, 3, 4)
9.1 --- a/tests/nested_lambda.py Mon Nov 28 00:59:41 2016 +0100
9.2 +++ b/tests/nested_lambda.py Mon Nov 28 01:00:10 2016 +0100
9.3 @@ -1,12 +1,17 @@
9.4 a = 4
9.5
9.6 def f(x):
9.7 + # f.$l0 f.$l0.$l0
9.8 g = lambda y, x=x: lambda z, x=x, y=y: (x, y, z, a)
9.9 return g
9.10
9.11 +print f # __main__.f
9.12 +print f(1) # __main__.f.$l0
9.13 +print f(1)(2) # __main__.f.$l0.$l0
9.14 +
9.15 result = f(1)(2)(3)
9.16 print result[0]
9.17 print result[1]
9.18 print result[2]
9.19 print result[3]
9.20 -assert result == (1, 2, 3, 4)
9.21 +print result # (1, 2, 3, 4)
10.1 --- a/tests/nested_mixed.py Mon Nov 28 00:59:41 2016 +0100
10.2 +++ b/tests/nested_mixed.py Mon Nov 28 01:00:10 2016 +0100
10.3 @@ -1,15 +1,23 @@
10.4 a = 4
10.5
10.6 def f(x):
10.7 +
10.8 + # Test function initialisation (f.$l0).
10.9 +
10.10 def g(y, x=x):
10.11 +
10.12 + # Test function initialisation (f.$l0.$l0).
10.13 +
10.14 def h(a, z, x=x, y=y):
10.15 return x, y, z, a # parameter a overrides global scope
10.16 +
10.17 return h
10.18 +
10.19 return g
10.20
10.21 -result = f(1)(2)(5, 3)
10.22 -print result[0]
10.23 -print result[1]
10.24 -print result[2]
10.25 -print result[3]
10.26 -assert result == (1, 2, 3, 5)
10.27 +fn = f(1)
10.28 +print fn # __main__.f.$l0
10.29 +print fn(2) # __main__.f.$l0.$l0
10.30 +print fn(2)(5, 3) # (1, 2, 3, 5)
10.31 +print fn(2)(5, 3, 6) # (6, 2, 3, 5)
10.32 +print fn(2)(5, 3, 6, 7) # (6, 7, 3, 5)
11.1 --- a/tests/nested_mixed_names.py Mon Nov 28 00:59:41 2016 +0100
11.2 +++ b/tests/nested_mixed_names.py Mon Nov 28 01:00:10 2016 +0100
11.3 @@ -2,22 +2,66 @@
11.4 def c(self):
11.5 return 1
11.6
11.7 -class D:
11.8 +class D(C):
11.9 def d(self):
11.10 return 3
11.11
11.12 a = 4
11.13 +l = []
11.14
11.15 def f(x):
11.16 - x.c()
11.17 +
11.18 + # Test global mutation.
11.19 +
11.20 + l.append(x.c())
11.21 +
11.22 + # Test function initialisation.
11.23 +
11.24 def g(y, x=x): # x must be introduced as default here
11.25 if y:
11.26 x = D()
11.27 return x.d(), y, a # UnboundLocalError in Python (if y is a false value)
11.28 +
11.29 return g
11.30
11.31 -result = f(C())(2)
11.32 -print result[0]
11.33 -print result[1]
11.34 -print result[2]
11.35 -assert result == (3, 2, 4)
11.36 +# Provide a default instance for a function to be obtained.
11.37 +
11.38 +fn = f(C())
11.39 +print l # [1]
11.40 +print fn # __main__.f.$l0
11.41 +try:
11.42 + print fn(2) # should fail due to g requiring an object providing d
11.43 +except TypeError:
11.44 + print "fn(2): fn initialised with an inappropriate object"
11.45 +
11.46 +try:
11.47 + print fn(0) # should fail due to g requiring an object providing d
11.48 +except TypeError:
11.49 + print "fn(0): fn initialised with an inappropriate object"
11.50 +
11.51 +# Override the default when calling the function.
11.52 +
11.53 +print fn(2, D()) # (3, 2, 4)
11.54 +print fn(0, D()) # (3, 0, 4)
11.55 +
11.56 +# Provide a more suitable default instance for the function.
11.57 +
11.58 +fn = f(D())
11.59 +print l # [1, 1]
11.60 +print fn(2) # (3, 2, 4)
11.61 +print fn(0) # (3, 0, 4)
11.62 +print fn(0, D()) # (3, 0, 4)
11.63 +
11.64 +# Override with an unsuitable object even though it would be ignored.
11.65 +
11.66 +try:
11.67 + print fn(1, C())
11.68 +except TypeError:
11.69 + print "fn(1, C()): an unsuitable argument was given."
11.70 +
11.71 +# Override with an unsuitable object.
11.72 +
11.73 +try:
11.74 + print fn(0, C())
11.75 +except TypeError:
11.76 + print "fn(0, C()): an unsuitable argument was given."
12.1 --- a/tests/tuple.py Mon Nov 28 00:59:41 2016 +0100
12.2 +++ b/tests/tuple.py Mon Nov 28 01:00:10 2016 +0100
12.3 @@ -1,15 +1,25 @@
12.4 l = (1, 2, 3, "four")
12.5 -print len(l)
12.6 -print l[0]
12.7 -print l[1]
12.8 -print l[2]
12.9 -print l[3]
12.10 -print l[-1]
12.11 -print l[-2]
12.12 -print l[-3]
12.13 -print l[-4]
12.14 -print l
12.15 +print len(l) # 4
12.16 +print l[0] # 1
12.17 +print l[1] # 2
12.18 +print l[2] # 3
12.19 +print l[3] # four
12.20 +print l[-1] # four
12.21 +print l[-2] # 3
12.22 +print l[-3] # 2
12.23 +print l[-4] # 1
12.24 +print l # (1, 2, 3, "four")
12.25
12.26 l = [1, 2, 3, "four"]
12.27 t = tuple(l)
12.28 -print t
12.29 +print t # (1, 2, 3, "four")
12.30 +
12.31 +try:
12.32 + print t[4] # should raise an exception
12.33 +except IndexError, exc:
12.34 + print "t[4]: failed with argument", exc.index
12.35 +
12.36 +try:
12.37 + print t[-5] # should raise an exception
12.38 +except IndexError, exc:
12.39 + print "t[-5]: failed with argument", exc.index