From ce0cbfcbb4f8592bb41224bb381fa24db329bff8 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Mon, 17 Oct 2005 13:48:02 +0000 Subject: [PATCH] adding more cases git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7673 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Examples/test-suite/python/iadd.h | 47 +++++++++++++++++++ Examples/test-suite/python/iadd.i | 18 +++++++ Examples/test-suite/python/iadd_runme.py | 5 ++ Examples/test-suite/python/inplaceadd.i | 11 +++++ .../test-suite/python/inplaceadd_runme.py | 4 ++ 5 files changed, 85 insertions(+) create mode 100644 Examples/test-suite/python/iadd.h create mode 100644 Examples/test-suite/python/iadd.i create mode 100755 Examples/test-suite/python/iadd_runme.py diff --git a/Examples/test-suite/python/iadd.h b/Examples/test-suite/python/iadd.h new file mode 100644 index 000000000..367eda26f --- /dev/null +++ b/Examples/test-suite/python/iadd.h @@ -0,0 +1,47 @@ +struct B { + int x; + B(const int x) : x(x) {} + + B& get_me() + { + return *this; + } + + B& operator+=(const B& a) { + x += a.x; + return *this; + } +}; + + + +namespace test { + +struct A { + int x; + A(const int x) : x(x) {} + + A& get_me() + { + return *this; + } + + A operator+=(const A& a) { + x += a.x; + return *this; + } +}; + + +class Foo { +public: + Foo(): _a(new A(5)), _n(new long) {} + ~Foo() { delete _a; delete _n; _a = NULL; _n = NULL; } + + A & AsA() const { return *_a; } + long& AsLong() const { return *_n; } +private: + A *_a; + long *_n; +}; +} diff --git a/Examples/test-suite/python/iadd.i b/Examples/test-suite/python/iadd.i new file mode 100644 index 000000000..81afa12a2 --- /dev/null +++ b/Examples/test-suite/python/iadd.i @@ -0,0 +1,18 @@ +%module iadd + +%include attribute.i +%{ +#include "iadd.h" +%} +class Foo; +%attribute_ref(test::Foo, test::A& , AsA); +%attribute_ref(test::Foo, long, AsLong); + + +%typemap(out) B & B::operator+= "hello"; + + + + + +%include "iadd.h" diff --git a/Examples/test-suite/python/iadd_runme.py b/Examples/test-suite/python/iadd_runme.py new file mode 100755 index 000000000..d0906d77f --- /dev/null +++ b/Examples/test-suite/python/iadd_runme.py @@ -0,0 +1,5 @@ +import iadd + +f = iadd.Foo() +f.AsA += f.AsA + diff --git a/Examples/test-suite/python/inplaceadd.i b/Examples/test-suite/python/inplaceadd.i index ab64119ba..664bbdebd 100644 --- a/Examples/test-suite/python/inplaceadd.i +++ b/Examples/test-suite/python/inplaceadd.i @@ -1,4 +1,7 @@ %module inplaceadd +%{ +#include +%} %inline %{ @@ -8,6 +11,8 @@ A(int v): val(v) { + int a = 2; + a += (a +=1 ) = 5; } A& operator+=(int v) @@ -16,6 +21,12 @@ return *this; } + A& operator+=(const A& a) + { + val += a.val; + return *this; + } + A& operator-=(int v) { val -= v; diff --git a/Examples/test-suite/python/inplaceadd_runme.py b/Examples/test-suite/python/inplaceadd_runme.py index 743bb9203..3db61cbb8 100644 --- a/Examples/test-suite/python/inplaceadd_runme.py +++ b/Examples/test-suite/python/inplaceadd_runme.py @@ -16,3 +16,7 @@ a *= 2 if a.val != 14: raise RuntimeError + +a += a +if a.val != 28: + raise RuntimeError