Wenzel Jakob | 5708221 | 2015-09-04 23:42:12 +0200 | [diff] [blame] | 1 | #!/usr/bin/env python |
| 2 | from __future__ import print_function |
Ben Pritchard | 1b52246 | 2016-03-10 16:31:38 -0500 | [diff] [blame] | 3 | from functools import partial |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 4 | import sys |
| 5 | sys.path.append('.') |
| 6 | |
| 7 | from example import Pet |
| 8 | from example import Dog |
Wenzel Jakob | 48548ea | 2016-01-17 22:36:44 +0100 | [diff] [blame] | 9 | from example import Rabbit |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 10 | from example import dog_bark |
| 11 | from example import pet_print |
| 12 | |
| 13 | polly = Pet('Polly', 'parrot') |
| 14 | molly = Dog('Molly') |
Wenzel Jakob | 48548ea | 2016-01-17 22:36:44 +0100 | [diff] [blame] | 15 | roger = Rabbit('Rabbit') |
| 16 | print(roger.name() + " is a " + roger.species()) |
| 17 | pet_print(roger) |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 18 | print(polly.name() + " is a " + polly.species()) |
| 19 | pet_print(polly) |
| 20 | print(molly.name() + " is a " + molly.species()) |
| 21 | pet_print(molly) |
| 22 | dog_bark(molly) |
| 23 | try: |
| 24 | dog_bark(polly) |
| 25 | except Exception as e: |
| 26 | print('The following error is expected: ' + str(e)) |
| 27 | |
| 28 | from example import test_callback1 |
| 29 | from example import test_callback2 |
| 30 | from example import test_callback3 |
Wenzel Jakob | 281aa0e | 2015-07-30 15:29:00 +0200 | [diff] [blame] | 31 | from example import test_callback4 |
Brad Harmon | 835fc06 | 2016-06-16 13:19:15 -0500 | [diff] [blame] | 32 | from example import test_callback5 |
Wenzel Jakob | 19208fe | 2015-10-13 17:37:25 +0200 | [diff] [blame] | 33 | from example import test_cleanup |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 34 | |
| 35 | def func1(): |
| 36 | print('Callback function 1 called!') |
| 37 | |
Wenzel Jakob | 7b8e032 | 2015-08-28 17:49:15 +0200 | [diff] [blame] | 38 | def func2(a, b, c, d): |
| 39 | print('Callback function 2 called : ' + str(a) + ", " + str(b) + ", " + str(c) + ", "+ str(d)) |
Wenzel Jakob | a2f6fde | 2015-10-01 16:46:03 +0200 | [diff] [blame] | 40 | return d |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 41 | |
Ben Pritchard | 1b52246 | 2016-03-10 16:31:38 -0500 | [diff] [blame] | 42 | def func3(a): |
| 43 | print('Callback function 3 called : ' + str(a)) |
| 44 | |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 45 | print(test_callback1(func1)) |
| 46 | print(test_callback2(func2)) |
Ben Pritchard | 1b52246 | 2016-03-10 16:31:38 -0500 | [diff] [blame] | 47 | print(test_callback1(partial(func2, "Hello", "from", "partial", "object"))) |
| 48 | print(test_callback1(partial(func3, "Partial object with one argument"))) |
Wenzel Jakob | 38bd711 | 2015-07-05 20:05:44 +0200 | [diff] [blame] | 49 | |
Wenzel Jakob | a2f6fde | 2015-10-01 16:46:03 +0200 | [diff] [blame] | 50 | test_callback3(lambda i: i + 1) |
| 51 | f = test_callback4() |
Wenzel Jakob | 281aa0e | 2015-07-30 15:29:00 +0200 | [diff] [blame] | 52 | print("func(43) = %i" % f(43)) |
Brad Harmon | 835fc06 | 2016-06-16 13:19:15 -0500 | [diff] [blame] | 53 | f = test_callback5() |
| 54 | print("func(number=43) = %i" % f(number=43)) |
Wenzel Jakob | 19208fe | 2015-10-13 17:37:25 +0200 | [diff] [blame] | 55 | |
| 56 | test_cleanup() |
Wenzel Jakob | 954b793 | 2016-07-10 10:13:18 +0200 | [diff] [blame] | 57 | |
Jason Rhinelander | 3f58937 | 2016-08-07 13:05:26 -0400 | [diff] [blame] | 58 | from example import payload_cstats |
| 59 | cstats = payload_cstats() |
| 60 | print("Payload instances not destroyed:", cstats.alive()) |
| 61 | print("Copy constructions:", cstats.copy_constructions) |
| 62 | print("Move constructions:", cstats.move_constructions >= 1) |
| 63 | |
Wenzel Jakob | 954b793 | 2016-07-10 10:13:18 +0200 | [diff] [blame] | 64 | from example import dummy_function |
| 65 | from example import dummy_function2 |
| 66 | from example import test_dummy_function |
| 67 | from example import roundtrip |
| 68 | |
| 69 | test_dummy_function(dummy_function) |
| 70 | test_dummy_function(roundtrip(dummy_function)) |
Wenzel Jakob | 8de0437 | 2016-08-18 11:18:12 +0200 | [diff] [blame] | 71 | if roundtrip(None) is not None: |
| 72 | print("Problem!") |
Wenzel Jakob | 954b793 | 2016-07-10 10:13:18 +0200 | [diff] [blame] | 73 | test_dummy_function(lambda x: x + 2) |
| 74 | |
| 75 | try: |
| 76 | test_dummy_function(dummy_function2) |
| 77 | print("Problem!") |
| 78 | except Exception as e: |
| 79 | if 'Incompatible function arguments' in str(e): |
| 80 | print("All OK!") |
| 81 | else: |
| 82 | print("Problem!") |
| 83 | |
| 84 | try: |
| 85 | test_dummy_function(lambda x, y: x + y) |
| 86 | print("Problem!") |
| 87 | except Exception as e: |
Wenzel Jakob | 4e27f7b | 2016-07-10 11:01:35 +0200 | [diff] [blame] | 88 | if 'missing 1 required positional argument' in str(e) or \ |
| 89 | 'takes exactly 2 arguments' in str(e): |
Wenzel Jakob | 954b793 | 2016-07-10 10:13:18 +0200 | [diff] [blame] | 90 | print("All OK!") |
| 91 | else: |
| 92 | print("Problem!") |
Dean Moldovan | ed23dda | 2016-08-04 01:40:40 +0200 | [diff] [blame] | 93 | |
| 94 | print(test_callback3.__doc__) |
| 95 | print(test_callback4.__doc__) |