From e87fce527ec32a42cb8f105ae53650f9271add71 Mon Sep 17 00:00:00 2001 From: Simon Marchetto Date: Tue, 25 Mar 2014 17:21:49 +0100 Subject: [PATCH] scilab: group together STL container typemaps tests (associative + sequence) in same test --- ...typemaps.i => li_std_container_typemaps.i} | 75 +++++-------- Examples/test-suite/li_std_set_as_argument.i | 76 ------------- .../li_std_container_typemaps_runme.sci | 105 ++++++++++++++++++ ..._std_sequence_container_typemaps_runme.sci | 100 ----------------- .../scilab/li_std_set_as_argument_runme.sci | 35 ------ 5 files changed, 134 insertions(+), 257 deletions(-) rename Examples/test-suite/{li_std_sequence_container_typemaps.i => li_std_container_typemaps.i} (52%) delete mode 100644 Examples/test-suite/li_std_set_as_argument.i create mode 100644 Examples/test-suite/scilab/li_std_container_typemaps_runme.sci delete mode 100644 Examples/test-suite/scilab/li_std_sequence_container_typemaps_runme.sci delete mode 100644 Examples/test-suite/scilab/li_std_set_as_argument_runme.sci diff --git a/Examples/test-suite/li_std_sequence_container_typemaps.i b/Examples/test-suite/li_std_container_typemaps.i similarity index 52% rename from Examples/test-suite/li_std_sequence_container_typemaps.i rename to Examples/test-suite/li_std_container_typemaps.i index 344c3b8f2..18da98552 100644 --- a/Examples/test-suite/li_std_sequence_container_typemaps.i +++ b/Examples/test-suite/li_std_container_typemaps.i @@ -6,10 +6,14 @@ #include #include #include +#include + #include #include #include #include + +using namespace std; %} %inline %{ @@ -48,8 +52,8 @@ namespace std { static SeqCont ret_container(const value_type value1, const value_type value2) { SeqCont s; - s.push_back(value1); - s.push_back(value2); + s.insert(s.end(), value1); + s.insert(s.end(), value2); return s; } @@ -64,43 +68,17 @@ namespace std { } }; - template - std::vector ret_vector(const T value1, const T value2) { - return sequence_container >::ret_container(value1, value2); + template + Container ret_container(const T value1, const T value2) { + return sequence_container::ret_container(value1, value2); } - template - T val_vector(const std::vector container) { - return sequence_container >::val_container(container); + template + T val_container(const Container container) { + return sequence_container::val_container(container); } - template - T ref_vector(const std::vector& container) { - return sequence_container >::ref_container(container); - } - - template - std::list ret_list(const T value1, const T value2) { - return sequence_container >::ret_container(value1, value2); - } - template - T val_list(const std::list container) { - return sequence_container >::val_container(container); - } - template - T ref_list(const std::list& container) { - return sequence_container >::ref_container(container); - } - - template - std::deque ret_deque(const T value1, const T value2) { - return sequence_container >::ret_container(value1, value2); - } - template - T val_deque(const std::deque container) { - return sequence_container >::val_container(container); - } - template - T ref_deque(const std::deque& container) { - return sequence_container >::ref_container(container); + template + T ref_container(const Container& container) { + return sequence_container::ref_container(container); } } %} @@ -111,21 +89,26 @@ namespace std %template(TYPE ## _vector) std::vector; %template(TYPE ## _list) std::list; %template(TYPE ## _deque) std::deque; + %template(TYPE ## _set) std::set; } %enddef + %define instantiate_containers_functions(TYPE...) namespace std { - %template(ret_ ## TYPE ## _vector) ret_vector; - %template(val_ ## TYPE ## _vector) val_vector; - %template(ref_ ## TYPE ## _vector) ref_vector; - %template(ret_ ## TYPE ## _list) ret_list; - %template(val_ ## TYPE ## _list) val_list; - %template(ref_ ## TYPE ## _list) ref_list; - %template(ret_ ## TYPE ## _deque) ret_deque; - %template(val_ ## TYPE ## _deque) val_deque; - %template(ref_ ## TYPE ## _deque) ref_deque; + %template(ret_ ## TYPE ## _vector) ret_container >; + %template(val_ ## TYPE ## _vector) val_container >; + %template(ref_ ## TYPE ## _vector) ref_container >; + %template(ret_ ## TYPE ## _list) ret_container >; + %template(val_ ## TYPE ## _list) val_container >; + %template(ref_ ## TYPE ## _list) ref_container >; + %template(ret_ ## TYPE ## _deque) ret_container >; + %template(val_ ## TYPE ## _deque) val_container >; + %template(ref_ ## TYPE ## _deque) ref_container >; + %template(ret_ ## TYPE ## _set) ret_container >; + %template(val_ ## TYPE ## _set) val_container >; + %template(ref_ ## TYPE ## _set) ref_container >; } %enddef diff --git a/Examples/test-suite/li_std_set_as_argument.i b/Examples/test-suite/li_std_set_as_argument.i deleted file mode 100644 index 09104521b..000000000 --- a/Examples/test-suite/li_std_set_as_argument.i +++ /dev/null @@ -1,76 +0,0 @@ -%module li_std_set_as_argument - -%{ -#include -#include - -#include -#include -#include -#include -#include - -%} - -%include stl.i - -namespace std -{ - %template(IntSet) set; - %template(StringSet) set; -} - -%ignore concat_set; - -%inline %{ -template -std::set concat_set(const std::set set, const std::set other_set) -{ - std::set out_set(set); - out_set.insert(other_set.begin(), other_set.end()); - return out_set; -} - -// int sets - -std::set create_integer_set(const int rangemin, const int rangemax) -{ - std::set out_set; - for (int i = rangemin; i <= rangemax; i++) - { - out_set.insert(i); - } - return out_set; -} - -int sum_integer_set(const std::set& set) -{ - return std::accumulate(set.begin(), set.end(), 0); -} - -std::set concat_integer_set(const std::set set, const std::set other_set) -{ - return concat_set(set, other_set); -} - -// string sets - -std::set create_string_set(const char* svalue) -{ - std::set out_set; - std::string str(svalue); - - std::istringstream iss(str); - std::copy(std::istream_iterator(iss), - std::istream_iterator(), - std::inserter >(out_set, out_set.begin())); - - return out_set; -} - -std::set concat_string_set(const std::set set, const std::set other_set) -{ - return concat_set(set, other_set); -} -%} - diff --git a/Examples/test-suite/scilab/li_std_container_typemaps_runme.sci b/Examples/test-suite/scilab/li_std_container_typemaps_runme.sci new file mode 100644 index 000000000..a0b9a9bf5 --- /dev/null +++ b/Examples/test-suite/scilab/li_std_container_typemaps_runme.sci @@ -0,0 +1,105 @@ +// test STL containers typemaps + +exec("swigtest.start", -1); + +function checkerror(ierr, cmd) + if ierr <> 0 then swigtesterror("error " + string(ierr) + " in """ + cmd + """"); end +endfunction + +// test container of pointers returned from fonction (expected a list) +function [classAPtr_list, classAPtr1, classAPtr2] = testCreateContainerPtr(container, value1, value2) + classAPtr1 = new_ClassA(value1); + classAPtr2 = new_ClassA(value2); + func = msprintf("ret_ClassAPtr_%s", container); + cmd = msprintf("classAPtr_list = %s(classAPtr1, classAPtr2);", func); + ierr = execstr(cmd, "errcatch"); + if ierr <> 0 then swigtesterror("error in " + cmd); end + if ~exists('classAPtr_list') | (size(classAPtr_list) <> 2) then + swigtesterror(func); + end + checkequal(ClassA_a_get(classAPtr_list(1)), value1, "ClassA_a_get(classAPtr_list(1))"); + checkequal(ClassA_a_get(classAPtr_list(2)), value2, "ClassA_a_get(classAPtr_list(2))"); +endfunction + +// test a given container of pointer +// -container: type of container: "vector", "set"... +// -value1, value2: values to store in container +// -expected_accumulate_value: expected value of an accumulation function +// computed on the container +function testContainerPtr(container, value1, value2, expected_accumulate_value) + // test container of pointers returned from flonction (expected a list) + [classAPtr_list, classAPtr1, classAPtr2] = testCreateContainerPtr(container, value1, value2); + + // test container passed as value of function + func = msprintf("val_ClassAPtr_%s", container); + cmd = msprintf("classAPtr = %s(classAPtr_list);", func); + ierr = execstr(cmd, "errcatch"); + checkerror(ierr, cmd); + checkequal(ClassA_a_get(classAPtr), expected_accumulate_value, func); + + // recreate a container + [classAPtr_list, classAPtr1, classAPtr2] = testCreateContainerPtr(container, value1, value2); + + // test container passed as reference of function + func = msprintf("ref_ClassAPtr_%s", container); + cmd = msprintf("classAPtr = %s(classAPtr_list);", func); + ierr = execstr(cmd, "errcatch"); + checkerror(ierr, cmd); + checkequal(ClassA_a_get(classAPtr), expected_accumulate_value, func); +endfunction + +// test a given container of a given primitive type +// -container: type of container: "vector", "set"... +// -value_type: type of element stored in container: "int", ... +// -value1, value2: values to store in container +// -expected_accumulate_value: expected value of an accumulation function +// computed on the container +function testContainerType(container, value_type, value1, value2, .. + expected_returned_container, expected_accumulate_value) + // test container of basic type returned from fonction + func = msprintf("ret_%s_%s", value_type, container); + if value_type = "string" then + cmd = msprintf("c = %s(''%s'', ''%s'');", func, value1, value2); + elseif value_type = "bool" then + cmd = msprintf("c = %s(%s, %s);", func, "%"+string(value1), "%"+string(value2)); + else + cmd = msprintf("c = %s(%d, %d);", func, value1, value2); + end + ierr = execstr(cmd, "errcatch"); + checkerror(ierr, cmd); + checkequal(c, expected_returned_container, func); + + // test container passed as value of function + func = msprintf("val_%s_%s", value_type, container); + cmd = msprintf("s = %s(c);", func); + ierr = execstr(cmd, "errcatch"); + checkerror(ierr, cmd); + checkequal(s, expected_accumulate_value, func); + + // test container passed as reference of function + func = msprintf("ref_%s_%s", value_type, container); + cmd = msprintf("s = %s(c);", func); + ierr = execstr(cmd, "errcatch"); + checkerror(ierr, cmd); + checkequal(s, expected_accumulate_value, func); +endfunction + +// test a given container of different types +// -container: type of container: "vector", "set"... +function testContainer(container) + testContainerType(container, "int", 1, 2, [1, 2], 3); + testContainerType(container, "double", 2., 3., [2., 3.], 5.); + testContainerType(container, "string", "a", "b", ["a", "b"], "ab"); + testContainerType(container, "bool", %F, %T, [%F, %T], %T); + testContainerPtr("vector", 1, 3, 4); +endfunction + + +testContainer("vector"); +testContainer("list"); +testContainer("deque"); +testContainer("set"); + +exec("swigtest.quit", -1); + + diff --git a/Examples/test-suite/scilab/li_std_sequence_container_typemaps_runme.sci b/Examples/test-suite/scilab/li_std_sequence_container_typemaps_runme.sci deleted file mode 100644 index b7feddccb..000000000 --- a/Examples/test-suite/scilab/li_std_sequence_container_typemaps_runme.sci +++ /dev/null @@ -1,100 +0,0 @@ -// test STL sequence containers typemaps - -exec("swigtest.start", -1); - -function checkerror(ierr, cmd) - if ierr <> 0 then swigtesterror("error " + string(ierr) + " in """ + cmd + """"); end -endfunction - -// test sequence container of pointers returned from fonction (expected a list) -function [classAPtr_list, classAPtr1, classAPtr2] = testCreateSequenceContainerPtr(container, value1, value2) - classAPtr1 = new_ClassA(value1); - classAPtr2 = new_ClassA(value2); - cmd = msprintf("classAPtr_list = ret_ClassAPtr_%s(classAPtr1, classAPtr2);", container); - ierr = execstr(cmd, "errcatch"); - if ierr <> 0 then swigtesterror("error in " + cmd); end - if ~exists('classAPtr_list') | (size(classAPtr_list) <> 2) then swigtesterror(); end - if (ClassA_a_get(classAPtr_list(1)) <> value1) | (ClassA_a_get(classAPtr_list(2)) <> value2) then swigtesterror(); end -endfunction - -// test sequence containers of pointers -// -container: type of container: "vector", "list"... -// -value1, value2: values to store in container -// -expected_accumulate_value: expected value of an accumulation function -// computed on the container -function testSequenceContainerPtr(container, value1, value2, expected_accumulate_value) - // test sequence container of pointers returned from flonction (expected a list) - [classAPtr_list, classAPtr1, classAPtr2] = testCreateSequenceContainerPtr(container, value1, value2); - - // test sequence container passed as value of function - cmd = msprintf("classAPtr = val_ClassAPtr_%s(classAPtr_list);", container); - ierr = execstr(cmd, "errcatch"); - checkerror(ierr, cmd); - if ClassA_a_get(classAPtr) <> expected_accumulate_value then swigtesterror(); end - - // recreate a container - [classAPtr_list, classAPtr1, classAPtr2] = testCreateSequenceContainerPtr(container, value1, value2); - - // test sequence container passed as reference of function - cmd = msprintf("classAPtr = ref_ClassAPtr_%s(classAPtr_list);", container); - ierr = execstr(cmd, "errcatch"); - checkerror(ierr, cmd); - if ClassA_a_get(classAPtr) <> expected_accumulate_value then swigtesterror(); end -endfunction - -// test sequence containers of primitive type -// -container: type of container: "vector", "list"... -// -value_type: type of element stored in container: "int", ... -// -value1, value2: values to store in container -// -expected_accumulate_value: expected value of an accumulation function -// computed on the container -function testSequenceContainer(container, value_type, value1, value2, expected_accumulate_value) - // test sequence container of basic type returned from fonction (expect a row matrix) - if value_type = "string" then - cmd = msprintf("c = ret_%s_%s(''%s'', ''%s'');", value_type, container, value1, value2); - elseif value_type = "bool" then - cmd = msprintf("c = ret_%s_%s(%s, %s);", value_type, container, "%"+string(value1), "%"+string(value2)); - else - cmd = msprintf("c = ret_%s_%s(%d, %d);", value_type, container, value1, value2); - end - ierr = execstr(cmd, "errcatch"); - checkerror(ierr, cmd); - if ~isdef('c') | ~isequal(c, [value1, value2]) then swigtesterror(); end - - // test sequence container passed as value of function - cmd = msprintf("s = val_%s_%s(c);", value_type, container); - ierr = execstr(cmd, "errcatch"); - checkerror(ierr, cmd); - if s <> expected_accumulate_value then swigtesterror(); end - - // test sequence container passed as reference of function - cmd = msprintf("s = ref_%s_%s(c);", value_type, container); - ierr = execstr(cmd, "errcatch"); - checkerror(ierr, cmd); - if s <> expected_accumulate_value then swigtesterror(); end -endfunction - -// test vector -testSequenceContainer("vector", "int", 1, 2, 3); -testSequenceContainer("vector", "double", 2., 3., 5.); -testSequenceContainer("vector", "string", "a", "b", "ab"); -testSequenceContainer("vector", "bool", %T, %F, %T); -testSequenceContainerPtr("vector", 1, 3, 4); - -// test list -testSequenceContainer("list", "int", 1, 2, 3); -testSequenceContainer("list", "double", 2., 3., 5.); -testSequenceContainer("list", "string", "a", "b", "ab"); -testSequenceContainer("list", "bool", %T, %F, %T); -testSequenceContainerPtr("list", 1, 3, 4); - -// test deque -testSequenceContainer("deque", "int", 1, 2, 3); -testSequenceContainer("deque", "double", 2., 3., 5.); -testSequenceContainer("deque", "string", "a", "b", "ab"); -testSequenceContainer("deque", "bool", %T, %F, %T); -testSequenceContainerPtr("deque", 1, 3, 4); - -exec("swigtest.quit", -1); - - diff --git a/Examples/test-suite/scilab/li_std_set_as_argument_runme.sci b/Examples/test-suite/scilab/li_std_set_as_argument_runme.sci deleted file mode 100644 index 951c4a650..000000000 --- a/Examples/test-suite/scilab/li_std_set_as_argument_runme.sci +++ /dev/null @@ -1,35 +0,0 @@ -// Tests C++ fonctions with STL sets as arguments - -exec("swigtest.start", -1); - -// integer sets - -// Example of passing matrices of int as set arguments of C++ functions."); -// get a set of int {1...4} from create_integer_set():"); -iset = create_integer_set(1, 4); -if ~exists("iset") | ~isequal(iset, [1 2 3 4]) then swigtesterror(); end -// get the sum of this set elements with sum_integer_set():") -isum = sum_integer_set(int32(iset)); -if ~exists("isum") | (isum <> 10) then swigtesterror(); end -// get a set of of int {3...6} from create_integer_set():"); -iset2 = create_integer_set(3, 6); -if ~exists("iset2") | ~isequal(iset2, [3 4 5 6]) then swigtesterror(); end -// concat the two sets with concat_integer_set():"); -iset3 = concat_integer_set(int32(iset), iset2); -if ~exists("iset3") | ~isequal(iset3, [1 2 3 4 5 6]) then swigtesterror(); end - -// string sets - -// Example of passing matrices of string as set arguments of C++ functions."); -// get a set of string {''aa'', ''bb'', ''cc'', ''dd''} with create_string_set():"); -sset = create_string_set("aa bb cc dd"); -if ~exists("sset") | ~isequal(sset, ["aa" "bb" "cc" "dd"]) then swigtesterror(); end -// get a set of string {''cc'', ''dd'', ''ee'', ''ff''} with create_string_set():"); -sset2 = create_string_set("cc dd ee ff"); -if ~exists("sset2") | ~isequal(sset2, ["cc" "dd" "ee" "ff"]) then swigtesterror(); end -// concat the two sets with concat_string_set():"); -sset3 = concat_string_set(sset, sset2); -if ~exists("sset3") | ~isequal(sset3, ["aa" "bb" "cc" "dd" "ee" "ff"]) then swigtesterror(); end - -exec("swigtest.quit", -1); -