From 9a3562d7ef0b5238b4ebec357286f81f53616e37 Mon Sep 17 00:00:00 2001 From: Simon Marchetto Date: Tue, 1 Apr 2014 15:47:27 +0200 Subject: [PATCH] scilab: new test scilab_multivalue --- Examples/test-suite/scilab/Makefile.in | 1 + .../scilab/scilab_multivalue_runme.sci | 87 +++++++++++++ Examples/test-suite/scilab_multivalue.i | 123 ++++++++++++++++++ 3 files changed, 211 insertions(+) create mode 100644 Examples/test-suite/scilab/scilab_multivalue_runme.sci create mode 100644 Examples/test-suite/scilab_multivalue.i diff --git a/Examples/test-suite/scilab/Makefile.in b/Examples/test-suite/scilab/Makefile.in index 0f15bd69a..4a6bbfb50 100644 --- a/Examples/test-suite/scilab/Makefile.in +++ b/Examples/test-suite/scilab/Makefile.in @@ -19,6 +19,7 @@ CPP_TEST_CASES += \ inout \ scilab_li_matrix \ scilab_pointer_conversion_functions \ + scilab_multivalue \ overload_arrays \ CPP_STD_TEST_CASES += \ diff --git a/Examples/test-suite/scilab/scilab_multivalue_runme.sci b/Examples/test-suite/scilab/scilab_multivalue_runme.sci new file mode 100644 index 000000000..581890408 --- /dev/null +++ b/Examples/test-suite/scilab/scilab_multivalue_runme.sci @@ -0,0 +1,87 @@ +exec("swigtest.start", -1); + +// OUTPUT + +[a, b] = output2(); +checkequal(a, 1, "[a, b] = output2(): a"); +checkequal(b, 2, "[a, b] = output2(): b"); + +[ret, a, b] = output2Ret(); +checkequal(ret, 3, "[a, b] = output2Ret(): b"); +checkequal(a, 1, "[a, b] = output2Ret(): a"); +checkequal(b, 2, "[a, b] = output2Ret(): b"); + +[c, d] = output2Input2(1, 2); +checkequal(c, 2, "[c, d] = output2Input2(1, 2): c"); +checkequal(d, 4, "[c, d] = output2Input2(1, 2): d"); + +[ret, c, d] = output2Input2Ret(1, 2); +checkequal(ret, 6, "[ret, c, d] = output2Input2Ret(1, 2): ret"); +checkequal(c, 2, "[ret, c, d] = output2Input2Ret(1, 2): c"); +checkequal(d, 4, "[ret, c, d = output2Input2Ret(1, 2): d"); + +[ret, a, b, c] = output3Input1Ret(10); +checkequal(ret, 10, "[ret, a, b, c] = output3Input1Ret(10): ret"); +checkequal(a, 11, "[ret, a, b, c] = output3Input1Ret(10): a"); +checkequal(b, 12, "[ret, a, b, c] = output3Input1Ret(10): b"); +checkequal(c, 13, "[ret, a, b, c] = output3Input1Ret(10): c"); + +[ret, a, b, c] = output3Input3Ret(10, 20, 30); +checkequal(ret, 66, "[ret, a, b, c] = output3Input1Ret(10, 20, 30): ret"); +checkequal(a, 11, "[ret, a, b, c] = output3Input1Ret(10, 20, 30): a"); +checkequal(b, 22, "[ret, a, b, c] = output3Input1Ret(10, 20, 30): b"); +checkequal(c, 33, "[ret, a, b, c] = output3Input1Ret(10, 20, 30): c"); + + +// INOUT + +[a, b] = inout2(1, 2); +checkequal(a, 2, "[a, b] = output2(1, 2): a"); +checkequal(b, 4, "[a, b] = output2(1, 2): b"); + +[ret, a, b] = inout2Ret(1, 2); +checkequal(ret, 6, "[a, b] = inout2Ret(1, 2): b"); +checkequal(a, 2, "[a, b] = inout2Ret(1, 2): a"); +checkequal(b, 4, "[a, b] = inout2Ret(1, 2): b"); + +[c, d] = inout2Input2(1, 2, 1, 1); +checkequal(c, 2, "[c, d] = inout2Input2(1, 2): c"); +checkequal(d, 3, "[c, d] = inout2Input2(1, 2): d"); + +[ret, c, d] = inout2Input2Ret(1, 2, 1, 1); +checkequal(ret, 5, "[c, d] = inout2Input2Ret(1, 2): ret"); +checkequal(c, 2, "[c, d] = inout2Input2Ret(1, 2): c"); +checkequal(d, 3, "[c, d] = inout2Input2Ret(1, 4): d"); + +[ret, a, b, c] = inout3Input1Ret(10, 1, 2, 3); +checkequal(ret, 10, "[ret, a, b, c] = output3Input1Ret(ret, 1, 2, 3): ret"); +checkequal(a, 11, "[ret, a, b, c] = output3Input1Ret(ret, 1, 2, 3): a"); +checkequal(b, 12, "[ret, a, b, c] = output3Input1Ret(ret, 1, 2, 3): b"); +checkequal(c, 13, "[ret, a, b, c] = output3Input1Ret(ret, 1, 2, 3): c"); + +[ret, a, b, c] = inout3Input3Ret(10, 1, 20, 2, 30, 3); +checkequal(ret, 66, "[ret, a, b, c] = output3Input1Ret(10, 20, 30): ret"); +checkequal(a, 11, "[ret, a, b, c] = inout3Input1Ret(10, 1, 20, 2, 30, 3): a"); +checkequal(b, 22, "[ret, a, b, c] = inout3Input1Ret(10, 1, 20, 2, 30, 3): b"); +checkequal(c, 33, "[ret, a, b, c] = inout3Input1Ret(10, 1, 20, 2, 30, 3): c"); + + +// CLASS + +a = new_ClassA(); + +[ret, c, d] = ClassA_output2Input2Ret(a, 1, 2); +checkequal(ret, 6, "[ret, c, d] = ClassA_output2Input2Ret(a, 1, 2): ret"); +checkequal(c, 2, "[c, d] = ClassA_output2Input2Ret(a, 1, 2): c"); +checkequal(d, 4, "[c, d] = ClassA_output2Input2Ret(a, 1, 2): d"); + +[ret, c, d] = ClassA_inout2Input2Ret(a, 1, 2, 1, 1); +checkequal(ret, 5, "[ret, c, d] = ClassA_inout2Input2Ret(a, 1, 2): ret"); +checkequal(c, 2, "[c, d] = ClassA_inout2Input2(a, 1, 2): c"); +checkequal(d, 3, "[c, d] = ClassA_inout2Input2(a, 1, 2): d"); + +delete_ClassA(a); + + +exec("swigtest.quit", -1); + diff --git a/Examples/test-suite/scilab_multivalue.i b/Examples/test-suite/scilab_multivalue.i new file mode 100644 index 000000000..3165d48e1 --- /dev/null +++ b/Examples/test-suite/scilab_multivalue.i @@ -0,0 +1,123 @@ +%module scilab_multivalue + + + +void output2(int *OUTPUT, int *OUTPUT); +int output2Ret(int *OUTPUT, int *OUTPUT); +void output2Input2(int a, int b, int *OUTPUT, int *OUTPUT); +int output2Input2Ret(int a, int b, int *OUTPUT, int *OUTPUT); +int output3Input1Ret(int a, int *OUTPUT, int *OUTPUT, int *OUTPUT); +int output3Input3Ret(int x, int *OUTPUT, int y, int *OUTPUT, int z, int *OUTPUT); + +void inout2(int *INOUT, int *INOUT); +int inout2Ret(int *INOUT, int *INOUT); +void inout2Input2(int a, int b, int *INOUT, int *INOUT); +int inout2Input2Ret(int a, int b, int *INOUT, int *INOUT); +int inout3Input1Ret(int a, int *INOUT, int *INOUT, int *INOUT); +int inout3Input3Ret(int x, int *INOUT, int y, int *INOUT, int z, int *INOUT); + +class ClassA { +public: + ClassA() {}; + int output2Input2Ret(int a, int b, int *OUTPUT, int *OUTPUT); + int inout2Input2Ret(int a, int b, int *INOUT, int *INOUT); +}; + +%{ + +// Test return of multiple values with OUTPUT + +void output2(int *a, int *b) { + *a = 1; + *b = 2; +} + +int output2Ret(int *a, int *b) { + *a = 1; + *b = 2; + return *a + *b; +} + +void output2Input2(int a, int b, int *c, int *d) { + *c = a + 1; + *d = b + 2; +} + +int output2Input2Ret(int a, int b, int *c, int *d) { + *c = a + 1; + *d = b + 2; + return *c + *d; +} + +int output3Input1Ret(int x, int *a, int *b, int *c) { + *a = x + 1; + *b = x + 2; + *c = x + 3; + return x; +} + +int output3Input3Ret(int x, int *a, int y, int *b, int z, int *c) { + *a = x + 1; + *b = y + 2; + *c = z + 3; + return *a + *b + *c; +} + + +// Test return of multiple values with INOUT + +void inout2(int *a, int *b) { + *a = *a + 1; + *b = *a + 2; +} + +int inout2Ret(int *a, int *b) { + *a = *a + 1; + *b = *a + 2; + return *a + *b; +} + +void inout2Input2(int a, int b, int *c, int *d) { + *c = *c + a; + *d = *d + b; +} + +int inout2Input2Ret(int a, int b, int *c, int *d) { + *c = *c + a; + *d = *d + b; + return *c + *d; +} + +int inout3Input1Ret(int x, int *a, int *b, int *c) { + *a = *a + x; + *b = *b + x; + *c = *c + x; + return x; +} + +int inout3Input3Ret(int x, int *a, int y, int *b, int z, int *c) { + *a = *a + x; + *b = *b + y; + *c = *c + z; + return *a + *b + *c; +} + +// Test return multiples from class methods + +class ClassA { +public: + ClassA() {}; + int output2Input2Ret(int a, int b, int *c, int *d) { + *c = a + 1; + *d = b + 2; + return *c + *d; + } + int inout2Input2Ret(int a, int b, int *c, int *d) { + *c = *c + a; + *d = *d + b; + return *c + *d; + } +}; + + +%}