Repository: celix Updated Branches: refs/heads/feature/CELIX-237_rsa-ffi 30f7e8419 -> fa527209f
CELIX-237: Added extra dyn function test for a output parameter Project: http://git-wip-us.apache.org/repos/asf/celix/repo Commit: http://git-wip-us.apache.org/repos/asf/celix/commit/fa527209 Tree: http://git-wip-us.apache.org/repos/asf/celix/tree/fa527209 Diff: http://git-wip-us.apache.org/repos/asf/celix/diff/fa527209 Branch: refs/heads/feature/CELIX-237_rsa-ffi Commit: fa527209f1e74b61d2d844a8d2b7f38f2b28659a Parents: 30f7e84 Author: Pepijn Noltes <pepijnnol...@gmail.com> Authored: Tue Aug 11 19:01:44 2015 +0200 Committer: Pepijn Noltes <pepijnnol...@gmail.com> Committed: Tue Aug 11 19:01:44 2015 +0200 ---------------------------------------------------------------------- .../tst/dyn_function_tests.cpp | 41 ++++++++++++++++++++ 1 file changed, 41 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/celix/blob/fa527209/remote_services/remote_service_admin_dfi/dynamic_function_interface/tst/dyn_function_tests.cpp ---------------------------------------------------------------------- diff --git a/remote_services/remote_service_admin_dfi/dynamic_function_interface/tst/dyn_function_tests.cpp b/remote_services/remote_service_admin_dfi/dynamic_function_interface/tst/dyn_function_tests.cpp index 9b681de..868073b 100644 --- a/remote_services/remote_service_admin_dfi/dynamic_function_interface/tst/dyn_function_tests.cpp +++ b/remote_services/remote_service_admin_dfi/dynamic_function_interface/tst/dyn_function_tests.cpp @@ -120,6 +120,42 @@ extern "C" { dynFunction_destroy(dynFunc); } + //example with gen pointer and output + #define EXAMPLE3_DESCRIPTOR "example(PD*D)N" + + static int testExample3(void *ptr, double a, double *out) { + double *b = (double *)ptr; + CHECK_EQUAL(2.0, *b) + CHECK_EQUAL(a, 2.0); + *out = *b * a; + printf("out is %p and *out is %f\n", out, *out); + return 0; + } + + static void test_example3(void) { + dyn_function_type *dynFunc = NULL; + int rc; + + rc = dynFunction_parseWithStr(EXAMPLE3_DESCRIPTOR, NULL, &dynFunc); + CHECK_EQUAL(0, rc); + double result = -1.0; + double *input = &result; + printf("\n"); + printf("input is %p, &input is %p and *input is %d\n", input, &input, *input); + double a = 2.0; + void *ptr = &a; + void *args[3]; + args[0] = &ptr; + args[1] = &a; + args[2] = &input; + void (*fp)(void) = (void(*)(void)) testExample3; + + rc = dynFunction_call(dynFunc, fp, &result, args); + printf("input is %p, &input is %p and *input is %d\n", input, &input, *input); + + CHECK_EQUAL(0, rc); + CHECK_EQUAL(4.0, result); + } } @@ -141,4 +177,9 @@ TEST(DynFunctionTests, DynFuncTest2) { TEST(DynFunctionTests, DynFuncAccTest) { test_access_functions(); +} + + +TEST(DynFunctionTests, DynFuncTest3) { + test_example3(); } \ No newline at end of file