Lichen

tests/nested_mixed_names.py

336:8c75cdf1a764
2016-12-06 Paul Boddie Introduced stream classes employing C-level FILE pointers, changing the sys stdin, stdout and stderr objects to be instances of these stream classes. Added fread and fwrite support to the native functions. Added support for raising EOFError.
     1 class C:     2     def c(self):     3         return 1     4      5 class D(C):     6     def d(self):     7         return 3     8      9 a = 4    10 l = []    11     12 def f(x):    13     14     # Test global mutation.    15     16     l.append(x.c())    17     18     # Test function initialisation.    19     20     def g(y, x=x): # x must be introduced as default here    21         if y:    22             x = D()    23         return x.d(), y, a # UnboundLocalError in Python (if y is a false value)    24     25     return g    26     27 # Provide a default instance for a function to be obtained.    28     29 fn = f(C())    30 print l                     # [1]    31 print fn                    # __main__.f.$l0    32 try:    33     print fn(2)             # should fail due to g requiring an object providing d    34 except TypeError:    35     print "fn(2): fn initialised with an inappropriate object"    36     37 try:    38     print fn(0)             # should fail due to g requiring an object providing d    39 except TypeError:    40     print "fn(0): fn initialised with an inappropriate object"    41     42 # Override the default when calling the function.    43     44 print fn(2, D())            # (3, 2, 4)    45 print fn(0, D())            # (3, 0, 4)    46     47 # Provide a more suitable default instance for the function.    48     49 fn = f(D())    50 print l                     # [1, 1]    51 print fn(2)                 # (3, 2, 4)    52 print fn(0)                 # (3, 0, 4)    53 print fn(0, D())            # (3, 0, 4)    54     55 # Override with an unsuitable object even though it would be ignored.    56     57 try:    58     print fn(1, C())    59 except TypeError:    60     print "fn(1, C()): an unsuitable argument was given."    61     62 # Override with an unsuitable object.    63     64 try:    65     print fn(0, C())    66 except TypeError:    67     print "fn(0, C()): an unsuitable argument was given."