From aeacff3b145c6b09c40273fdd0b98278643a8339 Mon Sep 17 00:00:00 2001 From: Yann Diorcet Date: Sat, 11 Oct 2014 20:20:10 +0200 Subject: [PATCH 1/2] Improve cpp11_function_objects test for python --- Examples/test-suite/cpp11_function_objects.i | 18 ++++++++++++------ .../python/cpp11_function_objects_runme.py | 11 +++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Examples/test-suite/cpp11_function_objects.i b/Examples/test-suite/cpp11_function_objects.i index fb75edea6..95816d194 100644 --- a/Examples/test-suite/cpp11_function_objects.i +++ b/Examples/test-suite/cpp11_function_objects.i @@ -3,25 +3,31 @@ Function objects are objects which overload the operator() function. The std::function does not provide any seamless support in the target languages yet. */ -%module cpp11_function_objects +%module(directors="1") cpp11_function_objects %rename(__call__) Test::operator(); +%feature("director") Test; + %inline %{ -struct Test { +class Test { +public: int value; - void operator()(int x, int y) { + virtual void operator()(int x, int y) { value=x+y; } Test() : value(0) {} -} test; + ~Test() {} +}; + +Test test; #include std::function pF = test; -int testit1(Test new_test, int a, int b) { - pF = new_test; +int testit1(Test &new_test, int a, int b) { + pF = std::ref(new_test); pF(a, b); return new_test.value; } diff --git a/Examples/test-suite/python/cpp11_function_objects_runme.py b/Examples/test-suite/python/cpp11_function_objects_runme.py index aac7f9c5f..5a63b632b 100644 --- a/Examples/test-suite/python/cpp11_function_objects_runme.py +++ b/Examples/test-suite/python/cpp11_function_objects_runme.py @@ -1,6 +1,13 @@ import cpp11_function_objects import sys +class Test1(cpp11_function_objects.Test): + def __init__(self): + cpp11_function_objects.Test.__init__(self) + + def __call__(self, a, b): + self.value = a * b + t = cpp11_function_objects.Test() if t.value != 0: raise RuntimeError("Runtime cpp11_function_objects failed. t.value should be 0, but is " + str(t.value)) @@ -10,3 +17,7 @@ t(1,2) # adds numbers and sets value if t.value != 3: raise RuntimeError("Runtime cpp11_function_objects failed. t.value not changed - should be 3, but is " + str(t.value)) +t2 = Test1() +a = cpp11_function_objects.testit1(t2, 4,3) +if a != 12: + raise RuntimeError("Runtime cpp11_function_objects failed. t.value not changed - should be 12, but is " + str(a)) From 17721f46823e32a6ad7e41ee926a4777c0e74205 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Mon, 13 Oct 2014 19:38:47 +0100 Subject: [PATCH 2/2] Correct cpp11_function_objects testcase Fixes SWIG warning --- Examples/test-suite/cpp11_function_objects.i | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Examples/test-suite/cpp11_function_objects.i b/Examples/test-suite/cpp11_function_objects.i index 95816d194..e80f60a2f 100644 --- a/Examples/test-suite/cpp11_function_objects.i +++ b/Examples/test-suite/cpp11_function_objects.i @@ -18,7 +18,7 @@ public: value=x+y; } Test() : value(0) {} - ~Test() {} + virtual ~Test() {} }; Test test;