/tags/rel-2.0.2/Examples/test-suite/contract.i
# · Swig · 238 lines · 194 code · 42 blank · 2 comment · 0 complexity · 87d9f5507a59786a962dd682a5eebd3f MD5 · raw file
- %module contract
- %warnfilter(SWIGWARN_RUBY_MULTIPLE_INHERITANCE,
- SWIGWARN_JAVA_MULTIPLE_INHERITANCE,
- SWIGWARN_CSHARP_MULTIPLE_INHERITANCE,
- SWIGWARN_D_MULTIPLE_INHERITANCE,
- SWIGWARN_PHP_MULTIPLE_INHERITANCE) C; /* Ruby, C#, D, Java, PHP multiple inheritance */
- #ifdef SWIGCSHARP
- %ignore B::bar; // otherwise get a warning: `C.bar' no suitable methods found to override
- #endif
- #ifdef SWIGD
- %ignore B::bar; // Prevents getting an error that C.bar does not override any function because multiple inheritance is not supported.
- #endif
- %contract test_preassert(int a, int b) {
- require:
- a > 0;
- b > 0;
- }
- %contract test_postassert(int a) {
- ensure:
- test_postassert > 0;
- }
- %contract test_prepost(int a, int b) {
- require:
- a > 0;
- ensure:
- test_prepost > 0;
- }
- %inline %{
- int test_preassert(int x, int y) {
- if ((x > 0) && (y > 0)) return 1;
- return 0;
- }
- int test_postassert(int x) {
- return x;
- }
- int test_prepost(int x, int y) {
- return x+y;
- }
- %}
- /* Class tests */
- %contract Foo::test_preassert(int x, int y) {
- require:
- x > 0;
- y > 0;
- }
- %contract Foo::test_postassert(int a) {
- ensure:
- test_postassert > 0;
- }
- %contract Foo::test_prepost(int a, int b) {
- require:
- a > 0;
- ensure:
- test_prepost > 0;
- }
- %contract Foo::stest_prepost(int a, int b) {
- require:
- a > 0;
- ensure:
- stest_prepost > 0;
- }
- %contract Bar::test_prepost(int c, int d) {
- require:
- d > 0;
- }
- %inline %{
- class Foo {
- public:
- virtual ~Foo() { }
-
- virtual int test_preassert(int x, int y) {
- if ((x > 0) && (y > 0)) return 1;
- return 0;
- }
- virtual int test_postassert(int x) {
- return x;
- }
- virtual int test_prepost(int x, int y) {
- return x+y;
- }
- static int stest_prepost(int x, int y) {
- return x+y;
- }
- };
- class Bar : public Foo {
- public:
- virtual int test_prepost(int x, int y) {
- return x+y;
- }
- };
- %}
- /* Multiple inheritance test */
- %contract A::foo(int i, int j, int k, int l, int m) {
- require:
- i > 0;
- j > 0;
- ensure:
- foo > 0;
- }
- %contract B::bar(int x, int y, int z, int w, int v) {
- require:
- w > 0;
- v > 0;
- ensure:
- bar > 0;
- }
- %contract C::foo(int a, int b, int c, int d, int e) {
- require:
- c > 0;
- d > 0;
- ensure:
- foo > 0;
- }
- %contract D::foo(int, int, int, int, int x) {
- require:
- x > 0;
- }
- %contract D::bar(int a, int b, int c, int, int) {
- require:
- a > 0;
- b > 0;
- c > 0;
- }
- %inline %{
- class A {
- public:
- virtual ~A() {}
- virtual int foo(int a, int b, int c, int d, int e) {
- if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
- return 1;
- }
- return 0;
- }
- };
- class B {
- public:
- virtual ~B() {}
- virtual int bar(int a, int b, int c, int d, int e) {
- if ((a > 0) && (b > 0) && (c > 0) && (d > 0) && (e > 0)) {
- return 1;
- }
- return 0;
- }
- };
- class C : public A, public B {
- public:
- virtual int foo(int a, int b, int c, int d, int e) {
- return A::foo(a,b,c,d,e);
- }
- virtual int bar(int a, int b, int c, int d, int e) {
- return B::bar(a,b,c,d,e);
- }
- };
-
- class D : public C {
- public:
- virtual int foo(int a, int b, int c, int d, int e) {
- return C::foo(a,b,c,d,e);
- }
- virtual int bar(int a, int b, int c, int d, int e) {
- return C::bar(a,b,c,d,e);
- }
- };
- %}
- %extend E {
- %contract manipulate_i(int i) {
- require:
- i <= $self->m_i;
- }
- }
- %inline %{
- struct E {
- int m_i;
- void manipulate_i(int i) {
- }
- };
- %}
- // Namespace
- %{
- namespace myNames {
- class myClass
- {
- public:
- myClass(int i) {}
- };
- }
- %}
- namespace myNames {
- %contract myClass::myClass( int i ) {
- require:
- i > 0;
- }
- class myClass
- {
- public:
- myClass(int i) {}
- };
- }